期货homes平台以及仿ctp接口

实盘账户或者模拟账户可以下挂多个子账户

子账户也可以是homes母账户,理论上可以一层一层套下去。

 所有交易细节全部保存,收盘定时结算。

功能很强大,并且还有很多拓展空间。

连接homes平台,需要用到仿ctp交易接口,声明和ctp一模一样,贴上核心代码:

#pragma once
#include <ascs/ext/tcp.h>
#include <ascs/tcp/client_socket.h>
#include <ascs/service_pump.h>
#include "ThostFtdcUserApiStruct.h"
#include <queue>
#include <fstream>
#include "../FutureHomes/UtilityFunctions.h"

using namespace ascs::tcp;
//消息最小长度:body=0
#define REQ_MSG_MIN_SIZE 20
#define RSP_MSG_MIN_SIZE 12
//消息头/尾
#define MSG_HEAD    (char)0xDA    
#define MSG_END        (char)0xDF

enum enumRspMsgType
{
    OnFrontConnected = 0x01,
    OnFrontDisconnected,
    OnHeartBeatWarning,
    OnRspAuthenticate,
    OnRspUserLogin,
    OnRspUserLogout,
    OnRspUserPasswordUpdate,
    OnRspTradingAccountPasswordUpdate,
    OnRspOrderInsert,
    OnRspParkedOrderInsert,
    OnRspParkedOrderAction,
    OnRspOrderAction,
    OnRspQueryMaxOrderVolume,
    OnRspSettlementInfoConfirm,
    OnRspRemoveParkedOrder,
    OnRspRemoveParkedOrderAction,
    OnRspQryOrder,
    OnRspQryTrade,
    OnRspQryInvestorPosition,
    OnRspQryTradingAccount,
    OnRspQryInvestor,
    OnRspQryTradingCode,
    OnRspQryInstrumentMarginRate,
    OnRspQryInstrumentCommissionRate,
    OnRspQryExchange,
    OnRspQryInstrument,
    OnRspQryDepthMarketData,
    OnRspQrySettlementInfo,
    OnRspQryTransferBank,
    OnRspQryInvestorPositionDetail,
    OnRspQryNotice,
    OnRspQrySettlementInfoConfirm,
    OnRspQryInvestorPositionCombineDetail,
    OnRspQryCFMMCTradingAccountKey,
    OnRspQryEWarrantOffset,
    OnRspQryInvestorProductGroupMargin,
    OnRspQryExchangeMarginRate,
    OnRspQryExchangeMarginRateAdjust,
    OnRspQryTransferSerial,
    OnRspQryAccountregister,
    OnRspError,
    OnRtnOrder,
    OnRtnTrade,
    OnErrRtnOrderInsert,
    OnErrRtnOrderAction,
    OnRtnInstrumentStatus,
    OnRtnTradingNotice,
    OnRtnErrorConditionalOrder,
    OnRspQryContractBank,
    OnRspQryParkedOrder,
    OnRspQryParkedOrderAction,
    OnRspQryTradingNotice,
    OnRspQryBrokerTradingParams,
    OnRspQryBrokerTradingAlgos,
    OnRtnFromBankToFutureByBank,
    OnRtnFromFutureToBankByBank,
    OnRtnRepealFromBankToFutureByBank,
    OnRtnRepealFromFutureToBankByBank,
    OnRtnFromBankToFutureByFuture,
    OnRtnFromFutureToBankByFuture,
    OnRtnRepealFromBankToFutureByFutureManual,
    OnRtnRepealFromFutureToBankByFutureManual,
    OnRtnQueryBankBalanceByFuture,
    OnErrRtnBankToFutureByFuture,
    OnErrRtnFutureToBankByFuture,
    OnErrRtnRepealBankToFutureByFutureManual,
    OnErrRtnRepealFutureToBankByFutureManual,
    OnErrRtnQueryBankBalanceByFuture,
    OnRtnRepealFromBankToFutureByFuture,
    OnRtnRepealFromFutureToBankByFuture,
    OnRspFromBankToFutureByFuture,
    OnRspFromFutureToBankByFuture,
    OnRspQueryBankAccountMoneyByFuture,
    OnRtnOpenAccountByBank,
    OnRtnCancelAccountByBank,
    OnRtnChangeAccountByBank,
    //v2
    OnRspExecOrderInsert,
    OnRspExecOrderAction,
    OnRspForQuoteInsert,
    OnRspQuoteInsert,
    OnRspQuoteAction,
    OnRspBatchOrderAction,
    OnRspOptionSelfCloseInsert,
    OnRspOptionSelfCloseAction,
    OnRspCombActionInsert,
    OnRspQryProduct,
    OnRspQryExchangeRate,
    OnRspQrySecAgentACIDMap,
    OnRspQryProductExchRate,
    OnRspQryProductGroup,
    OnRspQryMMInstrumentCommissionRate,
    OnRspQryMMOptionInstrCommRate,
    OnRspQryInstrumentOrderCommRate,
    OnRspQrySecAgentTradingAccount,
    OnRspQrySecAgentCheckMode,
    OnRspQryOptionInstrTradeCost,
    OnRspQryOptionInstrCommRate,
    OnRspQryExecOrder,
    OnRspQryForQuote,
    OnRspQryQuote,
    OnRspQryOptionSelfClose,
    OnRspQryInvestUnit,
    OnRspQryCombInstrumentGuard,
    OnRspQryCombAction,
    OnRtnBulletin,
    OnRtnExecOrder,
    OnErrRtnExecOrderInsert,
    OnErrRtnExecOrderAction,
    OnErrRtnForQuoteInsert,
    OnRtnQuote,
    OnErrRtnQuoteInsert,
    OnErrRtnQuoteAction,
    OnRtnForQuoteRsp,
    OnRtnCFMMCTradingAccountToken,
    OnErrRtnBatchOrderAction,
    OnRtnOptionSelfClose,
    OnErrRtnOptionSelfCloseInsert,
    OnErrRtnOptionSelfCloseAction,
    OnRtnCombAction,
    OnErrRtnCombActionInsert,
    OnRspQueryCFMMCTradingAccountToken,

