Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        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"));
            }
        }