CTP 期货交易与MT4/5 (二)

本文介绍如何使用CTP交易接口实现交易操作,包括创建自定义交易回调类、发送订单及撤销订单的过程,并展示了订单响应与成交反馈的具体实现。

CTP 交易该如何 


如果只是一个CTP用户,这样可能实现的要简单一下

需要继承CThostFtdcTraderSpi来实现自己的CustomTradeSpi类,用于交易下单、报单等操作的回调

除了重写的基类函数,还自己封装一些主动调用的操作函数,比如登入登出、下单报单、查询报单等


其中登入功能需要

前置机地址

brokerid

用户名

密码

甚至有的期货公司需要进行客户端认证的功能


关键就是报单接口和回报接口


  1. void CustomTradeSpi::reqOrderInsert(  
  2.     TThostFtdcInstrumentIDType instrumentID,  
  3.     TThostFtdcPriceType price,  
  4.     TThostFtdcVolumeType volume,  
  5.     TThostFtdcDirectionType direction)  
  6. {  
  7.     CThostFtdcInputOrderField orderInsertReq;  
  8.     memset(&orderInsertReq, 0, sizeof(orderInsertReq));  
  9.     ///经纪公司代码  
  10.     strcpy(orderInsertReq.BrokerID, gBrokerID);  
  11.     ///投资者代码  
  12.     strcpy(orderInsertReq.InvestorID, gInvesterID);  
  13.     ///合约代码  
  14.     strcpy(orderInsertReq.InstrumentID, instrumentID);  
  15.     ///报单引用  
  16.     strcpy(orderInsertReq.OrderRef, order_ref);  
  17.     ///报单价格条件: 限价  
  18.     orderInsertReq.OrderPriceType = THOST_FTDC_OPT_LimitPrice;  
  19.     ///买卖方向:   
  20.     orderInsertReq.Direction = direction;  
  21.     ///组合开平标志: 开仓  
  22.     orderInsertReq.CombOffsetFlag[0] = THOST_FTDC_OF_Open;  
  23.     ///组合投机套保标志  
  24.     orderInsertReq.CombHedgeFlag[0] = THOST_FTDC_HF_Speculation;  
  25.     ///价格  
  26.     orderInsertReq.LimitPrice = price;  
  27.     ///数量:1  
  28.     orderInsertReq.VolumeTotalOriginal = volume;  
  29.     ///有效期类型: 当日有效  
  30.     orderInsertReq.TimeCondition = THOST_FTDC_TC_GFD;  
  31.     ///成交量类型: 任何数量  
  32.     orderInsertReq.VolumeCondition = THOST_FTDC_VC_AV;  
  33.     ///最小成交量: 1  
  34.     orderInsertReq.MinVolume = 1;  
  35.     ///触发条件: 立即  
  36.     orderInsertReq.ContingentCondition = THOST_FTDC_CC_Immediately;  
  37.     ///强平原因: 非强平  
  38.     orderInsertReq.ForceCloseReason = THOST_FTDC_FCC_NotForceClose;  
  39.     ///自动挂起标志: 否  
  40.     orderInsertReq.IsAutoSuspend = 0;  
  41.     ///用户强评标志: 否  
  42.     orderInsertReq.UserForceClose = 0;  
  43.   
  44.     static int requestID = 0; // 请求编号  
  45.     int rt = g_pTradeUserApi->ReqOrderInsert(&orderInsertReq, ++requestID);  
  46.     if (!rt)  
  47.         std::cout << ">>>>>>发送报单录入请求成功" << std::endl;  
  48.     else  
  49.         std::cerr << "--->>>发送报单录入请求失败" << std::endl;  
  50. }
  1. void CustomTradeSpi::reqOrderAction(CThostFtdcOrderField *pOrder)  
  2. {  
  3.     static bool orderActionSentFlag = false// 是否发送了报单  
  4.     if (orderActionSentFlag)  
  5.         return;  
  6.   
  7.     CThostFtdcInputOrderActionField orderActionReq;  
  8.     memset(&orderActionReq, 0, sizeof(orderActionReq));  
  9.     ///经纪公司代码  
  10.     strcpy(orderActionReq.BrokerID, pOrder->BrokerID);  
  11.     ///投资者代码  
  12.     strcpy(orderActionReq.InvestorID, pOrder->InvestorID);  
  13.     ///报单操作引用  
  14.     //  TThostFtdcOrderActionRefType    OrderActionRef;  
  15.     ///报单引用  
  16.     strcpy(orderActionReq.OrderRef, pOrder->OrderRef);  
  17.     ///请求编号  
  18.     //  TThostFtdcRequestIDType RequestID;  
  19.     ///前置编号  
  20.     orderActionReq.FrontID = trade_front_id;  
  21.     ///会话编号  
  22.     orderActionReq.SessionID = session_id;  
  23.     ///交易所代码  
  24.     //  TThostFtdcExchangeIDType    ExchangeID;  
  25.     ///报单编号  
  26.     //  TThostFtdcOrderSysIDType    OrderSysID;  
  27.     ///操作标志  
  28.     orderActionReq.ActionFlag = THOST_FTDC_AF_Delete;  
  29.     ///价格  
  30.     //  TThostFtdcPriceType LimitPrice;  
  31.     ///数量变化  
  32.     //  TThostFtdcVolumeType    VolumeChange;  
  33.     ///用户代码  
  34.     //  TThostFtdcUserIDType    UserID;  
  35.     ///合约代码  
  36.     strcpy(orderActionReq.InstrumentID, pOrder->InstrumentID);  
  37.     static int requestID = 0; // 请求编号  
  38.     int rt = g_pTradeUserApi->ReqOrderAction(&orderActionReq, ++requestID);  
  39.     if (!rt)  
  40.         std::cout << ">>>>>>发送报单操作请求成功" << std::endl;  
  41.     else  
  42.         std::cerr << "--->>>发送报单操作请求失败" << std::endl;  
  43.     orderActionSentFlag = true;  
  44. }  
  1. void CustomTradeSpi::OnRtnOrder(CThostFtdcOrderField *pOrder)  
  2. {  
  3.     char str[10];  
  4.     sprintf(str, "%d", pOrder->OrderSubmitStatus);  
  5.     int orderState = atoi(str) - 48;    //报单状态0=已经提交,3=已经接受  
  6.   
  7.     std::cout << "=====收到报单应答=====" << std::endl;  
  8.   
  9.     if (isMyOrder(pOrder))  
  10.     {  
  11.         if (isTradingOrder(pOrder))  
  12.         {  
  13.             std::cout << "--->>> 等待成交中!" << std::endl;  
  14.             //reqOrderAction(pOrder); // 这里可以撤单  
  15.             //reqUserLogout(); // 登出测试  
  16.         }  
  17.         else if (pOrder->OrderStatus == THOST_FTDC_OST_Canceled)  
  18.             std::cout << "--->>> 撤单成功!" << std::endl;  
  19.     }  
  20. }  
  21.   
  22. void CustomTradeSpi::OnRtnTrade(CThostFtdcTradeField *pTrade)  
  23. {  
  24.     std::cout << "=====报单成功成交=====" << std::endl;  
  25.     std::cout << "成交时间: " << pTrade->TradeTime << std::endl;  
  26.     std::cout << "合约代码: " << pTrade->InstrumentID << std::endl;  
  27.     std::cout << "成交价格: " << pTrade->Price << std::endl;  
  28.     std::cout << "成交量: " << pTrade->Volume << std::endl;  
  29.     std::cout << "开平仓方向: " << pTrade->Direction << std::endl;  


如果是多个session的情况
又该如何考虑?
值得我们深究一下

特别声明:标价仅为视频价格(为避免不必要的纠纷,请详细了解清楚后再拍!!!)特别声明:标价仅为视频价格(为避免不必要的纠纷,请详细了解清楚后再拍!!!)特别声明:标价仅为视频价格(为避免不必要的纠纷,请详细了解清楚后再拍!!!) 获取文档和源码请加作者vx:X_Trader_Lab适合人群X-Trader:从CTP-API 到期货日内策略,适合对期货期权日内交易感兴趣的同学。 学习目标本课程体系分成三个子课程(本子课程为课程体系的第一部分):本课程体系分成三个子课程(本子课程为课程体系的第一部分):本课程体系分成三个子课程(本子课程为课程体系的第一部分):1.CTP-API交易接口深度解析2.深度探索X-Trader交易框架3.期货日内策略的原理及框架(本子课程为课程体系的第一部分) 详细介绍X-Trader 是一个基于C++ 的,适应全市场全品种交易的跨平台的极简量化交易框架,X-Trader 支持用户使用C++ 构 建各种类型的量化交易策略程序, 并提供包含历史数据-实时数据-开发调试-模拟交易-实盘交易-运行监控-风险 管理的一站式解决方案。本课程旨在帮助同学们从0 到1,掌握期货日内交易策略框架的核心技术。 课程大纲1.1 CTP1.2 API1.3 开启程序化交易之旅1.4 CTP-API 的基本架构及初始化1.5 行情接口开发1.6 行情数据处理1.7 看穿式监管评测1.8 交易接口开发1.9 报单1.10 报单回报1.11 撤单1.12 成交回报1.13 回调规则1.14 查询持仓1.15 更新持仓1.16 查询保证金率和手续费率1.17 规避自成交1.18 报单流控、查询流控和会话数控制
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值