    OnGetTradingDay = 0xC8
};

class CThostFtdcTraderSpi;

struct  CThostFtdcReqUserLoginFieldEx
{
    CThostFtdcReqUserLoginField field;
    THOST_TE_RESUME_TYPE publicTopic;        //公有流
    THOST_TE_RESUME_TYPE privateTopic;        //私有流
};

#define MSG_UNWRAPPER(func,t1,length)\
assert(length == sizeof(t1)+sizeof(CThostFtdcRspInfoField)+4);\
t1 cmp;memset(&cmp, 0, sizeof(t1));\
auto pMain = memcmp(pBody, &cmp, sizeof(t1))==0 ? nullptr : (t1*)pBody;\
m_pSpi->func((t1*)pMain, (CThostFtdcRspInfoField*)(pBody + sizeof(t1)), *(int*)(pBody + sizeof(t1) + sizeof(CThostFtdcRspInfoField)), *(bool*)(pBody + sizeof(t1) + sizeof(CThostFtdcRspInfoField) + 4));

#define MSG_UNWRAPPER_0(func,t1,length)\
assert(length == sizeof(t1));\
m_pSpi->func((t1*)pBody)

#define MSG_UNWRAPPER_1(func,t1,length)\
assert(length == sizeof(t1)+sizeof(CThostFtdcRspInfoField));\
m_pSpi->func((t1*)pBody, (CThostFtdcRspInfoField*)(pBody + sizeof(t1)))

class my_client_socket : public client_socket_base<ASCS_DEFAULT_PACKER, ASCS_DEFAULT_UNPACKER>
{
public:
    my_client_socket(asio::io_context& s) : client_socket_base(s), m_pSpi(nullptr){}
    void set_spi_layer(CThostFtdcTraderSpi* p) { m_pSpi = p; }

protected:
    virtual void on_connect() {
        ofs_order.open("./socket_rsp.txt", std::ios_base::app);
    }

#if ASCS_VER > 10300
    virtual bool on_msg_handle(out_msg_type& msg)
#else
    virtual bool on_msg(out_msg_type& msg) 
#endif
    { 
        m_strBuffer.append(msg.data(), msg.size());
        parse_msg();

        return true; 
    }

    void parse_msg() {
        char  chType; char* pBody; int nLength; bool bLast;
        //检测消息格式
        while (check_msg(chType, &pBody, nLength, bLast)) {
            distribute(chType, pBody, nLength-RSP_MSG_MIN_SIZE, bLast);
            m_strBuffer = m_strBuffer.substr(nLength);
        }
    }

