예제 #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StockExchangeParameters"/> class.
 /// </summary>
 public StockExchangeParameters()
 {
     PeriodTypes        = new PeriodType[] { PeriodType.Day, PeriodType.Week, PeriodType.Month };
     EpisodeLength      = 7;
     NumberOfPeriods    = 14;
     InitialCapital     = 100000;
     TransactionCost    = 0.01;
     SimulationVelocity = 0;
     RewardCalculator   = RewardCalculator.Use(RewardCalculatorType.WinningsOverLoosings);
 }
예제 #2
0
        /// <summary>
        /// Initialize the agent and the stock exchange
        /// </summary>
        /// <param name="agentId"></param>
        protected void Initialize(long?agentId)
        {
            using (var DbContext = new DeepQStockContext())
            {
                if (agentId.HasValue)
                {
                    var agentParameters = DbContext.DeepRLAgentParameters
                                          .Include(a => a.QNetwork)
                                          .Include(a => a.StockExchange)
                                          .Single(a => a.Id == agentId.Value);

                    if (agentParameters.Status == AgentStatus.Completed)
                    {
                        DbContext.ClearAgent(agentParameters);
                        DbContext.SaveChanges();
                    }

                    Parameters       = agentParameters.StockExchange;
                    RewardCalculator = RewardCalculator.Use(RewardCalculatorType.WinningsOverLoosings);

                    DailyIndicators   = InitializeIndicators(DbContext, PeriodType.Day);
                    WeeklyIndicators  = InitializeIndicators(DbContext, PeriodType.Week);
                    MonthlyIndicators = InitializeIndicators(DbContext, PeriodType.Month);

                    Agent = new DeepRLAgent(agentParameters);
                    Agent.OnTrainingEpochComplete += (e, args) => RedisManager.Publish(RedisPubSubChannels.OnTrainingEpochComplete, JsonConvert.SerializeObject(args));

                    var experiences = DbContext.Experiences.Where(e => e.AgentId == agentParameters.Id).ToList();
                    Agent.SetExperiences(experiences);

                    DataProvider = new CsvDataProvider(Parameters.CsvDataFilePath, Parameters.EpisodeLength);

                    if (agentParameters.Status == AgentStatus.Paused)
                    {
                        CurrentState = DbContext.States.Include(s => s.InternalPeriods).Single(s => s.StockExchangeId == Parameters.Id);
                        DataProvider.Seek(CurrentState.Today.Date.AddDays(1));
                    }

                    if (agentParameters.Status == AgentStatus.Completed)
                    {
                        DbContext.ClearAgent(agentParameters);
                    }

                    agentParameters.Status = AgentStatus.Running;
                    DbContext.SaveChanges();
                }
            }
        }