Пример #1
0
        private void _OnRtnInstrumentStatus(IntPtr ptr1, int size1)
        {
            // 求快,不加
            if (OnRtnInstrumentStatus_ == null)
            {
                return;
            }

            InstrumentStatusField obj = (InstrumentStatusField)Marshal.PtrToStructure(ptr1, typeof(InstrumentStatusField));

            OnRtnInstrumentStatus_(this, ref obj);
        }
Пример #2
0
 internal void OnMessage(InstrumentStatusField field)
 {
     if (field.Status != TradingStatus)
     {
         TradingStatus = field.Status;
         if (TradingStatus == InstrumentStatusType.Closed)
         {
             CancelUndoneOrder();
         }
         EventHappened?.Invoke(this, (XProviderEventType)field.Status);
     }
 }
Пример #3
0
        private void OnRtnInstrumentStatus_callback(object sender, ref InstrumentStatusField instrumentStatus)
        {
            if (OnRtnInstrumentStatus != null)
            {
                OnRtnInstrumentStatus(sender, ref instrumentStatus);
            }

            // 记录下来,后期可能要用到
            _dictInstrumentsStatus[instrumentStatus.Symbol] = instrumentStatus;

            // 合约状态信息太多了,也不关心,这里屏蔽显示
            if (IsLogOnRtnInstrumentStatus)
            {
                (sender as XApi).GetLog().Info("OnRtnInstrumentStatus:" + instrumentStatus.ToFormattedString());
            }
        }
Пример #4
0
        public void ProcessExpired(ref InstrumentStatusField instrumentStatus, NLog.Logger log)
        {
            // 根据当前挂单来统计
            //if (workingOrders.Count == 0)
            //    return;

            if (instrumentStatus.InstrumentStatus != TradingPhaseType.Closed)
            {
                return;
            }

            foreach (var order in framework.OrderManager.Orders)
            {
                // 量有点多,需要判断一下
                if (order.IsDone)
                {
                    continue;
                }

                var inst = order.Instrument;

                string altSymbol;
                string altExchange;
                string apiSymbol;
                string apiExchange;
                double apiTickSize;
                string apiProductID;

                this.provider.GetApi_Symbol_Exchange_TickSize(inst, this.provider.Id,
                                                              out altSymbol, out altExchange,
                                                              out apiSymbol, out apiExchange,
                                                              out apiTickSize,
                                                              out apiProductID);

                if (apiProductID != instrumentStatus.InstrumentID)
                {
                    continue;
                }

                ExecutionReport report = CreateReport(order, SQ.ExecType.ExecExpired, SQ.OrderStatus.Expired);
                report.LeavesQty = 0;
                report.Text      = "收盘,插件标记定单过期";
                provider.EmitExecutionReport(report);
            }
        }
Пример #5
0
        private void OnRtnOrder_Expired(ref InstrumentStatusField instrumentStatus)
        {
            if (_TdApi == null)
            {
                return;
            }

            lock (this)
            {
                var log = _TdApi.GetLog();

                try
                {
                    orderMap.ProcessExpired(ref instrumentStatus, log);
                }
                catch (Exception ex)
                {
                    log.Error(ex);
                }
            }
        }
Пример #6
0
 private void OnInstrumentStatusChanged(object sender, InstrumentStatusField status)
 {
     Provider.OnMessage(status);
 }