    //检测消息
    bool check_msg(char& chType, char** ppBody, int& nLength, bool& bLast) {
        if (m_strBuffer[0] != MSG_HEAD) {
            int nPos = m_strBuffer.find(MSG_HEAD);
            if (nPos >= 0)
                m_strBuffer = m_strBuffer.substr(nPos);
            else
                return false;
        }
        //缓存大小 < MSG_MIN_SIZE,数据未接收全返回
        if (m_strBuffer.size() < RSP_MSG_MIN_SIZE) return false;
        chType = m_strBuffer[1];
        nLength = *(int*)(&m_strBuffer[2]);

        //消息长度 < MSG_MIN_SIZE,计算长度不对返回
        if (nLength < RSP_MSG_MIN_SIZE && nLength>0) return false;
        //消息长度==0,错误数据返回
        if (nLength == 0) {
            m_strBuffer = m_strBuffer.substr(2);
            return false;
        }
        //消息长度 < nLength,大消息未接收全返回
        if (m_strBuffer.size() < nLength) return false;
        //消息尾不对,返回
        if (m_strBuffer[nLength - 1] != MSG_END) {
            m_strBuffer = m_strBuffer.substr(nLength);
            return false;
        }

        *ppBody = &(m_strBuffer[6]);

        //nLength-1起向前推4+4+1个字符
        bLast = m_strBuffer[nLength - 6];
        unsigned int nIndex = *(unsigned int*)(&m_strBuffer[nLength - 5]);
        return true;
    }

