private void UpdateIntervalData(Interval intervSpan, ref IntervalData intvData, double[] prices, DateTime time, DataProvider provider) { if (currentTimes.ContainsKey(intervSpan) && currentDatas.ContainsKey(intervSpan)) { DateTime lastTime = currentTimes[intervSpan]; DateTime currTime = AppUtil.GetCurrentIntervalTime(lastTime, time, intervSpan); TimeSpan span = time.Subtract(lastTime); Console.WriteLine(" currentTimes[TInterval.MIN1] span " + span + " lastTime " + lastTime + " real time " + time + " currTime " + currTime); LogUtil.Info(" currentTimes[TInterval.MIN1] span " + span + " lastTime " + lastTime + " real time " + time + " currTime " + currTime); if (lastTime.CompareTo(time) > 0) { return; } else if (span >= AppConst.AppTimeSpans[intervSpan]) { lastTime = AppUtil.GetLatestIntervalTime(lastTime, time, intervSpan); Console.WriteLine(" span > interval span::: " + span + " lastTime " + lastTime + " real time " + time); BarData barData = dataUnits[intervSpan][dataUnits[intervSpan].Count - 1]; barData.DateTime = lastTime; barData.Open = intvData.Open; barData.Close = intvData.Close; barData.Low = intvData.Min; barData.High = intvData.Max; barData.SignalList = intvData.SignalList; Console.WriteLine(" BarData #### time " + barData); List <CandleSignal> currSignalList = new List <CandleSignal>(); Signal[] signals = null; lock (AppConst.SignalDatasLocker) { signals = new Signal[AppContext.SignalDatas.Count]; AppContext.SignalDatas.CopyTo(signals); } if (signals != null) { int count = 0; Array.Sort(signals); foreach (Signal s in signals) { if (s.Symbol == provider.Symbol && s.Interval == provider.CurrentTInterval) { if (s.ActTime.CompareTo(lastTime) == 0 && s.Arrow != 0) { CandleSignal cs = new CandleSignal(s, 1); if (!barData.SignalList.Contains(cs)) { barData.SignalList.Add(cs); } } if (s.Arrow != 0 && s.ActTime.CompareTo(currTime) == 0) { CandleSignal cs = new CandleSignal(s, 1); currSignalList.Add(cs); } if (s.StopLoss != 0 && s.StopLossTime.CompareTo(lastTime) == 0) { CandleSignal cs = new CandleSignal(s, 3); if (!barData.SignalList.Contains(cs)) { barData.SignalList.Add(cs); } } if (s.StopLoss != 0 && s.StopLossTime.CompareTo(currTime) == 0) { CandleSignal cs = new CandleSignal(s, 3); currSignalList.Add(cs); } if (s.GainTip != 0 && s.GainTipTime.CompareTo(lastTime) == 0) { CandleSignal cs = new CandleSignal(s, 2); if (!barData.SignalList.Contains(cs)) { barData.SignalList.Add(cs); } } if (s.GainTip != 0 && s.GainTipTime.CompareTo(currTime) == 0) { CandleSignal cs = new CandleSignal(s, 2); currSignalList.Add(cs); } if (s.StopGain != 0 && s.StopGainTime.CompareTo(lastTime) == 0) { CandleSignal cs = new CandleSignal(s, 4); if (!barData.SignalList.Contains(cs)) { barData.SignalList.Add(cs); } } if (s.StopGain != 0 && s.StopGainTime.CompareTo(currTime) == 0) { CandleSignal cs = new CandleSignal(s, 4); currSignalList.Add(cs); } if (count > 5) { break; } count++; } } } barData.RefreshExValues(); Console.WriteLine(" BarData ############ time " + barData); LogUtil.Info(" Last BarData ##### " + barData); SAR sar = null; CR cr = null; RSI rsi = null; RSI rsi2 = null; RSI rsi3 = null; RSI rsi4 = null; ARBR arbr = null; ARBR arbr2 = null; CCI cci = null; CCI cci2 = null; CCI cci3 = null; WR wr = null; WR wr2 = null; LWR lwr = null; BOLL boll = null; if (!provider.Initializing && provider.Initialized) { sar = iSARs[intervSpan]; cr = iCRs[intervSpan]; rsi = iRISs[intervSpan]; rsi2 = iRISs2[intervSpan]; rsi3 = iRISs3[intervSpan]; rsi4 = iRISs4[intervSpan]; arbr = iARBRs[intervSpan]; arbr2 = iARBRs2[intervSpan]; cci = iCCIs[intervSpan]; cci2 = iCCIs2[intervSpan]; cci3 = iCCIs3[intervSpan]; wr = iWRs[intervSpan]; wr2 = iWRs2[intervSpan]; lwr = iLWRs[intervSpan]; boll = iBOLLs[intervSpan]; sar.handleFullCandle(ref barData); rsi.handleFullCandle(ref barData, true, 1); rsi2.handleFullCandle(ref barData, true, 2); rsi3.handleFullCandle(ref barData, true, 3); rsi4.handleFullCandle(ref barData, true, 4); cr.handleFullCandle(ref barData); arbr.handleFullCandle(ref barData, 1); arbr2.handleFullCandle(ref barData, 2); cci.handleFullCandle(ref barData, 1); cci2.handleFullCandle(ref barData, 2); cci3.handleFragCandle(ref barData, 3); wr.handleFullCandle(ref barData, 1); wr2.handleFullCandle(ref barData, 2); lwr.handleFullCandle(ref barData, 0); boll.handleFullCandle(ref barData, 0); } if (dataUnits.ContainsKey(intervSpan)) { dataUnits[intervSpan][dataUnits[intervSpan].Count - 1] = (barData); } else { List <BarData> list = new List <BarData>(); list.Add(barData); dataUnits.Add(intervSpan, list); } if (provider.CurrentTInterval == intervSpan) { provider.IsUpdateCandle = false; provider.IsAddCandle = true; } Console.WriteLine(" New BarData #### time " + currTime); currentTimes[intervSpan] = currTime; Console.WriteLine(" currentTimes[" + intervSpan + "] " + currentTimes[intervSpan]); Console.WriteLine(" NEW RTD.symbol time " + time + " price " + prices[0]); intvData = new IntervalData(0); double p = prices[0]; intvData.Max = p; intvData.Min = p; intvData.Open = p; intvData.Close = p; intvData.PriceList.Clear(); foreach (double price in prices) { intvData.PriceList.Add(price); intvData.Max = Math.Max(intvData.Max, price); intvData.Min = Math.Min(intvData.Min, price); } barData = new BarData(currTime, intvData.Open, intvData.Close, intvData.Min, intvData.Max, 0); barData.SignalList = currSignalList; barData.RefreshExValues(); if (!provider.Initializing && provider.Initialized) { barData.Sar = sar.getNextSAR(); rsi.handleFullCandle(ref barData, false, 1); rsi2.handleFullCandle(ref barData, false, 2); rsi3.handleFullCandle(ref barData, false, 3); rsi4.handleFullCandle(ref barData, false, 4); cr.handleFullCandle(ref barData); cci.handleFragCandle(ref barData, 2); cci2.handleFragCandle(ref barData, 2); iSARs[intervSpan] = sar; iRISs[intervSpan] = rsi; iRISs2[intervSpan] = rsi2; iRISs3[intervSpan] = rsi3; iRISs4[intervSpan] = rsi4; iCRs[intervSpan] = cr; iARBRs[intervSpan] = arbr; iARBRs2[intervSpan] = arbr2; iCCIs[intervSpan] = cci; iCCIs2[intervSpan] = cci2; iCCIs3[intervSpan] = cci3; iWRs[intervSpan] = wr; iWRs2[intervSpan] = wr2; iLWRs[intervSpan] = lwr; iBOLLs[intervSpan] = boll; } LogUtil.Info(" New BarData #### " + barData); dataUnits[intervSpan].Add(barData); Console.WriteLine(" New intvData ############ op " + intvData.Open + " cls " + intvData.Close + " max " + intvData.Max + " low " + intvData.Min); Console.WriteLine(" allDataUnits[provider.Symbol][intervSpan]..Count ::::::::::::::::::::::::::: " + dataUnits[intervSpan].Count); } else { Console.WriteLine(" IN currentTimes[" + intervSpan + "] " + currentTimes[intervSpan]); foreach (double price in prices) { intvData.PriceList.Add(price); intvData.Max = Math.Max(intvData.Max, price); intvData.Min = Math.Min(intvData.Min, price); } Signal[] signals = null; lock (AppConst.SignalDatasLocker) { signals = new Signal[AppContext.SignalDatas.Count]; AppContext.SignalDatas.CopyTo(signals); } if (signals != null) { Array.Sort(signals); int count = 0; foreach (Signal s in signals) { if (s.Symbol == provider.Symbol && s.Interval == provider.CurrentTInterval) { if (s.Arrow != 0 && s.ActTime.CompareTo(lastTime) == 0) { CandleSignal cs = new CandleSignal(s, 1); if (!intvData.SignalList.Contains(cs)) { intvData.SignalList.Add(cs); } } if (s.GainTip != 0 && s.GainTipTime.CompareTo(lastTime) == 0) { CandleSignal cs = new CandleSignal(s, 2); if (!intvData.SignalList.Contains(cs)) { intvData.SignalList.Add(cs); } } if (s.StopLoss != 0 && s.StopLossTime.CompareTo(lastTime) == 0) { CandleSignal cs = new CandleSignal(s, 3); if (!intvData.SignalList.Contains(cs)) { intvData.SignalList.Add(cs); } } if (s.StopGain != 0 && s.StopGainTime.CompareTo(lastTime) == 0) { CandleSignal cs = new CandleSignal(s, 4); if (!intvData.SignalList.Contains(cs)) { intvData.SignalList.Add(cs); } } if (count > 5) { break; } count++; } } } intvData.Close = intvData.PriceList.Last <double>(); //intvData.isInitialized = true; if (provider.CurrentTInterval == intervSpan) { provider.IsUpdateCandle = true; provider.IsAddCandle = false; } LogUtil.Info(" Updated intvData ############ " + intvData); } Console.WriteLine(" Update intvData ############ op " + intvData.Open + " cls " + intvData.Close + " max " + intvData.Max + " low " + intvData.Min); //} //intvData.isUpdated = true; } }