void rp_PolicyParam_Arrival(object sender, PolicyParamEventArgs args) //void stockMonitor_StockMonitor_ResultArrival(RunningPolicy policy,StockPolicies.PolicyResultEventArgs args) { RunningPolicy policy = (RunningPolicy)sender; _trader.policyParamChange(policy, args.ParamName, args.ParamValue); }
internal void AddStock(List <StockPolicies.RunningPolicy> policies) { this._policies = policies; for (int i = 0; i < policies.Count; i++) { RunningPolicy rp = policies[i]; grid_realpolicy.Rows.Add(); int row = grid_realpolicy.Rows.Count - 1; grid_realpolicy.SetCellImage(row, 0, global::EntropyRiseStockTP0.Properties.Resources.Ext_Net_Build_Ext_Net_icons_chart_line); grid_realpolicy.SetCellImage(row, 8, global::EntropyRiseStockTP0.Properties.Resources.Ext_Net_Build_Ext_Net_icons_cancel); grid_realpolicy.SetCellImage(row, 9, global::EntropyRiseStockTP0.Properties.Resources.Pause_Normal_Red_16px_560489_easyicon_net); grid_realpolicy.Rows[row][1] = rp.SecInfo.Code; grid_realpolicy.Rows[row][2] = rp.SecInfo.Name; grid_realpolicy.Rows[row][3] = "-"; grid_realpolicy.Rows[row][4] = "-"; grid_realpolicy.Rows[row][5] = "-"; grid_realpolicy.Rows[row][6] = "-"; grid_realpolicy.Rows[row][7] = rp.PolicyName; grid_realpolicy.Rows[row].UserData = rp; rp.PolicyMessage_Arrival += rp_PolicyMessage_Arrival; rp.PolicyResult_Arrival += rp_PolicyResult_Arrival; rp.PolicyFunCGet_Arrival += rp_PolicyFunCGet_Arrival; rp_PolicyKeCheArgs_Arrival(rp.kca); rp.LiveData_Arrival += rp_LiveData_Arrival; rp.PolicyParam_Arrival += rp_PolicyParam_Arrival; rp.InitArgs(); Simulator(rp.SecInfo, System.DateTime.Now.Date, System.DateTime.Now.Date, rp.PolicyDataReceiver, 0); } }
//策略需要拉取信息 void PolicyFunArraival(object sender, PolicyFunCGetEventArgs args) { RunningPolicy policy = (RunningPolicy)sender; BaseTradeAPI bta = RunningST[args.SecInfo.Market]; var result = bta.GetType().GetMethod(args.FunName).Invoke(bta, args.Parameters); ((RunningPolicy)args.PolicyObject).FunGetResult(args.FunName, result); }
public void InitialStock(RunningPolicy _policy) { this.policy = _policy; this.lb_stockcode.Text = _policy.SecInfo.Code; this.lb_stockname.Text = _policy.SecInfo.Name; this.lb_stockprice.Text = string.Empty; this.lb_stockpercent.Text = string.Empty; this.lb_policyname.Text = _policy.PolicyName; policy.LiveData_Arrival += runningPolicy_LiveData_Arrival; policy.PolicyResult_Arrival += policy_PolicyResult_Arrival; policy.PolicyMessage_Arrival += policy_PolicyMessage_Arrival; }
void stockMonitor_StockMonitor_ResultArrival(RunningPolicy policy, StockPolicies.PolicyResultEventArgs args) { if (!args.PairePoint.Closed) { policy.Notify(args.PairePoint.TradeGuid, OpenStatus.Opened, args.PairePoint.EnterPoint.OpenQty); } else { policy.Notify(args.PairePoint.TradeGuid, OpenStatus.Close, args.PairePoint.OutPoint.OpenQty, 0, "1234"); policy.Notify(args.PairePoint.TradeGuid, OpenStatus.Closed, args.PairePoint.OutPoint.OpenQty, args.PairePoint.OutPoint.OpenPrice, "1234"); } updateResult(args); Write(args); //updateResult(args); //Write(args); }
//策略开仓 void PolicyResultArraival(object sender, PolicyResultEventArgs args) { RunningPolicy policy = (RunningPolicy)sender; if (args.IsSim) { if (!args.PairePoint.Closed) { policy.Notify(args.PairePoint.TradeGuid, OpenStatus.Opened); } else { policy.Notify(args.PairePoint.TradeGuid, OpenStatus.Closed); } } else { ////////////add///////////// if (!args.IsReal) { if (!args.PairePoint.Closed) { policy.Notify(args.PairePoint.TradeGuid, OpenStatus.Opened); } else { policy.Notify(args.PairePoint.TradeGuid, OpenStatus.Closed); } } //////////add end//////////// //if (args.IsReal) else { Trader trader = traders[args.SecInfo.Market]; if (!args.PairePoint.Closed) //开仓 { trader.policyTrade(args.SecInfo, args.PolicyName1, args.PairePoint, policy, PolicyTradeType.Open); } else //平仓 { trader.policyTrade(args.SecInfo, args.PolicyName1, args.PairePoint, policy, PolicyTradeType.Close); } } } }
internal void AddStock(List <StockPolicies.RunningPolicy> policies) { for (int i = 0; i < policies.Count; i++) { //if(stockMonitors.ContainsKey(policies[i].StockCode)) //{ // //结束本次循环,进行下次循环 // continue; //} //使用uc_StockMonitor控件接收数据 RunningPolicy rp = policies[i]; rp.CanStart = true; uc_StockMonitor stockMonitor = new uc_StockMonitor(); stockMonitor.InitialStock(rp); stockMonitor.Width = panel_stockmonitor.Width; //设置控件的高度 stockMonitor.Height = 30; //设置控件上边缘与其容器的工作区上边缘之间的距离 stockMonitor.Top = stockCount * 30 - this.panel_stockmonitor.VerticalScroll.Value; stockMonitor.Width = panel_stockmonitor.Width - System.Windows.Forms.SystemInformation.VerticalScrollBarWidth * System.Convert.ToInt32(panel_stockmonitor.VerticalScroll.Visible); //设置控件左边缘与其容器的工作区左边缘之间的距离 stockMonitor.Left = 0; //添加 stockMonitors.Add(rp.PolicyGuid, stockMonitor); //数据填充到panel_stockmonitor中 panel_stockmonitor.Controls.Add(stockMonitor); stockMonitor.StockMonitor_ResultArrival += stockMonitor_StockMonitor_ResultArrival; stockMonitor.Policy_Remove += stockMonitor_Policy_Remove; stockCount = stockMonitors.Count; if (!rp.IsReal) { Simulator(rp.SecInfo, rp.StartDate, rp.EndDate, rp.PolicyDataReceiver, rp.Inteval); } else { } } }
private void StartBackTest() { DateTime today = btParameter.StartDate.Date; MarketTimeRange marketRange = MarketTimeRange.getTimeRange(securityInfo.Market); int totalcount = this.policys.Count; DataMonitor da = new DataMonitor(); Parallel.For(0, totalcount, (j, LoopState) => { RunningPolicy policy = policys[j]; Guid g = policy.PolicyGuid; string backtesttitle = policy.getBackTestTitle(); PolicyStarted(new BackTestStartEventArgs(backtesttitle, g)); policy.PolicyResult_Arrival += policy_PolicyResult_Arrival; }); while (today <= btParameter.EndDate.Date) { string name = ConfigFileName.HistoryDataFileName + "\\Okex%" + securityInfo.Code + "%" + today.ToString("yyyyMMdd") + ".csv"; //string name = ConfigFileName.HistoryDataFileName + "\\XBTUSD-" + today.ToString("yyyyMMdd") + ".csv"; PolicyLoading(name); DataTable tickdatas = CSVFileHelper.OpenCSV(name); List <TickData> list_tickdata = new List <TickData>(); for (int i = 0; i < tickdatas.Rows.Count; i++) { DataRow dr = tickdatas.Rows[i]; DateTime tickTime = System.Convert.ToDateTime(dr["timestamp"].ToString().Replace("D", " ").Substring(0, 23)); //TickData tickdata = TickData.ConvertFromDataRow(dr); TickData tickdata = new TickData(); tickdata.Code = dr["symbol"].ToString(); tickdata.SecInfo = this.securityInfo; tickdata.Time = tickTime; tickdata.Preclose = 0; tickdata.Open = 0; tickdata.High = 0; tickdata.Low = 0; tickdata.Ask = System.Convert.ToDouble(dr["askPrice"]); tickdata.Bid = System.Convert.ToDouble(dr["bidPrice"]); tickdata.Last = (tickdata.Ask + tickdata.Bid) / 2; tickdata.Volume = 0; tickdata.Amt = 0; tickdata.IsReal = false; tickdata.Asks[0] = tickdata.Ask; tickdata.Bids[0] = tickdata.Bid; list_tickdata.Add(tickdata); } Parallel.For(0, totalcount, (j, LoopState) => { RunningPolicy policy = policys[j]; //policy.PolicyMessage_Arrival += policy_PolicyMessage_Arrival; //da.Simulator(tickdatas, policy.PolicyDataReceiver, policy.Inteval); da.BackSimulator(list_tickdata, policy.PolicyDataReceiver, 0); PolicyDataFinished(); }); list_tickdata.Clear(); today = today.AddDays(1); } Parallel.For(0, totalcount, (j, LoopState) => { Stopwatch sw = new Stopwatch(); RunningPolicy policy = policys[j]; Guid g = policy.PolicyGuid; PolicyFinished(g, sw.Elapsed); policy.PolicyResult_Arrival -= policy_PolicyResult_Arrival; sw.Stop(); }); RaiseFinished(new EventArgs()); }
void rp_LiveData_Arrival(object sender, LiveDataEventArgs args) { try { if (args.IsReal) { RunningPolicy rp = (RunningPolicy)sender; for (int i = 1; i < grid_realpolicy.Rows.Count; i++) { if (((RunningPolicy)grid_realpolicy.Rows[i].UserData).PolicyGuid == rp.PolicyGuid) { double lastprice; double lastbid = 0; double lastask = 0; try { lastprice = System.Convert.ToDouble(grid_realpolicy.Rows[i][3]); } catch { lastprice = 0; } try { lastbid = System.Convert.ToDouble(grid_realpolicy.Rows[i][5]); } catch { } try { lastask = System.Convert.ToDouble(grid_realpolicy.Rows[i][6]); } catch { } if (args.CurrentPrice != lastprice || args.Bid != lastbid || args.Ask != lastask) { CellStyle ncs; if (args.PreClose < args.CurrentPrice) { grid_realpolicy.SetCellStyle(i, 3, cs_change); ncs = cs_up; grid_realpolicy.SetCellStyle(i, 4, cs_up); } else if (args.PreClose > args.CurrentPrice) { grid_realpolicy.SetCellStyle(i, 3, cs_change); ncs = cs_down; grid_realpolicy.SetCellStyle(i, 4, cs_down); } else { grid_realpolicy.SetCellStyle(i, 3, cs_change); ncs = cs_even; grid_realpolicy.SetCellStyle(i, 4, cs_even); } if (args.Bid > args.PreClose) { grid_realpolicy.SetCellStyle(i, 5, cs_up); } else if (args.Bid < args.PreClose) { grid_realpolicy.SetCellStyle(i, 5, cs_down); } else { grid_realpolicy.SetCellStyle(i, 5, cs_even); } if (args.Ask > args.PreClose) { grid_realpolicy.SetCellStyle(i, 6, cs_up); } else if (args.Ask < args.PreClose) { grid_realpolicy.SetCellStyle(i, 6, cs_down); } else { grid_realpolicy.SetCellStyle(i, 6, cs_even); } //grid_realpolicy.SetCellStyle(i,3,new C1.Win.C1FlexGrid.CellStyle() grid_realpolicy.Rows[i][3] = Math.Round(args.CurrentPrice, 8, MidpointRounding.AwayFromZero); grid_realpolicy.Rows[i][5] = Math.Round(args.Bid, 8, MidpointRounding.AwayFromZero); grid_realpolicy.Rows[i][6] = Math.Round(args.Ask, 8, MidpointRounding.AwayFromZero); grid_realpolicy.Rows[i][4] = string.Format("{0}%", Math.Round((args.CurrentPrice - args.PreClose) / args.PreClose * 100, 2, MidpointRounding.AwayFromZero).ToString("0.00")); ParameterizedThreadStart pts = new ParameterizedThreadStart(reset_grid); Thread th = new Thread(pts); th.Start(new ResetObject(i, ncs)); } break; } } } } catch { } }