[一個簡單的程序交易框架] 1 基本構思(待完善)

One Trader

一個簡單的策略交易框架

1. 架構

1.1. 層次劃分:

graph BT subgraph 交易策略層 海龜策略/馬丁策略 end 交易接口/數據接口 -.-> 海龜策略/馬丁策略 subgraph 統一接口層 交易接口/數據接口 end subgraph 接口實現層 CTP/Esunny等接口 -.-> 交易接口/數據接口 end

1.2. 模塊劃分:

graph LR 市場信息((市場信息)) 策略模塊 --> 市場數據 策略模塊 --> 市場信息 策略模塊 --> 分析模塊 策略模塊 --> 交易接口 市場數據 --> 市場信息 交易接口 --> 市場信息 分析模塊 --> 市場數據 subgraph 平臺實現接口,如CTP, Esunny等 市場信息 --> 市場數據 市場信息 --> 交易接口 end
模塊 說明
市場數據 管理並獲取序列化的實時和歷史行情並更新市場信息
市場信息 存儲市場交易品種的基本屬性及最新詢價(Tick)等
交易接口 執行交易,獲取資金信息,倉位信息,訂單信息
分析模塊 方便對數據進行分析,如指標分析等,用於指導交易
策略模塊 綜合決策模塊,調用其它模塊完成自動化交易

1.2.1. 市場數據

接口文件: MarketData.hjava

1.2.1.1. Tick與K線數據定義:

/** @brief Tick結構定義 */
struct Tick
{
    uint64_t    time;           /*< 最近更新時間 */
    uint32_t    time_ms;        /*< 以毫秒爲單位的最近更新時間 */
    double      bid;            /*< 當前買入價 */
    double      ask;            /*< 當前賣出價 */
    double      last;           /*< 最近交易價格 */
    uint32_t    bid_volume;     /*< 當前買價量 */
    uint32_t    ask_volume;     /*< 當前賣價量 */
    uint64_t    volume;         /*< 最近交易量 */
    double      openinterest;   /*< 持倉量 */
};

/** @brief 行情Bar定義 */
struct Bar
{
    uint64_t    time;           /*< 時間截 */
    double      open;           /*< 開盤價 */
    double      close;          /*< 收盤價 */
    double      high;           /*< 最高價 */
    double      low;            /*< 最低價 */
    uint64_t    volume;         /*< 成交量 */
    double      openinterest;   /*< 持倉量 */
};

Tick:json

時間戳 毫秒 買價 賣價 最近成交價 bid量 ask量 成交量 持倉量
time time_ms bid ask last bid_volume ask_volume volume openinterest

Bar:服務器

時間戳 開盤價 收盤價 最高價 最低價 成交量 持倉量
time open close high low volume interest

Tick中須要ask與bid主要是考慮到回測須要(撮合成交通常取bid, ask, last的中間價格),目前只定義了一檔價格。架構

1.2.1.2. 接口設計概述

市場數據模塊主要提供如下只大功能:框架

功能 說明
登陸登出 遠程市場數據服務器的登陸與登出操做
參數設置 設置模塊所須要的參數,如服務器地址
數據訂閱 根據品種訂閱市場數據服務器的數據
數據鉤子 對於服務器推送的實時數據採用數據鉤子的方式處理
數據獲取 提供靈活的數據獲取方式,如經過倒序索引,時間等
數據整合 對於數據源(如歷史如數等)進行整合,可經過當前統一接口獲取
模塊狀態 提供當前模塊的工做狀態信息
sequenceDiagram participant 其它模塊 participant 市場數據模塊 participant 服務端 市場數據模塊->>服務端:登陸 服務端->>市場數據模塊:登陸成功 opt 訂閱數據 市場數據模塊->>服務端:訂閱請求 服務端->>市場數據模塊:訂閱成功 服務端->>市場數據模塊:市場數據 end opt 取消訂閱 市場數據模塊->>服務端:取消訂閱 服務端->>市場數據模塊:取消成功 服務端-x市場數據模塊:市場數據 end 其它模塊->>市場數據模塊:添加數據鉤子 其它模塊->>市場數據模塊:添加查詢接口 其它模塊->>市場數據模塊:查詢
graph TB 服務端-->數據接收器 subgraph 市場數據模塊 數據接收器--推送-->數據隊列((數據隊列)) 數據接收器-.通知.->數據分發器 數據分發器--獲取-->數據隊列 數據分發器--推送-->數據鉤子A 數據分發器--推送-->數據鉤子B 數據分發器--推送-->... 數據分發器--推送-->數據鉤子N subgraph 數據處理器 數據鉤子A 數據鉤子B ... 數據鉤子N end end

1.2.2. 市場信息

  • TODO

1.2.3. 交易接口

  • TODO

1.2.4. 分析模塊

1.2.4.1. 分析模塊概述

  • 指標分析(主要對價格等交易數據進行統計分析,如使用常規指標ATR,RSI等)
  • 數據分析(各類能指導交易的數據分析,如基本面數據,基差,等等)

1.2.4.2. 分析模塊接口

  • TODO

1.2.5. 策略模塊

策略模塊啓動流程:函數

graph LR 接入依賴的模塊 --> 策略初始化 策略初始化 --> 策略運行 策略運行 --> 策略反初始化 策略反初始化 --> 策略退出

1.2.6. FAQ

  1. 爲何不把資金信息,倉位信息,訂單信息以模塊方式單獨出來,而是要放在交易接口中?

    由於設計是要支持多個交易接口多策略同時工做的,一個帳戶對應一個交易接口,
    同時能夠存在多個交易模塊,每一個交易接口都有單獨的資金信息,倉位信息以及訂單信息
    單獨出來的話還要區分不一樣的帳戶

2. 框架開發

2.1. 代碼風格

  • 類, 類公有成員,全局變量,函數 使用匈牙利命名法
  • 類私有與保護成員使用m_開頭 並使用小寫加下劃線模式
  • 函數局部變量使用小寫加下劃線方式
  • 註釋風格使用javadoc風格

2.2. 接口原則

避免由於增長接口而形成版本不兼容ui

  • 接口的實現不使用變量,只使用函數
  • 屬性使用GetPropertyString, GetPropertyInteger, GetPropertyDouble的方式進行擴展

2.3. 平臺接入

平臺的接入要實現市場數據,交易接口,市場信息設計

3. 策略開發

  • TODO

4. 配置

  • 配置文件格式爲json, 使用json schema 校驗 簡單示例:
{
    "Modules": [
        {
            "name": "itap",
            "enable": true,
            "path": "itap.dll"
        }
    ],
    "Framework": {
        "name":"OneTrader",
        "marketdata": {
            "name":"itap_marketdata",
            "module":"itap",
            "login":false,
            "params":{
                "server":"61.163.243.173",
                "port": 8383,
                "user": "no",
                "passwd": "onetrader"
            }
        },
        "marketinfo": {
            "name": "itap_marketinfo",
            "module": "itap"
        },
        "trader": {
            "name": "itap",
            "module": "itap",
            "auth": true,
            "login": true,
            "params": {
                "server":"61.163.243.173",
                "port": 8383,
            }
        }
    },
    "OneTrader":{
        "loglevel": 0
    }
}

5. TODO

  • 完善此文
相關文章
相關標籤/搜索