/// <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); }
/// <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(); } } }