コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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;
                }
            }
        }
コード例 #3
0
        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("未知");
            }
        }
コード例 #4
0
        /// <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;
            }
        }