    //派发消息
    void distribute(char  chType, char* pBody, int nLength, bool& bLast) {
        switch (chType)
        {
        case OnFrontConnected: {
            m_pSpi->OnFrontConnected();
            break; }
        case OnFrontDisconnected: {
            m_pSpi->OnFrontDisconnected(*(int*)pBody);
            break; }
        case OnHeartBeatWarning: {
            m_pSpi->OnHeartBeatWarning(*(int*)pBody);
            break; }
        case OnRspAuthenticate: {
            MSG_UNWRAPPER(OnRspAuthenticate, CThostFtdcRspAuthenticateField, nLength);
            break; }
        case OnRspUserLogin: {
            MSG_UNWRAPPER(OnRspUserLogin, CThostFtdcRspUserLoginField, nLength);
            break; }
        case OnRspUserLogout: {
            MSG_UNWRAPPER(OnRspUserLogout, CThostFtdcUserLogoutField, nLength);
            break; }
        case OnRspUserPasswordUpdate: {
            MSG_UNWRAPPER(OnRspUserPasswordUpdate, CThostFtdcUserPasswordUpdateField, nLength);
            break; }
        case OnRspTradingAccountPasswordUpdate: {
            MSG_UNWRAPPER(OnRspTradingAccountPasswordUpdate, CThostFtdcTradingAccountPasswordUpdateField, nLength);
            break; }
        case OnRspOrderInsert: {
            MSG_UNWRAPPER(OnRspOrderInsert, CThostFtdcInputOrderField, nLength);
            break; }
        case OnRspParkedOrderInsert: {
            MSG_UNWRAPPER(OnRspParkedOrderInsert, CThostFtdcParkedOrderField, nLength);
            break; }
        case OnRspParkedOrderAction: {
            MSG_UNWRAPPER(OnRspParkedOrderAction, CThostFtdcParkedOrderActionField, nLength);
            break; }
        case OnRspOrderAction: {
            MSG_UNWRAPPER(OnRspOrderAction, CThostFtdcInputOrderActionField, nLength);
            break; }
        case OnRspQueryMaxOrderVolume: {
            MSG_UNWRAPPER(OnRspQueryMaxOrderVolume, CThostFtdcQueryMaxOrderVolumeField, nLength);
            break; }
        case OnRspSettlementInfoConfirm: {
            MSG_UNWRAPPER(OnRspSettlementInfoConfirm, CThostFtdcSettlementInfoConfirmField, nLength);
            break; }
        case OnRspRemoveParkedOrder: {
            MSG_UNWRAPPER(OnRspRemoveParkedOrder, CThostFtdcRemoveParkedOrderField, nLength);
            break; }
        case OnRspRemoveParkedOrderAction: {
            MSG_UNWRAPPER(OnRspRemoveParkedOrderAction, CThostFtdcRemoveParkedOrderActionField, nLength);
            break; }
        case OnRspQryOrder: {
            MSG_UNWRAPPER(OnRspQryOrder, CThostFtdcOrderField, nLength);
            break; }
        case OnRspQryTrade: {
            MSG_UNWRAPPER(OnRspQryTrade, CThostFtdcTradeField, nLength);
            break; }
        case OnRspQryInvestorPosition: {
            MSG_UNWRAPPER(OnRspQryInvestorPosition, CThostFtdcInvestorPositionField, nLength);
            break; }
        case OnRspQryTradingAccount: {
            MSG_UNWRAPPER(OnRspQryTradingAccount, CThostFtdcTradingAccountField, nLength);
            break; }
        case OnRspQryInvestor: {
            MSG_UNWRAPPER(OnRspQryInvestor, CThostFtdcInvestorField, nLength);
            break; }
        case OnRspQryTradingCode: {
            MSG_UNWRAPPER(OnRspQryTradingCode, CThostFtdcTradingCodeField, nLength);
            break; }
        case OnRspQryInstrumentMarginRate: {
            MSG_UNWRAPPER(OnRspQryInstrumentMarginRate, CThostFtdcInstrumentMarginRateField, nLength);
            break; }
        case OnRspQryInstrumentCommissionRate: {
            MSG_UNWRAPPER(OnRspQryInstrumentCommissionRate, CThostFtdcInstrumentCommissionRateField, nLength);
            break; }
        case OnRspQryExchange: {
            MSG_UNWRAPPER(OnRspQryExchange, CThostFtdcExchangeField, nLength);
            break; }
        case OnRspQryInstrument: {
            MSG_UNWRAPPER(OnRspQryInstrument, CThostFtdcInstrumentField, nLength);
            break; }
        case OnRspQryDepthMarketData: {
            MSG_UNWRAPPER(OnRspQryDepthMarketData, CThostFtdcDepthMarketDataField, nLength);
            break; }
        case OnRspQrySettlementInfo: {
            MSG_UNWRAPPER(OnRspQrySettlementInfo, CThostFtdcSettlementInfoField, nLength);
            break; }
        case OnRspQryTransferBank: {
            MSG_UNWRAPPER(OnRspQryTransferBank, CThostFtdcTransferBankField, nLength);
            break; }
        case OnRspQryInvestorPositionDetail: {
            MSG_UNWRAPPER(OnRspQryInvestorPositionDetail, CThostFtdcInvestorPositionDetailField, nLength);
            break; }
        case OnRspQryNotice: {
            MSG_UNWRAPPER(OnRspQryNotice, CThostFtdcNoticeField, nLength);
            break; }
        case OnRspQrySettlementInfoConfirm: {
            MSG_UNWRAPPER(OnRspQrySettlementInfoConfirm, CThostFtdcSettlementInfoConfirmField, nLength);
            break; }
        case OnRspQryInvestorPositionCombineDetail: {
            MSG_UNWRAPPER(OnRspQryInvestorPositionCombineDetail, CThostFtdcInvestorPositionCombineDetailField, nLength);
            break; }
        case OnRspQryCFMMCTradingAccountKey: {
            MSG_UNWRAPPER(OnRspQryCFMMCTradingAccountKey, CThostFtdcCFMMCTradingAccountKeyField, nLength);
            break; }
        case OnRspQryEWarrantOffset: {
            MSG_UNWRAPPER(OnRspQryEWarrantOffset, CThostFtdcEWarrantOffsetField, nLength);
            break; }
        case OnRspQryInvestorProductGroupMargin: {
            MSG_UNWRAPPER(OnRspQryInvestorProductGroupMargin, CThostFtdcInvestorProductGroupMarginField, nLength);
            break; }
        case OnRspQryExchangeMarginRate: {
            MSG_UNWRAPPER(OnRspQryExchangeMarginRate, CThostFtdcExchangeMarginRateField, nLength);
            break; }
        case OnRspQryExchangeMarginRateAdjust: {
            MSG_UNWRAPPER(OnRspQryExchangeMarginRateAdjust, CThostFtdcExchangeMarginRateAdjustField, nLength);
            break; }
        case OnRspQryTransferSerial: {
            MSG_UNWRAPPER(OnRspQryTransferSerial, CThostFtdcTransferSerialField, nLength);
            break; }
        case OnRspQryAccountregister: {
            MSG_UNWRAPPER(OnRspQryAccountregister, CThostFtdcAccountregisterField, nLength);
            break; }
        case OnRspError: {
            assert(nLength == sizeof(CThostFtdcRspInfoField) + sizeof(CThostFtdcRspInfoField) + 5);
            m_pSpi->OnRspError((CThostFtdcRspInfoField*)pBody, *(int*)(pBody + sizeof(CThostFtdcRspInfoField)), *(bool*)(pBody + sizeof(CThostFtdcRspInfoField) + 4));
            break; }
        case OnRtnOrder: {
            MSG_UNWRAPPER_0(OnRtnOrder, CThostFtdcOrderField, nLength);
            ofs_order << "order" << ((CThostFtdcOrderField*)pBody)->OrderSysID << "," << ((CThostFtdcOrderField*)pBody)->InsertTime << std::endl;
            break; }
        case OnRtnTrade: {
            MSG_UNWRAPPER_0(OnRtnTrade, CThostFtdcTradeField, nLength);
            ofs_order << "trade" << ((CThostFtdcTradeField*)pBody)->OrderSysID << "," <<((CThostFtdcTradeField*)pBody)->TradeID << "," << ((CThostFtdcTradeField*)pBody)->TradeTime << std::endl;
            break; }
        case OnErrRtnOrderInsert: {
            MSG_UNWRAPPER_1(OnErrRtnOrderInsert, CThostFtdcInputOrderField, nLength);
            break; }
        case OnErrRtnOrderAction: {
            MSG_UNWRAPPER_1(OnErrRtnOrderAction, CThostFtdcOrderActionField, nLength);
            break; }
        case OnRtnInstrumentStatus: {
            MSG_UNWRAPPER_0(OnRtnInstrumentStatus, CThostFtdcInstrumentStatusField, nLength);
            break; }
        case OnRtnTradingNotice: {
            MSG_UNWRAPPER_0(OnRtnTradingNotice, CThostFtdcTradingNoticeInfoField, nLength);
            break; }
        case OnRtnErrorConditionalOrder: {
            MSG_UNWRAPPER_0(OnRtnErrorConditionalOrder, CThostFtdcErrorConditionalOrderField, nLength);
            break; }
        case OnRspQryContractBank: {
            MSG_UNWRAPPER(OnRspQryContractBank, CThostFtdcContractBankField, nLength);
            break; }
        case OnRspQryParkedOrder: {
            MSG_UNWRAPPER(OnRspQryParkedOrder, CThostFtdcParkedOrderField, nLength);
            break; }
        case OnRspQryParkedOrderAction: {
            MSG_UNWRAPPER(OnRspQryParkedOrderAction, CThostFtdcParkedOrderActionField, nLength);
            break; }
        case OnRspQryTradingNotice: {
            MSG_UNWRAPPER(OnRspQryTradingNotice, CThostFtdcTradingNoticeField, nLength);
            break; }
        case OnRspQryBrokerTradingParams: {
            MSG_UNWRAPPER(OnRspQryBrokerTradingParams, CThostFtdcBrokerTradingParamsField, nLength);
            break; }
        case OnRspQryBrokerTradingAlgos: {
            MSG_UNWRAPPER(OnRspQryBrokerTradingAlgos, CThostFtdcBrokerTradingAlgosField, nLength);
            break; }
        case OnRtnFromBankToFutureByBank: {
            MSG_UNWRAPPER_0(OnRtnFromBankToFutureByBank, CThostFtdcRspTransferField, nLength);
            break; }
        case OnRtnFromFutureToBankByBank: {
            MSG_UNWRAPPER_0(OnRtnFromFutureToBankByBank, CThostFtdcRspTransferField, nLength);
            break; }
        case OnRtnRepealFromBankToFutureByBank: {
            MSG_UNWRAPPER_0(OnRtnRepealFromBankToFutureByBank, CThostFtdcRspRepealField, nLength);
            break; }
        case OnRtnRepealFromFutureToBankByBank: {
            MSG_UNWRAPPER_0(OnRtnRepealFromFutureToBankByBank, CThostFtdcRspRepealField, nLength);
            break; }
        case OnRtnFromBankToFutureByFuture: {
            MSG_UNWRAPPER_0(OnRtnFromBankToFutureByFuture, CThostFtdcRspTransferField, nLength);
            break; }
        case OnRtnFromFutureToBankByFuture: {
            MSG_UNWRAPPER_0(OnRtnFromFutureToBankByFuture, CThostFtdcRspTransferField, nLength);
            break; }
        case OnRtnRepealFromBankToFutureByFutureManual: {
            MSG_UNWRAPPER_0(OnRtnRepealFromBankToFutureByFutureManual, CThostFtdcRspRepealField, nLength);
            break; }
        case OnRtnRepealFromFutureToBankByFutureManual: {
            MSG_UNWRAPPER_0(OnRtnRepealFromFutureToBankByFutureManual, CThostFtdcRspRepealField, nLength);
            break; }
        case OnRtnQueryBankBalanceByFuture: {
            MSG_UNWRAPPER_0(OnRtnQueryBankBalanceByFuture, CThostFtdcNotifyQueryAccountField, nLength);
            break; }
        case OnErrRtnBankToFutureByFuture: {
            MSG_UNWRAPPER_1(OnErrRtnBankToFutureByFuture, CThostFtdcReqTransferField, nLength);
            break; }
        case OnErrRtnFutureToBankByFuture: {
            MSG_UNWRAPPER_1(OnErrRtnFutureToBankByFuture, CThostFtdcReqTransferField, nLength);
            break; }
        case OnErrRtnRepealBankToFutureByFutureManual: {
            MSG_UNWRAPPER_1(OnErrRtnRepealBankToFutureByFutureManual, CThostFtdcReqRepealField, nLength);
            break; }
        case OnErrRtnRepealFutureToBankByFutureManual: {
            MSG_UNWRAPPER_1(OnErrRtnRepealFutureToBankByFutureManual, CThostFtdcReqRepealField, nLength);
            break; }
        case OnErrRtnQueryBankBalanceByFuture: {
            MSG_UNWRAPPER_1(OnErrRtnQueryBankBalanceByFuture, CThostFtdcReqQueryAccountField, nLength);
            break; }
        case OnRtnRepealFromBankToFutureByFuture: {
            MSG_UNWRAPPER_0(OnRtnRepealFromBankToFutureByFuture, CThostFtdcRspRepealField, nLength);
            break; }
        case OnRtnRepealFromFutureToBankByFuture: {
            MSG_UNWRAPPER_0(OnRtnRepealFromFutureToBankByFuture, CThostFtdcRspRepealField, nLength);
            break; }
        case OnRspFromBankToFutureByFuture: {
            MSG_UNWRAPPER(OnRspFromBankToFutureByFuture, CThostFtdcReqTransferField, nLength);
            break; }
        case OnRspFromFutureToBankByFuture: {
            MSG_UNWRAPPER(OnRspFromFutureToBankByFuture, CThostFtdcReqTransferField, nLength);
            break; }
        case OnRspQueryBankAccountMoneyByFuture: {
            MSG_UNWRAPPER(OnRspQueryBankAccountMoneyByFuture, CThostFtdcReqQueryAccountField, nLength);
            break; }
        case OnRtnOpenAccountByBank: {
            MSG_UNWRAPPER_0(OnRtnOpenAccountByBank, CThostFtdcOpenAccountField, nLength);
            break; }
        case OnRtnCancelAccountByBank: {
            MSG_UNWRAPPER_0(OnRtnCancelAccountByBank, CThostFtdcCancelAccountField, nLength);
            break; }
        case OnRtnChangeAccountByBank: {
            MSG_UNWRAPPER_0(OnRtnChangeAccountByBank, CThostFtdcChangeAccountField, nLength);
            break; }
        case OnRspQryProduct: {
            MSG_UNWRAPPER(OnRspQryProduct, CThostFtdcProductField, nLength);
            break;
        }
        case OnRspQueryCFMMCTradingAccountToken:
        {
            MSG_UNWRAPPER(OnRspQueryCFMMCTradingAccountToken, CThostFtdcQueryCFMMCTradingAccountTokenField, nLength);
            break;
        }
        }
    }

private:
    CThostFtdcTraderSpi* m_pSpi;
    std::string m_strBuffer;
    int nMsgSize;
    char m_szPackMsg[2048];
    std::ofstream ofs_order;
};

