/// <summary> /// 定时计算损益。 /// </summary> /// <param name="state"></param> private void CalculateProfitCallback(object state) { try { ArbitrageOrderState orderState = m_arbitrageOrder.State; ProfitResult result = null; if (orderState <= ArbitrageOrderState.Opened) { result = CalculatOpenProfit(m_arbitrageOrder); } else { result = CalculatCloseProfit(m_arbitrageOrder); } if (this.InvokeRequired) { this.BeginInvoke(new Action <ProfitResult>(ShowProfit), result); return; } } catch (Exception ex) { Debug.Assert(false, ex.Message); } m_porfitCalcTimer.Change(500, Timeout.Infinite); }
private BackgroundWorker m_worker = null; //工作线程 #endregion #region 开平仓 /// <summary> /// 开仓/平仓监控下单。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void WorkerDoWorkForOpenAndClose(object sender, DoWorkEventArgs e) { string text = string.Format("启动跟单流程,当前状态为{0}", this.ArbitrageOrderState.ToDescription()); AutoTraderNotice notice = CreateTraderNotice(text); SafeFireAutoTraderNotice(notice); WriteTraderNoticeLog(notice); SafeFireAutoTraderStateChanged(AutoTraderWorkType.OpenOrClose, AutoTraderState.Enable); lock (m_syncObj) { m_arbitrageOrder.ResetTryOrderErrorCount(); } while (true) { ArbitrageOrderState arbitrageOrderState = ArbitrageOrderState.None; lock (m_syncObj) { if (m_backgroundRunFlag == false) { break; // 退出跟单 } arbitrageOrderState = m_arbitrageOrder.State; } switch (arbitrageOrderState) { case ArbitrageOrderState.Opening: //建仓中 ProcessArbitrageOrderOpenTask(); break; case ArbitrageOrderState.Closeing: ProcessArbitrageOrderCloseTask(); //平仓中 break; case ArbitrageOrderState.None: //无下一步指示,等待 m_operatorEvent.WaitOne(EVENT_WAIT_Time); break; case ArbitrageOrderState.Opened: BeginClose(); return; case ArbitrageOrderState.Closed: //已结束,流程退出 return; default: Debug.Assert(false, "未知类型的套利单状态"); return; } } }
public static string ToDescription(this ArbitrageOrderState state) { switch (state) { case ArbitrageOrderState.Opening: return("开仓中"); case ArbitrageOrderState.Opened: return("开仓完成"); case ArbitrageOrderState.Closeing: return("平仓中"); case ArbitrageOrderState.Closed: return("平仓完成"); case ArbitrageOrderState.Finish: return("结束"); default: return("未知"); } }
/// <summary> /// 更新检查套利单状态。 /// </summary> public void UpdataArbitrageOrderState() { switch (m_state) { case ArbitrageOrderState.Opening: //检查建仓是否完成,如果完成设置为建仓完成 if (m_openTaskGroup.FinishTaskCount == m_openTaskGroup.TaskCount) { m_state = ArbitrageOrderState.Opened; } break; case ArbitrageOrderState.Closeing: //检查平仓是否完成,如果完成设置为平仓完成 if (m_closeTaskGroup.FinishTaskCount == m_closeTaskGroup.TaskCount) { m_state = ArbitrageOrderState.Closed; } break; } }