コード例 #1
0
        public override void FunGetResult(string funName, object result)
        {
            JObject res     = (JObject)result;
            JArray  history = (JArray)res["data"];

            OpenPrice = System.Convert.ToDouble(history[0][1].ToString());
            for (int i = 0; i < history.Count; i++)
            {
                double high = System.Convert.ToDouble(history[i][2].ToString());
                double low  = System.Convert.ToDouble(history[i][3].ToString());
                DieBar bar  = new DieBar();
                bar.High = high;
                bar.Low  = low;
                if (high > SighHighPrice)
                {
                    SighHighPrice = high;
                }
                if (low < SighLowPrice)
                {
                    SighLowPrice = low;
                }
                LiveBars.Add(bar);
            }
            if (LiveBars.Count >= parameter.BarCount)
            {
                StartTrade      = true;
                RegionHighPrice = SighHighPrice;
                RegionLowPrice  = SighLowPrice;
            }
        }
コード例 #2
0
        private void LoadHistoryBars()
        {
            int resolution = parameter.BarInteval;

            string nowTime = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ");

            JArray history = TradeAPI.GetKLine(SecInfo, resolution.ToString(), "", nowTime);

            for (int i = 1; i < parameter.BarCountIn + 1; i++)
            {
                DieBar bar = new DieBar();
                bar.Open  = System.Convert.ToDouble(history[i][1].ToString());
                bar.High  = System.Convert.ToDouble(history[i][2].ToString());
                bar.Low   = System.Convert.ToDouble(history[i][3].ToString());
                bar.Close = System.Convert.ToDouble(history[i][4].ToString());
                LiveBarsIn.Add(bar);
            }
        }
コード例 #3
0
        void liveDataProcessor_OnLiveBarArrival(object sender, LiveBarArrivalEventArgs args)
        {
            int inteval = ((LiveBars)sender).Inteval;

            #region 策略bar逻辑
            if (inteval == parameter.BarInteval)
            {
                if (args.Bar.Finish)
                {
                    if (!InitKaiCangBar)
                    {
                        if (LiveBars.Count < parameter.BarCount)
                        {
                            DieBar bar = new DieBar();
                            bar.High = args.Bar.High;
                            bar.Low  = args.Bar.Low;
                            if (bar.High > SighHighPrice)
                            {
                                SighHighPrice = bar.High;
                            }
                            if (bar.Low < SighLowPrice)
                            {
                                SighLowPrice = bar.Low;
                            }
                            LiveBars.Add(bar);
                        }
                        else
                        {
                            InitKaiCangBar  = true;
                            StartTrade      = true;
                            RegionHighPrice = SighHighPrice;
                            RegionLowPrice  = SighLowPrice;
                        }
                    }
                    else
                    {
                        if (args.Bar.High > RegionHighPrice)
                        {
                            RegionHighPrice = args.Bar.High;
                        }
                        if (args.Bar.Low < RegionLowPrice)
                        {
                            RegionLowPrice = args.Bar.Low;
                        }
                        if (args.Bar.Close < SighHighPrice && K1)
                        {
                            K1         = false;
                            arriveHigh = false;
                        }
                        if (args.Bar.Close > SighLowPrice && K2)
                        {
                            K2        = false;
                            arriveLow = false;
                        }
                        if (arriveHigh && !K1)
                        {
                            if (args.Bar.Close < args.Bar.Open)
                            {
                                if (args.Bar.Close < args.Bar.PreBar.Low)
                                {
                                    K1 = true;
                                }
                            }
                        }
                        if (arriveLow && !K2)
                        {
                            if (args.Bar.Close > args.Bar.Open)
                            {
                                if (args.Bar.Close > args.Bar.PreBar.High)
                                {
                                    K2 = true;
                                }
                            }
                        }
                    }
                }
            }
            #endregion
        }
コード例 #4
0
        void liveDataProcessor_OnLiveBarArrival(object sender, LiveBarArrivalEventArgs args)
        {
            int inteval = ((LiveBars)sender).Inteval;

            if (inteval == parameter.BarInteval)
            {
                if (LiveBarsIn.Count == 0)
                {
                    LoadHistoryBars();
                }
                else
                {
                    DieBar bar = new DieBar();
                    bar.Open   = args.Bar.Open;
                    bar.High   = args.Bar.High;
                    bar.Low    = args.Bar.Low;
                    bar.Close  = args.Bar.Close;
                    bar.Finish = args.Bar.Finish;

                    if (bar.Close == 0)
                    {
                        return;
                    }

                    if (LiveBarsIn.Count < parameter.BarCountIn)
                    {
                        if (bar.Finish)
                        {
                            LiveBarsIn.Add(bar);
                        }
                    }
                    else
                    {
                        if (!init)
                        {
                            foreach (DieBar tempBar in LiveBarsIn)
                            {
                                if (tempBar.High > signInHighPrice)
                                {
                                    signInHighPrice = tempBar.High;
                                }
                                if (tempBar.Low < signInLowPrice)
                                {
                                    signInLowPrice = tempBar.Low;
                                }
                            }
                            Ratio = ((signInHighPrice - signInLowPrice) / ((signInHighPrice + signInLowPrice) * 0.5)) * 100;
                            init  = true;
                        }
                        if (bar.Finish)
                        {
                            DieBar removeBar = LiveBarsIn[0];
                            LiveBarsIn.RemoveAt(0);
                            LiveBarsIn.Add(bar);

                            if (bar.High > signInHighPrice)
                            {
                                signInHighPrice = bar.High;
                            }
                            else
                            {
                                if (removeBar.High == signInHighPrice)
                                {
                                    signInHighPrice = 0;
                                    foreach (DieBar tempBar in LiveBarsIn)
                                    {
                                        if (tempBar.High > signInHighPrice)
                                        {
                                            signInHighPrice = tempBar.High;
                                        }
                                    }
                                }
                            }

                            if (bar.Low < signInLowPrice)
                            {
                                signInLowPrice = bar.Low;
                            }
                            else
                            {
                                if (removeBar.Low == signInLowPrice)
                                {
                                    signInLowPrice = 1000000;
                                    foreach (DieBar tempBar in LiveBarsIn)
                                    {
                                        if (tempBar.Low < signInLowPrice)
                                        {
                                            signInLowPrice = tempBar.Low;
                                        }
                                    }
                                }
                            }
                            Ratio = ((signInHighPrice - signInLowPrice) / ((signInHighPrice + signInLowPrice) * 0.5)) * 100;
                        }
                    }
                }
            }
        }