typedef ascs::tcp::single_client_base <my_client_socket> my_single_client;

相关推荐

量化高频交易从0到1(期货CTP,纳秒级,高频、趋势及套利策略)课程大纲

本课程从0到1实现1套可实盘交易的ctp量化交易系统,适合量化交易小白用户。

HFTNewMan的博客 1705

回测分析软件

多策略回测软件,主要功能:1、支持任何周期和偏移K线。2、支持隐射方式交易,如果交易合约是主力,则会自动换月。回测可以并发执行,耗时很小。分析软件,海量策略同时分析,主要功能如下:1、按时间区间分析。2、按固定资金分析,或者按固定手数分析。3、根据信号出资金曲线和指标,速度特别快。4、根据数据波动精细分析,可以更直观看出浮盈和浮亏。5、分析可以增加滑点和扣除手续费。6、指标详细,并且有排序功能,便于比较。...

HFTNewMan的博客 4520

量化交易平台

配置好每个策略需要用到数据等信息。请求数据中转向服务器同步k线,按照要求,需要重启则重启一次(只有出现未定义的k线才可能需要重新启动,重启之后都会提供该种k线,以后不需要重启)。交易平台可以连homes平台进行交易,也可以直接连ctp交易。...

HFTNewMan的博客 1979

量化策略框架

