快速新建策略
打开终端后,登陆掘金账号点击研究策略,新建策略
或者点击右上角新建策略新建一个典型默认账号交易策略
新建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
- 获取token:打开客户端->点击右上角用户头像 -> 系统设置 -> 复制token
- 获取策略id:打开客户端->策略研究->右上角新建策略->新建C/C++策略->复制策略ID
- 策略模式:
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;
}