量化交易之One Piece篇 - MarketCTP.h
  W17cxBGSpUYm 2023年11月02日 56 0


#pragma once

#include <vector>
#include <string>
#include <iostream>
#include <atomic>

#include <onepiece/api/ctp/ThostFtdcMdApi.h>
#include <onepiece/models/AccountModel.h>

#include <onepiece/templates/ICoreListener.h>
#include <onepiece/templates/IMarketApi.h>

using namespace std;

class MarketCTP: public IMarketApi, public CThostFtdcMdSpi
{

public:
    MarketCTP() = delete;
    MarketCTP(AccountSPtr accountPtr);
    virtual ~MarketCTP();

public:
    virtual bool Connect();
    
    virtual bool Disconnect();

    virtual void Subscribe(const shared_ptr<vector<string>> instruments);

    virtual void Unsubscribe(const shared_ptr<vector<string>> instruments);

    virtual bool RegisterListener(ICoreListener* coreListener);


public:
    virtual void OnFrontConnected();

    virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

    virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData);

    virtual void OnFrontDisconnected(int nReason);

    virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

    virtual void OnHeartBeatWarning(int nTimeLapse);

private:
    inline string GetDisconnectedReason(int reason) {
        switch (reason) {
            case 0x1001:
                return "网络读失败";
            case 0x1002:
                return "网络写失败";
            case 0x2001:
                return "接收心跳超时";
            case 0x2002:
                return "发送心跳失败";
            case 0x2003:
                return "收到错误报文";
            default:
                return "Unknown";
        }
    };

    inline uint32_t MakeRequestID() {
        return this->m_nRequestID.fetch_add(1) + 1;
    }

private:
    CThostFtdcMdApi *m_api;
    atomic<uint32_t> m_nRequestID;
    AccountSPtr m_accountPtr;

    ICoreListener* m_coreListener;
};
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  xaeiTka4h8LY   2024年04月26日   50   0   0 centoslinuxredis
W17cxBGSpUYm