为了降低耦合度,策略以如下模板生成动态库,供交易平台动态调用。#ifndef MA_STRATEGY_DLL_EXPORTS#define MA_STRATEGY_DLL_EXPORTS#endif#ifdef MA_STRATEGY_DLL_EXPORTS#define MA_STRATEGY_DLL_API __declspec(dllexport)#else#define MA_STRATEGY_DLL_API __declspec(dllimport)#endif#in

HFTNewMan的博客 380

k线中转器

自动同步服务器k线,将交易日k线存入共享内存,交易平台直接去共享内存取想要的数据。默认提供期货1、3、5分钟、日线数据。如果想要自定义,可以通过copydata向它发送请求,可以提供任何周期,任何偏移的k线。...

HFTNewMan的博客 239

期货数据服务器以及取数据接口

期货数据服务器使用期货、期权tick数据接收软件在共享内存中提供的tick数据,实时生成k线,并且给客户端提供无缝数据服务。功能如下:1、合约属性。2、合约指数表。3、合约主力表。4、可交易合约。5、交易日。6、大宗商品指数。7、指数原始价格。8、常规K线。9、tick数据同步。10、K线校验。服务器基于boost::asio,支持自动重连、自动分包粘包。贴下数据接口代码:#pragma once#if defined(ISLIB)#defi

