public OnRspOrderInsertArgs(ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast) { this.pInputOrder = pInputOrder; this.pRspInfo = pRspInfo; this.nRequestID = nRequestID; this.bIsLast = bIsLast; }
private void OnErrRtnOrderInsert_callback(object sender, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo) { if (null != OnErrRtnOrderInsert) { OnErrRtnOrderInsert(this, new OnErrRtnOrderInsertArgs(ref pInputOrder, ref pRspInfo)); } }
private void OnRspOrderInsert_callback(object sender, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast) { if (null != OnRspOrderInsert) { OnRspOrderInsert(this, new OnRspOrderInsertArgs(ref pInputOrder, ref pRspInfo, nRequestID, bIsLast)); } }
private void OnErrRtnOrderInsert_callback(IntPtr pTraderApi, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo) { if (null != OnErrRtnOrderInsert) { OnErrRtnOrderInsert(this, new OnErrRtnOrderInsertArgs(pTraderApi, ref pInputOrder, ref pRspInfo)); } }
private void OnErrRtnOrderInsert(IntPtr pTraderApi, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo) { SingleOrder order; string strKey = string.Format("{0}:{1}:{2}", _RspUserLogin.FrontID, _RspUserLogin.SessionID, pInputOrder.OrderRef); if (_OrderRef2Order.TryGetValue(strKey, out order)) { tdlog.Error("交易所回应:{0},{1},开平{2},价{3},原量{4},引用{5},{6}#{7}", pInputOrder.InstrumentID, pInputOrder.Direction, pInputOrder.CombOffsetFlag, pInputOrder.LimitPrice, pInputOrder.VolumeTotalOriginal, pInputOrder.OrderRef, pRspInfo.ErrorID, pRspInfo.ErrorMsg); order.Text = string.Format("{0}|{1}#{2}", order.Text.Substring(0, Math.Min(order.Text.Length, 64)), pRspInfo.ErrorID, pRspInfo.ErrorMsg); EmitRejected(order, order.Text); //没得办法,这样全撤了状态就唯一了 Dictionary <string, CThostFtdcOrderField> _Ref2Action; if (_Orders4Cancel.TryGetValue(order, out _Ref2Action)) { lock (_Ref2Action) { _Ref2Action.Remove(strKey); if (0 == _Ref2Action.Count()) { _Orders4Cancel.Remove(order); return; } Cancel(order); } } } }
/// <summary> /// InputOrderField转换为OrderField /// </summary> public static OrderField InputOrderField_To_OrderField(CThostFtdcInputOrderField iof, CThostFtdcRspInfoField pRspInfo) { CThostFtdcOrderField cfof = new CThostFtdcOrderField(); cfof.BrokerID = iof.BrokerID; cfof.InvestorID = iof.InvestorID; cfof.InstrumentID = iof.InstrumentID; cfof.OrderRef = iof.OrderRef; cfof.UserID = iof.UserID; cfof.CombHedgeFlag = iof.CombHedgeFlag; cfof.CombHedgeFlag = iof.CombHedgeFlag; cfof.ContingentCondition = iof.ContingentCondition; cfof.Direction = iof.Direction; cfof.ExchangeID = iof.ExchangeID; cfof.ForceCloseReason = iof.ForceCloseReason; cfof.GTDDate = iof.GTDDate; cfof.LimitPrice = iof.LimitPrice; cfof.StopPrice = iof.StopPrice; cfof.OrderPriceType = iof.OrderPriceType; cfof.TimeCondition = iof.TimeCondition; cfof.VolumeTotalOriginal = iof.VolumeTotalOriginal; cfof.MinVolume = iof.MinVolume; cfof.VolumeCondition = iof.VolumeCondition; cfof.StatusMsg = string.Format("{0}: {1}", pRspInfo.ErrorID, pRspInfo.ErrorMsg); return(new OrderField(cfof)); }
public void OnRspOrderInsert(CThostFtdcInputOrderField pInputOrder, CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast) { if (pRspInfo.ErrorID != 0) { Console.WriteLine("OnRspOrderInsert Error: {0}", pRspInfo.ErrorMsg); } else { Console.WriteLine("OnRspOrderInsert"); } }
private void OnErrRtnOrderInsert(IntPtr pTraderApi, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo) { tdlog.Error("交易所回应:{0},{1},开平{2},价{3},原量{4},引用{5},{6}#{7}", pInputOrder.InstrumentID, pInputOrder.Direction, pInputOrder.CombOffsetFlag, pInputOrder.LimitPrice, pInputOrder.VolumeTotalOriginal, pInputOrder.OrderRef, pRspInfo.ErrorID, pRspInfo.ErrorMsg); GenericOrderItem item; string strKey = string.Format("{0}:{1}:{2}", _RspUserLogin.FrontID, _RspUserLogin.SessionID, pInputOrder.OrderRef); if (orderMap.TryGetValue(strKey, out item)) { EmitRejected(item, pRspInfo.ErrorID, pRspInfo.ErrorMsg); OnLastStatus(item, "", strKey); } }
/// <summary> /// 处理错单: 交易所返回 /// </summary> /// <param name="pInputOrder"></param> /// <param name="pRspInfo"></param> private void CTPOnErrRtnOrderInsert(ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo) { string id = string.Format("{0}|{1}|{2}", _session, _front, pInputOrder.OrderRef); OrderField of = new OrderField(); if (IsLogin)// && DicOrderField.TryGetValue(id, out of))// && of.Status != OrderStatus.Canceled && of.IsLocal) { var pOrder = pInputOrder; int tmp; of = new OrderField { Custom = int.TryParse(pOrder.OrderRef, out tmp) ? tmp % 1000000 : 0, InstrumentID = pOrder.InstrumentID, InsertTime = DateTime.Now.ToString("HH:mm:ss"), //为null会导致界面显示错误 //SysID = string.Empty, //为null会导致界面显示错误 TradeTime = string.Empty, IsLocal = true, LimitPrice = pOrder.LimitPrice, OrderID = id, Volume = pOrder.VolumeTotalOriginal, VolumeLeft = pOrder.VolumeTotalOriginal, // pOrder->VolumeTotal; //f->VolumeLeft = pOrder->VolumeTotal; //由ontrade处理 //Status = OrderStatus.Normal, //Status = OrderStatus.Canceled, Status = OrderStatus.Error, StatusMsg = pRspInfo.ErrorID + "|" + pRspInfo.ErrorMsg, Direction = pOrder.Direction == TThostFtdcDirectionType.THOST_FTDC_D_Buy ? DirectionType.Buy : DirectionType.Sell, Hedge = (TThostFtdcHedgeFlagType)pOrder.CombHedgeFlag[0] == TThostFtdcHedgeFlagType.THOST_FTDC_HF_Speculation ? HedgeType.Speculation : (TThostFtdcHedgeFlagType)pOrder.CombHedgeFlag[0] == TThostFtdcHedgeFlagType.THOST_FTDC_HF_Arbitrage ? HedgeType.Arbitrage : HedgeType.Hedge, Offset = (TThostFtdcOffsetFlagType)pOrder.CombOffsetFlag[0] == TThostFtdcOffsetFlagType.THOST_FTDC_OF_Open ? OffsetType.Open : (TThostFtdcOffsetFlagType)pOrder.CombOffsetFlag[0] == TThostFtdcOffsetFlagType.THOST_FTDC_OF_CloseToday ? OffsetType.CloseToday : OffsetType.Close, }; of.Status = OrderStatus.Error; of.StatusMsg = string.Format("[RtnErrorID:{0}]{1}", pRspInfo.ErrorID, pRspInfo.ErrorMsg); _OnRtnErrOrder?.Invoke(this, new ErrOrderArgs { ErrorID = pRspInfo.ErrorID, ErrorMsg = pRspInfo.ErrorMsg, Value = of }); } }
void trader_ErrorReturnOrderInsertResponse(object sender, CTPEventArgs <CThostFtdcInputOrderField> e) { PrintObject(e.Value); this.Invoke(new Action(() => { UpdateBindTable(this.idOrderDataGridView, e.Value, new Func <DataRow, object, bool>( (DataRow row, object obj) => { CThostFtdcInputOrderField order = (CThostFtdcInputOrderField)obj; if (order.OrderRef == (string)row["OrderRef"]) { return(true); } else { return(false); } })); })); }
public void TestOrderInsert() { _api.OnRtnOrder += new TradeApi.RtnOrder((ref CThostFtdcOrderField pOrder) => { Console.WriteLine("下单成功, BrokerID: {0}, OrderSysID: {1}", pOrder.BrokerID, pOrder.OrderSysID); }); _api.OnRspOrderInsert += new TradeApi.RspOrderInsert((ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, byte bIsLast) => { if (pRspInfo.ErrorID != 0) { Console.WriteLine(pRspInfo.ErrorMsg); Assert.IsTrue(pRspInfo.ErrorID == 0); } }); CThostFtdcInputOrderField order = new CThostFtdcInputOrderField(); order.BrokerID = _brokerID; order.InvestorID = _investorID; order.InstrumentID = "TF1809"; order.OrderRef = "1"; order.UserID = _investorID; order.OrderPriceType = TThostFtdcOrderPriceTypeType.LimitPrice; order.Direction = TThostFtdcDirectionType.Sell; order.CombOffsetFlag = TThostFtdcOffsetFlagType.Open; order.CombHedgeFlag = TThostFtdcHedgeFlagType.Speculation; order.LimitPrice = 97.550; order.VolumeTotalOriginal = 1; order.TimeCondition = TThostFtdcTimeConditionType.GFD; order.VolumeCondition = TThostFtdcVolumeConditionType.AV; order.MinVolume = 1; order.ContingentCondition = TThostFtdcContingentConditionType.Immediately; order.ForceCloseReason = TThostFtdcForceCloseReasonType.NotForceClose; order.IsAutoSuspend = (int)TThostFtdcBoolType.No; order.BusinessUnit = null; order.UserForceClose = (int)TThostFtdcBoolType.No; _api.OrderInsert(1, order); Thread.Sleep(500); }
private void OnRspOrderInsert(IntPtr pTraderApi, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast) { SingleOrder order; string strKey = string.Format("{0}:{1}:{2}", _RspUserLogin.FrontID, _RspUserLogin.SessionID, pInputOrder.OrderRef); if (_OrderRef2Order.TryGetValue(strKey, out order)) { if (OutputLog) { Console.WriteLine("CTP回应:{0},{1},开平{2},价{3},原量{4},引用{5},{6}", pInputOrder.InstrumentID, pInputOrder.Direction, pInputOrder.CombOffsetFlag, pInputOrder.LimitPrice, pInputOrder.VolumeTotalOriginal, pInputOrder.OrderRef, pRspInfo.ErrorMsg); } order.Text = string.Format("{0} {1}", order.Text, pRspInfo.ErrorMsg); EmitRejected(order, order.Text); //这些地方没法处理混合报单 //没得办法,这样全撤了状态就唯一了 //但由于不知道在错单时是否会有报单回报,所以在这查一次,以防重复撤单出错 //找到对应的报单回应 Dictionary <string, CThostFtdcOrderField> _Ref2Action; if (_Orders4Cancel.TryGetValue(order, out _Ref2Action)) { lock (_Ref2Action) { _Ref2Action.Remove(strKey); if (0 == _Ref2Action.Count()) { _Orders4Cancel.Remove(order); return; } Cancel(order); } } } }
private void OnErrRtnOrderInsert_3(ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo) { OnErrRtnOrderInsert_1(this, ref pInputOrder, ref pRspInfo); }
private void OnRspOrderInsert_3(ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast) { OnRspOrderInsert_1(this, ref pInputOrder, ref pRspInfo, nRequestID, bIsLast); }
///报单录入错误回报 public void OnErrRtnOrderInsert(CThostFtdcInputOrderField pInputOrder, CThostFtdcRspInfoField pRspInfo) { Console.WriteLine("OnErrRtnOrderInsert"); }
private void OnErrRtnOrderInsert_3(IntPtr pTraderApi, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo) { OnErrRtnOrderInsert_1(this, pTraderApi, ref pInputOrder, ref pRspInfo); }
private void OnRspOrderInsert_3(IntPtr pTraderApi, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast) { OnRspOrderInsert_1(this, pTraderApi, ref pInputOrder, ref pRspInfo, nRequestID, bIsLast); }
private void OnErrRtnOrderInsert_3(IntPtr pTraderApi, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo) { OnErrRtnOrderInsert_1(this, pTraderApi, ref pInputOrder, ref pRspInfo); }
public override void OnRspOrderInsert(CThostFtdcInputOrderField pInputOrder, CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast) { _callbackApi.OnRspOrderInsert(pInputOrder, pRspInfo, nRequestID, bIsLast); }
private void OnRspOrderInsert_callback(IntPtr pTraderApi, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast) { if (null != OnRspOrderInsert) { OnRspOrderInsert(this, new OnRspOrderInsertArgs(pTraderApi, ref pInputOrder, ref pRspInfo, nRequestID, bIsLast)); } }
/// <summary> /// 下普通单错误时回报 /// </summary> private void CTradeApi_OnRspOrderInsert(ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast) { OrderField of = ConvertFunctions.InputOrderField_To_OrderField(pInputOrder, pRspInfo); this._OnErrorOrder?.Invoke(of); }
/// <summary> /// 处理错单: CTP平台返回 /// </summary> /// <param name="pInputOrder"></param> /// <param name="pRspInfo"></param> /// <param name="nRequestID"></param> /// <param name="bIsLast"></param> private void CTPOnRspOrderInsert(ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast) { //ref重复::重发 //if (pRspInfo.ErrorID == 22) //{ // if (!IsLogin) return; // CThostFtdcInputOrderField f = pInputOrder; // //Thread.Sleep(50); // f.OrderRef = string.Format("{0:000000}{1}", ++_req, f.OrderRef.Length >= 6 ? f.OrderRef.Substring(f.OrderRef.Length - 6) : (new string('0', 6 - f.OrderRef.Length) + f.OrderRef)); // _t.ReqOrderInsert() // this._import.ReqCommand(EnumReq.ReqOrderInsert, f); //} //else { string id = string.Format("{0}|{1}|{2}", _session, _front, pInputOrder.OrderRef); int tmp; if (DicOrderField.TryAdd(id, new OrderField { Custom = int.TryParse(pInputOrder.OrderRef, out tmp) ? tmp % 1000000 : 0, // pOrder.OrderRef.Length <= 6 ? string.Empty : pOrder.OrderRef.Substring(pOrder.OrderRef.Length - 6), //InsertTime = DicOrderField.Max(n => n.Value.InsertTime) ?? DateTime.Now.ToString("HH:mm:ss"), InstrumentID = pInputOrder.InstrumentID, InsertTime = DateTime.Now.ToString("HH:mm:ss"), //为null会导致界面显示错误 //SysID = string.Empty, //为null会导致界面显示错误 TradeTime = string.Empty, IsLocal = true, LimitPrice = pInputOrder.LimitPrice, OrderID = id, Volume = pInputOrder.VolumeTotalOriginal, VolumeLeft = pInputOrder.VolumeTotalOriginal, // pOrder->VolumeTotal; //f->VolumeLeft = pOrder->VolumeTotal; //由ontrade处理 //Status = OrderStatus.Normal, //Status = OrderStatus.Canceled, Status = OrderStatus.Error, StatusMsg = pRspInfo.ErrorID + "|" + pRspInfo.ErrorMsg, Direction = pInputOrder.Direction == TThostFtdcDirectionType.THOST_FTDC_D_Buy ? DirectionType.Buy : DirectionType.Sell, Hedge = (TThostFtdcHedgeFlagType)pInputOrder.CombHedgeFlag[0] == TThostFtdcHedgeFlagType.THOST_FTDC_HF_Speculation ? HedgeType.Speculation : (TThostFtdcHedgeFlagType)pInputOrder.CombHedgeFlag[0] == TThostFtdcHedgeFlagType.THOST_FTDC_HF_Arbitrage ? HedgeType.Arbitrage : HedgeType.Hedge, Offset = (TThostFtdcOffsetFlagType)pInputOrder.CombOffsetFlag[0] == TThostFtdcOffsetFlagType.THOST_FTDC_OF_Open ? OffsetType.Open : (TThostFtdcOffsetFlagType)pInputOrder.CombOffsetFlag[0] == TThostFtdcOffsetFlagType.THOST_FTDC_OF_CloseToday ? OffsetType.CloseToday : OffsetType.Close, })) { string it = DicOrderField.Max(n => n.Value.InsertTime); if (string.IsNullOrEmpty(it)) { it = DateTime.Now.ToString("HH:mm:ss"); } else { it = TimeSpan.Parse(it).Add(TimeSpan.FromMilliseconds(1)).ToString(@"hh\:mm\:ss"); //加1秒 } DicOrderField[id].InsertTime = it; if (IsLogin) { _OnRtnErrOrder?.Invoke(this, new ErrOrderArgs { ErrorID = pRspInfo.ErrorID, ErrorMsg = pRspInfo.ErrorMsg, Value = DicOrderField[id] }); } } } }
static void Main(string[] args) { Console.WriteLine("Start testing CTP Trade API"); const string ctpServerAddress = "tcp://ctpfz1-front1.citicsf.com:51205"; var api = CThostFtdcTraderApi.CreateFtdcTraderApi(); var spi = new CTPTradeCallbackImpl(); api.RegisterSpi(spi); api.SubscribePrivateTopic(THOST_TE_RESUME_TYPE.THOST_TERT_QUICK); api.SubscribePublicTopic(THOST_TE_RESUME_TYPE.THOST_TERT_QUICK); api.RegisterFront(ctpServerAddress); api.Init(); while (!spi.IsConnected) { Thread.Sleep(100); Console.WriteLine("is not connected..."); } var userLogin = new CThostFtdcReqUserLoginField(); userLogin.BrokerID = "66666"; userLogin.UserID = "11782"; userLogin.Password = "******"; int requestId = 0; api.ReqUserLogin(userLogin, requestId++); while (!spi.IsReady) { Thread.Sleep(100); Console.WriteLine("is not ready..."); } Thread.Sleep(1100); var settlementConfirm = new CThostFtdcSettlementInfoConfirmField() { BrokerID = userLogin.BrokerID, InvestorID = userLogin.UserID }; api.ReqSettlementInfoConfirm(settlementConfirm, requestId++); Thread.Sleep(3000); var order = new CThostFtdcInputOrderField(); order.BrokerID = userLogin.BrokerID; order.InvestorID = userLogin.UserID; order.InstrumentID = "IF1803"; order.OrderRef = spi.GetNextOrderRef(); order.UserID = userLogin.UserID; order.Direction = '0'; order.CombOffsetFlag = "0"; order.CombHedgeFlag = "1"; order.LimitPrice = 4000.0; order.VolumeTotalOriginal = 1; order.VolumeCondition = '1'; order.MinVolume = 1; order.ForceCloseReason = '0'; order.IsAutoSuspend = 0; order.UserForceClose = 0; order.GTDDate = ""; order.ContingentCondition = '1'; order.OrderPriceType = '2'; order.TimeCondition = '3'; order.StopPrice = 0; order.RequestID = requestId++; api.ReqOrderInsert(order, order.RequestID); while (true) { Thread.Sleep(100); } }
public OnErrRtnOrderInsertArgs(IntPtr pTraderApi, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo) { this.pTraderApi = pTraderApi; this.pInputOrder = pInputOrder; this.pRspInfo = pRspInfo; }
public override void OnErrRtnOrderInsert(CThostFtdcInputOrderField pInputOrder, CThostFtdcRspInfoField pRspInfo) { _callbackApi.OnErrRtnOrderInsert(pInputOrder, pRspInfo); }
public virtual int ReqOrderInsert(CThostFtdcInputOrderField pInputOrder, int nRequestID) { int ret = thosttradeapiPINVOKE.CThostFtdcTraderApi_ReqOrderInsert(swigCPtr, CThostFtdcInputOrderField.getCPtr(pInputOrder), nRequestID); return(ret); }
public int ReqOrderInsert(CThostFtdcInputOrderField pInputOrder, int nRequestID) { return(_traderApi.ReqOrderInsert(pInputOrder, nRequestID)); }
public OnRspOrderInsertArgs(IntPtr pTraderApi, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast) { this.pTraderApi = pTraderApi; this.pInputOrder = pInputOrder; this.pRspInfo = pRspInfo; this.nRequestID = nRequestID; this.bIsLast = bIsLast; }
public OnErrRtnOrderInsertArgs(IntPtr pTraderApi, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo) { this.pTraderApi = pTraderApi; this.pInputOrder = pInputOrder; this.pRspInfo = pRspInfo; }
public OnErrRtnOrderInsertArgs(ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo) { this.pInputOrder = pInputOrder; this.pRspInfo = pRspInfo; }
public void TestOrderAction() { _api.OnRspOrderAction += new TradeApi.RspOrderAction((ref CThostFtdcInputOrderActionField pInputOrderAction, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, byte bIsLast) => { if (pRspInfo.ErrorID != 0) { Console.WriteLine(pRspInfo.ErrorMsg); Assert.IsTrue(pRspInfo.ErrorID == 0); } }); _api.OnRtnOrder += new TradeApi.RtnOrder((ref CThostFtdcOrderField pOrder) => { if (pOrder.OrderStatus == TThostFtdcOrderStatusType.Canceled) { Console.WriteLine("撤单成功, BrokerID: {0}, OrderSysID: {1}", pOrder.BrokerID, pOrder.OrderSysID); } else { Console.WriteLine("下单成功, BrokerID: {0}, OrderSysID: {1}", pOrder.BrokerID, pOrder.OrderSysID); CThostFtdcInputOrderActionField field = new CThostFtdcInputOrderActionField(); field.ActionFlag = TThostFtdcActionFlagType.Delete; field.BrokerID = _brokerID; field.InvestorID = _investorID; field.InstrumentID = "TF1809"; if (pOrder.FrontID != 0) { field.FrontID = pOrder.FrontID; } if (pOrder.SessionID != 0) { field.SessionID = pOrder.SessionID; } if (pOrder.OrderRef != "") { field.OrderRef = pOrder.OrderRef; } field.ExchangeID = pOrder.ExchangeID; if (pOrder.OrderSysID != null) { field.OrderSysID = new string('\0', 21 - pOrder.OrderSysID.Length) + pOrder.OrderSysID; } _api.OrderAction(1, field); Thread.Sleep(50); } Thread.Sleep(50); }); _api.OnRspOrderInsert += new TradeApi.RspOrderInsert((ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, byte bIsLast) => { if (pRspInfo.ErrorID != 0) { Console.WriteLine(pRspInfo.ErrorMsg); Assert.IsTrue(pRspInfo.ErrorID == 0); } }); CThostFtdcInputOrderField order = new CThostFtdcInputOrderField(); order.BrokerID = _brokerID; order.InvestorID = _investorID; order.InstrumentID = "TF1809"; order.OrderRef = "1"; order.UserID = _investorID; order.OrderPriceType = TThostFtdcOrderPriceTypeType.LimitPrice; order.Direction = TThostFtdcDirectionType.Buy; order.CombOffsetFlag = TThostFtdcOffsetFlagType.Open; order.CombHedgeFlag = TThostFtdcHedgeFlagType.Speculation; order.LimitPrice = 97.150; order.VolumeTotalOriginal = 1; order.TimeCondition = TThostFtdcTimeConditionType.GFD; order.VolumeCondition = TThostFtdcVolumeConditionType.AV; order.MinVolume = 1; order.ContingentCondition = TThostFtdcContingentConditionType.Immediately; order.ForceCloseReason = TThostFtdcForceCloseReasonType.NotForceClose; order.IsAutoSuspend = (int)TThostFtdcBoolType.No; order.BusinessUnit = null; order.UserForceClose = (int)TThostFtdcBoolType.No; _api.OrderInsert(1, order); Thread.Sleep(500); }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(CThostFtdcInputOrderField obj) { return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr); }
private void OnErrRtnOrderInsert_callback(IntPtr pTraderApi, ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo) { if (null != OnErrRtnOrderInsert) { OnErrRtnOrderInsert(this, new OnErrRtnOrderInsertArgs(pTraderApi, ref pInputOrder, ref pRspInfo)); } }
/// <summary> /// 错单回报 /// </summary> private void CTradeApi_OnErrRtnOrderInsert(ref CThostFtdcInputOrderField pInputOrder, ref CThostFtdcRspInfoField pRspInfo) { OrderField of = ConvertFunctions.InputOrderField_To_OrderField(pInputOrder, pRspInfo); this._OnErrorOrder?.Invoke(of); }