Пример #1
0
        /// <summary>
        /// 親専用
        /// Tickerでローソクを更新する
        /// </summary>
        /// <param name="ticker">Ticker</param>
        public void Update(Ticker ticker)
        {
            // 現在のTickerに設定
            CurrentTicker = ticker;

            if (CurrentCandle == null)
            {
                // 起動してから初回の動作
                if (SystemConstants.IsFirstDeleteCandle)
                {
                    // この板の全ローソクデータを削除
                    Logger.LogInformation($"ローソクデータ全削除:{Board.Name}");
                    var delList = DbContext.Candles.Include(x => x.MBoard).Where(d => d.MBoard.MBoardId == Board.MBoardId).ToList();
                    DbContext.Candles.RemoveRange(delList);
                    DbContext.SaveChanges();
                }

                // 新しいローソクの準備
                CurrentCandle = new Candle(Board, TimeScale, CurrentTicker);

                // 子要素を新しいローソクで更新
                UpdateChildren(CurrentCandle);
            }
            else // 初回ではない場合
            {
                // ローソクを更新
                var newCandles = CurrentCandle.UpdateByTicker(CurrentTicker);

                foreach (var item in newCandles)
                {
                    // 新しいローソクがある場合
                    // 現在のローソクでDB更新
                    Logger.LogDebug($"DB:Candles更新:{Board.Name} {TimeScale.DisplayName}");
                    DbContext.Candles.Add(CurrentCandle);

                    // 今まで作成したローソクに追加
                    CandleList.Add(CurrentCandle);

                    // 子要素を新しいローソクで更新
                    UpdateChildren(item);

                    // 新しいローソクをセット
                    CurrentCandle = item;
                }
                if (newCandles.Count > 0)
                {
                    // 更新があった場合
                    // 最大データ数を超えていたら、古いデータを1件削除
                    DeleteOldData();

                    // 子要素も更新が終わったらコミット
                    DbContext.SaveChanges(SystemConstants.SystemName);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// 子専用
        /// 親から送られてきたローソクで更新する
        /// </summary>
        /// <param name="candle">ローソクデータ</param>
        public void UpdateByCandle(Candle candle)
        {
            Logger.LogDebug($"DB:Candles更新:{Board.Name} {TimeScale.DisplayName}");
            if (CurrentCandle == null)
            {
                // 初回
                // 新しいローソクの準備
                CurrentCandle = new Candle(Board, TimeScale, candle);

                // 子要素を更新
                UpdateChildren(candle);
            }
            else
            {
                // 2回目以降
                var newCandles = CurrentCandle.UpdateByCandle(candle);

                foreach (var item in newCandles)
                {
                    // 新しいローソクがある場合
                    // 現在のローソクでDB更新
                    DbContext.Candles.Add(CurrentCandle);

                    // 今まで作成したローソクに追加
                    CandleList.Add(CurrentCandle);

                    // 子要素を新しいローソクで更新
                    UpdateChildren(item);

                    // 新しいローソクをセット
                    CurrentCandle = item;
                }
                if (newCandles.Count > 0)
                {
                    // 更新があった場合
                    // 最大データ数を超えていたら、古いデータを1件削除
                    DeleteOldData();
                }
            }
        }
Пример #3
0
 public void Subscribe(CurrentCandle type)
 {
     _candleInfoSubject.OnNext(type);
 }