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; } }
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); } }
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 }
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; } } } } }