public void Test1(List <MTimeScale> timeScales, MBoard board) { // InMemoryDBを使うオプションを作成 var options = new DbContextOptionsBuilder <ApplicationDbContext>() .UseInMemoryDatabase(databaseName: "Test1") .Options; CandleMaker data = null; using (var dbContext = new ApplicationDbContext(options)) // InMemoryDBを使うオプション設定を渡す { // インスタンス作成 data = CandleMaker.MakeGeneration(Logger, dbContext, timeScales, board); } // 名前の確認 data.TimeScale.DisplayName.Is("1分"); // この時間足データの場合、一番親の子(2代目)が2つあること data.Children.Count.Is(2); // 約数があって一番大きい秒数の子が親から辿れること // 表示名が正しく設定されていること data.Children[0].Children[0].Children[0].Children[0].Children[0].Children[0].Children[0].Children[0].TimeScale.DisplayName.Is("1日"); }
public static CMarket Create() { var analyzer15m = new EvaluationAnalyze() { Name = "15m", timeUnit = 15, //MacdList = MainConfiguration.Configuration.MacdList, // EmaDiff = MainConfiguration.Configuration.EmaDiff, // ema buoni: 10,20 10,21, 8,20 EmaDiff = EmaDiff.Create(MainConfiguration.Configuration.EmaDiff[0], MainConfiguration.Configuration.EmaDiff[1]), // ema buoni: 10,20 10,21, 8,20 StopLoss = new CStopLoss() { Percent = MainConfiguration.Configuration.StopLossPercent } }; var analyzer1h = new EvaluationAnalyze() { Name = "1h", timeUnit = 60, //MacdList = MainConfiguration.Configuration.MacdList, // EmaDiff = MainConfiguration.Configuration.EmaDiff, // ema buoni: 10,20 10,21, 8,20 EmaDiff = EmaDiff.Create(MainConfiguration.Configuration.EmaDiff[0], MainConfiguration.Configuration.EmaDiff[1]), // ema buoni: 10,20 10,21, 8,20 StopLoss = new CStopLoss() { Percent = MainConfiguration.Configuration.StopLossPercent } }; var candleMaker = new CandleMaker() { GenerateFile = false, //MainConfiguration.Configuration.GenerateCandleFile, CandleWidth = MainConfiguration.Configuration.CandleWidthInSeconds, Analyze = analyzer15m }; var market = new CMarketEvaluator() { UseMtGox = MainConfiguration.Configuration.MarketSimulatorUseMtgox, UseFile = MainConfiguration.Configuration.MarketSimulatorUseCandleFile, FileName = MainConfiguration.Configuration.MarketSimulatorCandleFileName, DeltaTime = MainConfiguration.Configuration.MarketSimulatorSqLiteDeltaTime, StartTime = MainConfiguration.Configuration.MarketSimulatorSqLiteStartDate, EndTime = MainConfiguration.Configuration.MarketSimulatorSqLiteEndDate, CandleMaker = candleMaker, CandleMakerHourly = new CandleMaker() { GenerateFile = false, CandleWidth = 60 * 15 * 4, Analyze = analyzer1h } }; return(market); }
/// <summary> /// Tickerを受信するWebSocketを追加する /// 受信時のイベントを登録する /// 後の処理はCandleMakerに任せる /// </summary> /// <param name="myWebSocket">Tickerを受信するWebSocket</param> /// <param name="board">MBoard</param> /// <param name="timeScales">時間足リスト、時間が短い順</param> public void AddWebSocket(MyWebSocket myWebSocket, MBoard board, List <MTimeScale> timeScales) { // ローソク作成クラスを作成する var candleMaker = CandleMaker.MakeGeneration(Logger, DbContext, timeScales, board); // 受信時のイベント設定 if (board.Name.StartsWith(SystemConstants.BoardPrefixBitflyer)) { // BFの場合 myWebSocket.GetMessage += (obj, e) => { var textEvent = e as TextEventArgs; var ticker = JsonConvert.DeserializeObject <LightningTicker>(textEvent.Text); // tickerをこのWSに対応したローソク作成クラスの一番親に送る candleMaker.Update(new Ticker(ticker)); }; } // リストに追加 CandleMakers.Add(board.Name, candleMaker); WebSockets.Add(board.Name, myWebSocket); }
public void Test3() { // InMemoryDBを使うオプションを作成 var options = new DbContextOptionsBuilder <ApplicationDbContext>() .UseInMemoryDatabase(databaseName: "Test3") .Options; CandleMaker data = null; using (var dbContext = new ApplicationDbContext(options)) // InMemoryDBを使うオプション設定を渡す { // インスタンス作成 data = CandleMaker.MakeGeneration(Logger, dbContext, TimeScales, Boards[0]); // 親にTickerを入力していく data.Update(Tickers5m[0]); // "08/18/2018 07:22:16" 800000 // 最初のTickerが入力されたら、ローソクが作成される // 5分足なので、開始と終了時間は5分ごとに切り捨て data.Children[0].CurrentCandle.BeginTime.Is(DateTime.Parse("08/18/2018 07:20:00")); data.Children[0].CurrentCandle.EndTime.Is(DateTime.Parse("08/18/2018 07:25:00")); data.Children[0].CurrentCandle.Begin.Is(800000); data.Children[0].CurrentCandle.End.Is(800000); data.Children[0].CurrentCandle.Min.Is(800000); data.Children[0].CurrentCandle.Max.Is(800000); // 1分経過したらローソクが更新される data.Update(Tickers5m[1]); // "08/18/2018 07:23:00" 802000 data.Children[0].CurrentCandle.Begin.Is(800000); data.Children[0].CurrentCandle.End.Is(802000); data.Children[0].CurrentCandle.Min.Is(800000); data.Children[0].CurrentCandle.Max.Is(802000); // 5分経過していない場合、ローソクリストに加えない(境界値テスト) // 安値更新 data.Update(Tickers5m[2]); // "08/18/2018 07:24:59" 799000 data.Children[0].CurrentCandle.Begin.Is(800000); data.Children[0].CurrentCandle.End.Is(799000); data.Children[0].CurrentCandle.Min.Is(799000); data.Children[0].CurrentCandle.Max.Is(802000); data.Children[0].CandleList.Count.Is(0); // 5分経過したらローソクリストに加える // 5分経過した後のTicker価格はローソクリストのローソクに影響しない // 5分経過した後のTicker価格は新しいローソクに反映する data.Update(Tickers5m[3]); // "08/18/2018 07:25:00" 803000 data.Children[0].CandleList[0].Begin.Is(800000); data.Children[0].CandleList[0].End.Is(799000); data.Children[0].CandleList[0].Min.Is(799000); data.Children[0].CandleList[0].Max.Is(802000); data.Children[0].CurrentCandle.Begin.Is(803000); data.Children[0].CurrentCandle.End.Is(803000); data.Children[0].CurrentCandle.Min.Is(803000); data.Children[0].CurrentCandle.Max.Is(803000); data.Children[0].CandleList.Count.Is(1); // 15分経過したらローソク3本になっている // 間のローソクはMin = Maxになっている data.Update(Tickers5m[4]); // "08/18/2018 07:35:00" 805000 data.Children[0].CandleList.Count.Is(3); data.Children[0].CandleList[1].Begin.Is(803000); data.Children[0].CandleList[1].End.Is(803000); data.Children[0].CandleList[1].Min.Is(803000); data.Children[0].CandleList[1].Max.Is(803000); data.Children[0].CandleList[2].Begin.Is(803000); data.Children[0].CandleList[2].End.Is(803000); data.Children[0].CandleList[2].Min.Is(803000); data.Children[0].CandleList[2].Max.Is(803000); data.Children[0].CurrentCandle.Begin.Is(805000); data.Children[0].CurrentCandle.End.Is(805000); data.Children[0].CurrentCandle.Min.Is(805000); data.Children[0].CurrentCandle.Max.Is(805000); // 505分経過したらメモリの最初のローソクを削除する data.Update(Tickers5m[5]); // "08/18/2018 09:08:00" 806000 data.Children[0].CandleList.Count.Is(SystemConstants.MaxCandle); data.Children[0].CandleList[0].BeginTime.Is(DateTime.Parse("08/18/2018 07:25:00")); } }