コード例 #1
0
        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;
            }
        }