HFTNewMan的博客 1349

k线生成模块

1、支持任意周期K线。2、支持K线偏移。3、支持指数、主力。4、支持文华商品指数。默认支持的是:5秒、1分钟、3分钟、5分钟、日线。时间:2010年到现在。数据如下:5秒线,大宗商品指数(文华商品7186)5秒线,工业品1分钟,螺纹钢指数5分钟前偏移60秒,大宗商品指数,时间去除了‘:’。代码比较复杂,贴上导出的库:/*libkline特性1、支持任意周期K线。K线周期以秒为单位,大于总交易时间的都认为是日线。整个交易日.

HFTNewMan的博客 1463

k线、指标绘制

我接触的绘制有两种:gdi+和qt绘图。可以灵活的绘制任何想要的东西。先上效果图吧。如下:基于gdi+的股指和股票的绘制。上面是沪深成分股实时生成的股票指数走势,下面是IF主力走势和开平仓位置。如下,基于qt绘图的期货数据显示,模仿的博易大师。现在贴上代码:1、gdi+​​#pragma once#include <comdef.h>#include <GdiPlus.h>#include <Windows.h>#inc

HFTNewMan的博客 2145

期货、期权tick数据接收工具

功能:1、开启之后,7*24自动运行。2、在共享内存中存放当个交易日的tick数据,方便随时取用。3、支持多行情源取数据。经过测试一个行情源峰值带宽要求为20M,所以使用时要配合带宽限制。4、夜盘结束时输出一下tick数据,白盘结束时输出所有tick。5、支持查询指令:运行时如下:代码 1 2 3 4 5 6 7 8 9 10 11 12 13 .

HFTNewMan的博客 1556

C++ 资源大全中文版

标准库C++标准库,包括了STL容器,算法和函数等。C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。 Standard Template Library:标准模板库 C POSIX library : POSIX系统的C标准库规范 ISO C++ Standards Committee :C++标准委员会C++通用框架和库Apache C++ Standard Library:是一系列算法,容器,迭代器和其他基本组件的

HFTNewMan的博客 603
上一篇: k线中转器
下一篇: 量化策略框架
HFTNewMan
HFTNewMan 企业官方账号 企业官方账号
博客等级 码龄7年 346粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值