指引

快速新建策略

  • 打开终端后,登陆东方财富量化账号点击研究策略,新建策略 或者点击右上角新建策略

  • 新建一个典型默认账号交易策略 新建C++的默认账号交易策略

编译策略

  • 打开新建策略文件目录 策略文件目录内容可以拷贝到本地其他盘符也可以进行编译生成

  • 策略文件说明: gmskd: sdk目录 Stretegy:策略源码目录 readme.txt 说明文件

  • 打开工程文件 sln 文件 需要用visual studio打开工程文件
  • 编写策略 打开main.c文件,可进行策略编辑

    编译并运行策略

  • 查看运行结果 东方财富量化客户端中关闭新建策略窗口并打开回测结果列表

    查看回测结果

    回测相关数据指标

策略框架应该是这样的

  • 继承策略基类
  • 重改关注事件
  • 在on_init里订阅行情,初始化
  • 在main里实例化一个派生类对像
  • 设置token,策略id,和mode
  • 开始运行

继承策略基类

class MyStrategy :public Strategy
{
public:
    MyStrategy() {}
    ~MyStrategy(){}
private:
};

重改关注事件

class MyStrategy :public Strategy
{
public:
    MyStrategy() {}
    ~MyStrategy(){}

    //重写on_init事件,进行策略开发
    void on_init()
    {
        cout << "on_init" << endl;

        return;
    }
private:
};

在on_init里订阅行情,初始化

class MyStrategy :public Strategy
{
public:
    MyStrategy() {}
    ~MyStrategy(){}

    //重写on_init事件,进行策略开发
    void on_init()
    {
        cout << "on_init" << endl;
        subscribe("SHSE.600000", "tick");
        return;
    }
private:
};

在main里实例化一个派生类对像

MyStrategy s;

设置token,策略id,和mode

  1. 获取token:打开客户端->点击右上角用户头像 -> 系统设置 -> 复制token
  2. 获取策略id:打开客户端->策略研究->右上角新建策略->新建C/C++策略->复制策略ID
  3. 策略模式: MODE_LIVE(实时)=1 MODE_BACKTEST(回测)=2
    //设置策略id
    s.set_strategy_id("strategy_id");
    //设置token
    s.set_token("token");
    //设置回测模式
    s.set_mode(MODE_BACKTEST);
    //回测模式相关设置
    s.set_backtest_config("2016-07-11 17:20:00", "2017-07-11 17:30:00", 1000000, 1, 0, 0, 0, 1);
    

    开始运行

    s.run();
    

订阅行情策略示例

源文件

#include <iostream>
#include "strategy.h"

using namespace std;

class MyStrategy :public Strategy
{
public:
    MyStrategy() {}
    ~MyStrategy(){}

    //重写on_init事件,进行策略开发
    void on_init()
    {
        cout << "on_init" << endl;
        //订阅行情数据
        subscribe("SHSE.600000", "tick");

        return;
    }

   //接收tick行情事件
   void on_tick(Tick *tick)
   {
      cout<< "代码                            " << tick->symbol << endl
         << "utc时间,精确到毫秒                " << tick->created_at << endl
         << "最新价                           " << tick->price << endl
         << "开盘价                           " << tick->open << endl
         << "最高价                           " << tick->high << endl
         << "最低价                           " << tick->low << endl
         << "成交总量                         " << tick->cum_volume << endl
         << "成交总金额 / 最新成交额, 累计值     " << tick->cum_amount << endl
         << "合约持仓量(期), 累计值             " << tick->cum_position << endl
         << "瞬时成交额                        " << tick->last_amount << endl
         << "瞬时成交量                        " << tick->last_volume << endl
         << "保留)交易类型, 对应多开, 多平等类型 " << tick->trade_type << endl
         << "报价                             " << tick->quotes << endl;
   }

private:
};

int main(int argc, char *argv[])
{
    MyStrategy s;
    s.set_strategy_id("07ea5d21-59ab-11e8-83bf-94c69161828a");
    s.set_token("39624b0f1916ae0b2a4cb1f2d13704368badf576");
    s.set_mode(MODE_BACKTEST);
    s.set_backtest_config("2017-07-11 14:20:00", "2017-07-11 15:30:00",
        1000000, 1, 0, 0, 0, 1);
    s.run();
    cout << "回测完成!" << endl;
    getchar();
    return 0;
}