Strategy - 构造函数
构造策略对象。
函数原型:
//带参数的构造函数
Strategy(const char *token, const char *strategy_id, int mode);
//不带参数的构造函数
Strategy();
参数:
参数名 | 类型 | 说明 |
---|---|---|
token | const char * | 系统权限密钥,可在终端系统设置-密钥管理中生成 |
strategy_id | const char * | 策略ID,在终端中获取 |
mode | int | 实时模式:MODE_LIVE, 回测模式:MODE_BACKTEST |
注意事项:
- 一个进程只能构造一个策略对象。
- 如用 Strategy() 构造对象时,
token
,strategy_id
,mode
三个参数可以从set_token
,set_strategy_id
,set_mode
成员函数传入。
run - 运行策略
运行策略。只有调用run后,才会驱动所有的事件,如行情接入与交易事件。
函数原型:
int run();
参数:
参数名 | 类型 | 说明 |
---|---|---|
返回值 | int | 如果策略正常退出返回0, 非正常退出返回错误码 |
注意事项:
调用run会阻塞线程,策略进入事件驱动状态,所以所有初始操作(如读配置文件,分配缓冲区等)都应该在run之前完成,如果run退出,意味着策略运行结束,整个进程应该就此退出。
stop - 停止策略
用于停止策略, 也就是如果调用run()之后, 在某个事件响应中调用stop, 这是run就是退出,并返回0。
函数原型:
void stop();
set_strategy_id - 设置策略ID
函数原型:
void set_strategy_id(const char *strategy_id);
参数:
参数名 | 类型 | 说明 |
---|---|---|
strategy_id | const char * | 策略ID,在终端中获取 |
注意事项:
不管是从构造函数传入还成员函数传入,token
, strategy_id
, mode
都是必须要设置的参数。
set_token - 设置用户token
函数原型:
void set_token(const char *token);
参数:
参数名 | 类型 | 说明 |
---|---|---|
token | const char * | 系统权限密钥,可在终端系统设置-密钥管理中生成 |
注意事项:
不管是从构造函数传入还成员函数传入,token
, strategy_id
, mode
都是必须要设置的参数。
set_mode - 设置策略运行模式
函数原型:
void set_mode(int mode);
参数:
参数名 | 类型 | 说明 |
---|---|---|
mode | int | 实时模式:MODE_LIVE, 回测模式:MODE_BACKTEST |
注意事项:
不管是从构造函数传入还成员函数传入,token
, strategy_id
, mode
都是必须要设置的参数。
schedule - 预设定时任务
在指定时间自动执行策略算法, 通常用于选股类型策略。schedule一般在on_init中调用。如果schedule预设成功,那么达成预设时间条件时,on_schedule会被调用,并在on_schedule的参数中返回设置的data_rule
和time_rule
。schedule可以调用多次,设置多个不同定时任务。
函数原型:
int schedule(const char *data_rule, const char *time_rule);
参数:
参数名 | 类型 | 说明 |
---|---|---|
data_rule | const char * | n + 时间单位, 可选’d/w/m’ 表示n天/n周/n月 |
time_rule | const char * | 执行算法的具体时间 (%H:%M:%S 格式) |
返回值 | int | 预设成功返回0, 预设失败返回错误码 |
事例:
#每天的19:06:20执行
schedule(date_rule='1d', time_rule='19:06:20')
#每月的第一个交易日的09:40:00执行
schedule(date_rule='1m', time_rule='9:40:00')
注意事项:
- 现在
data_rule
暂只支持 1d,1w,1m, 任意n后续会支持。 - 1w,1m 只在回测中支持,实盘模式中不支持。
now - 获取当前时间
实时模式下,返回当前的系统时间。回测模式下,返回当前的回测时间点。格式是utc时间戳。
函数原型:
double now();
参数:
参数名 | 类型 | 说明 |
---|---|---|
返回值 | double | 当前utc时间戳 |
set_backtest_config - 设置回测参数
如果mode设置为回测模式,则在调用run之前,需要先设置本函数设置回测参数。在实时模式下,该调用被忽略。
函数原型:
int set_backtest_config(
const char *start_time,
const char *end_time,
double initial_cash = 1000000,
double transaction_ratio = 1,
double commission_ratio = 0,
double slippage_ratio = 0,
int adjust = 0,
int check_cache = 1
);
参数:
参数名 | 类型 | 说明 |
---|---|---|
start_time | const char * | 回测开始时间 (%Y-%m-%d %H:%M:%S格式) |
end_time | const char * | 回测结束时间 (%Y-%m-%d %H:%M:%S格式) |
initial_cash | double | 回测初始资金, 默认1000000 |
transaction_ratio | double | 回测成交比例, 默认1.0, 即下单100%成交 |
commission_ratio | double | 回测佣金比例, 默认0 |
slippage_ratio | double | 回测滑点比例, 默认0 |
adjust | int | 回测复权方式(默认不复权) ADJUST_NONE(不复权)=0 ADJUST_PREV(前复权)=1 ADJUST_POST(后复权)=2 |
check_cache | int | 回测是否使用缓存:1 - 使用, 0 - 不使用;默认使用 |
注意:
start_time和end_time中月,日,时,分,秒均可以只输入个位数,例:'2016-6-7 9:55:0'
或'2017-8-1 14:6:0'
,但若对应位置为零,则0不可被省略,比如不能输入"2017-8-1 14:6: "