PDF下载 下载

快速新建策略

  • 打开终端后,登陆掘金账号点击研究策略,新建策略
    或者点击右上角新建策略

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

编译策略

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

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

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

    编译并运行策略

  • 查看运行结果
    掘金客户端中关闭新建策略窗口并打开回测结果列表

    查看回测结果

    回测相关数据指标

策略框架应该是这样的

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

继承策略基类

  1. class MyStrategy :public Strategy
  2. {
  3. public:
  4. MyStrategy() {}
  5. ~MyStrategy(){}
  6. private:
  7. };

重改关注事件

  1. class MyStrategy :public Strategy
  2. {
  3. public:
  4. MyStrategy() {}
  5. ~MyStrategy(){}
  6. //重写on_init事件,进行策略开发
  7. void on_init()
  8. {
  9. cout << "on_init" << endl;
  10. return;
  11. }
  12. private:
  13. };

在on_init里订阅行情,初始化

  1. class MyStrategy :public Strategy
  2. {
  3. public:
  4. MyStrategy() {}
  5. ~MyStrategy(){}
  6. //重写on_init事件,进行策略开发
  7. void on_init()
  8. {
  9. cout << "on_init" << endl;
  10. subscribe("SHSE.600000", "tick");
  11. return;
  12. }
  13. private:
  14. };

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

  1. MyStrategy s;

设置token,策略id,和mode

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

    开始运行

    1. s.run();

订阅行情策略示例

源文件

  1. #include <iostream>
  2. #include "strategy.h"
  3. using namespace std;
  4. class MyStrategy :public Strategy
  5. {
  6. public:
  7. MyStrategy() {}
  8. ~MyStrategy(){}
  9. //重写on_init事件,进行策略开发
  10. void on_init()
  11. {
  12. cout << "on_init" << endl;
  13. //订阅行情数据
  14. subscribe("SHSE.600000", "tick");
  15. return;
  16. }
  17. //接收tick行情事件
  18. void on_tick(Tick *tick)
  19. {
  20. cout<< "代码 " << tick->symbol << endl
  21. << "utc时间,精确到毫秒 " << tick->created_at << endl
  22. << "最新价 " << tick->price << endl
  23. << "开盘价 " << tick->open << endl
  24. << "最高价 " << tick->high << endl
  25. << "最低价 " << tick->low << endl
  26. << "成交总量 " << tick->cum_volume << endl
  27. << "成交总金额 / 最新成交额, 累计值 " << tick->cum_amount << endl
  28. << "合约持仓量(期), 累计值 " << tick->cum_position << endl
  29. << "瞬时成交额 " << tick->last_amount << endl
  30. << "瞬时成交量 " << tick->last_volume << endl
  31. << "保留)交易类型, 对应多开, 多平等类型 " << tick->trade_type << endl
  32. << "报价 " << tick->quotes << endl;
  33. }
  34. private:
  35. };
  36. int main(int argc, char *argv[])
  37. {
  38. MyStrategy s;
  39. s.set_strategy_id("07ea5d21-59ab-11e8-83bf-94c69161828a");
  40. s.set_token("39624b0f1916ae0b2a4cb1f2d13704368badf576");
  41. s.set_mode(MODE_BACKTEST);
  42. s.set_backtest_config("2017-07-11 14:20:00", "2017-07-11 15:30:00",
  43. 1000000, 1, 0, 0, 0, 1);
  44. s.run();
  45. cout << "回测完成!" << endl;
  46. getchar();
  47. return 0;
  48. }