CTPAPI策略交易框架
CTPAPI的专业性很强,由于CTP柜台采用内存数据库计算架构,在通讯机制上支持重演等特性,流式传输机制可能很多人就不容易理解,不同情况下,订单响应、回报推送等流程也不一样,手续费、保证金费率查询及资金与持仓计算均有不小的难度,并且还有很多坑要去踩,不仅新手,就是老手想写一套完整的策略交易程序也不是一件容易的事。开仓要冻结、失败要释放冻结,撤单要释放冻结,开仓成交要释放冻结保证金重新计算占用保证金,平仓成交要释放占用保证金并计算平仓盈亏等等,难度很高,很费精力。
市场上不缺策略交易框架,有很多也是开源的,但是基本上都是功能比较全的大框架,特别是支持回测、分析等专业的功能,但是凡事都有两面性,强大的工具也需要很强的驾驭能力,需要花很多时间去学习,如果你仅仅是需要实现一些简单的策略,并且并不需要回测等功能,那可能那些框架并不适合你。但是基于最低层的CTPAPI去写策略又太难了,于是就有了我们这套Tick级CTPAPI策略交易框架,它非常轻量,只做了一层最基础的封装,将CTPAPI接口复杂的订单处理、持仓与资金计算等逻辑封装掉,提供出一个非常简洁的策略层API,同时也保留了CTPAPI原生的数据结构,所以乍一看好像也没怎么封装,这就是简约而不简单的设计理念。
有了openctp的CTPAPI兼容接口技术,这套框架除了可以做期货、期权交易,还可以无缝对接到CTP股票期权柜台、中泰XTP、华鑫奇点等柜台进行股票、股票期权等品种交易,也可以对接到量投QDP、易达等极速柜台进行相关品种交易,所以具有很强的实用性。
策略交易框架价格:
- CTPAPI策略交易框架单账户Python版源码,10000元。
- CTPAPI策略交易框架单账户C++版源码,20000元。
- CTPAPI策略交易框架多账户Python版源码,20000元。
- CTPAPI策略交易框架多账户C++版源码,30000元。
策略程序demo:
#include "TickTradingFramework.h"
#include "SampleStrategy.h"
#include "ArbitrageStrategy.h"
#include "INIReader/INIReader.h"
#include
int main(int argc, char* argv[])
{
std::string TdHost, TdNameServer, MdHost, MdNameServer;
std::string BrokerID, UserProductInfo, AuthCode, AppID;
std::string UserID, Password;
INIReader reader("Application.ini");
// read config from file
if (reader.ParseError() < 0) {
std::cout << "open ini file failed." << std::endl;
return -1;
}
TdHost = reader.Get("Trade", "Host", "");
TdNameServer = reader.Get("Trade", "NameServer", "");
MdHost = reader.Get("Market", "Host", "");
MdNameServer = reader.Get("Market", "NameServer", "");
BrokerID = reader.Get("Trade", "BrokerID", "");
UserProductInfo = reader.Get("Trade", "UserProductInfo", "");
AppID = reader.Get("Trade", "AppID", "");
AuthCode = reader.Get("Trade", "AuthCode", "");
UserID = reader.Get("Trade", "UserID", "");
Password = reader.Get("Trade", "Password", "");
CTickTradingFramework Framework;
Framework.SetTdParameters(TdHost, TdNameServer, BrokerID, UserID, Password, UserProductInfo, AppID, AuthCode);
Framework.SetMdParameters(MdHost, MdNameServer, BrokerID, UserID, Password, UserProductInfo);
// 示例策略
CSampleStrategy SampleStrategy(&Framework, "au2403", "");
Framework.AddStrategy(&SampleStrategy);
// 示例套利策略
CArbitrageStrategy ArbitrageStrategy(&Framework, "au2403", "au2404", "");
Framework.AddStrategy(&ArbitrageStrategy);
// Running
Framework.Run();
return 0;
}
示例策略demo:
#include "SampleStrategy.h"
CSampleStrategy::CSampleStrategy(CTickTradingFramework* pFramework, std::string InstrumentID, std::string Parameters):
CStrategy("SampleStratety", "", pFramework),
m_InstrumentID(InstrumentID)
{
AddInstrument(InstrumentID);
}
CSampleStrategy::~CSampleStrategy()
{
}
void CSampleStrategy::OnRtnDepthMarketData(CThostFtdcDepthMarketDataField& DepthMarketData)
{
static size_t count=1;
if(count%10==0)
LongEntry(m_InstrumentID, DepthMarketData.AskPrice1, 1);
count++;
}
void CSampleStrategy::OnRspOrderInsert(CThostFtdcInputOrderField& InputOrder, CThostFtdcRspInfoField& RspInfo, int nRequestID, bool bIsLast)
{
CStrategy::OnRspOrderInsert(InputOrder,RspInfo,nRequestID,bIsLast);
}
void CSampleStrategy::OnRspOrderAction(CThostFtdcInputOrderActionField& InputOrderAction, CThostFtdcRspInfoField& RspInfo, int nRequestID, bool bIsLast)
{
CStrategy::OnRspOrderAction(InputOrderAction, RspInfo, nRequestID, bIsLast);
}
void CSampleStrategy::OnRtnOrder(CThostFtdcOrderField& Order)
{
CStrategy::OnRtnOrder(Order);
}
void CSampleStrategy::OnRtnTrade(CThostFtdcTradeField& Trade)
{
CStrategy::OnRtnTrade(Trade);
}