# 其他函数
# set_token
- 设置 token
用户有时只需要提取数据, set_token 后就可以直接调用数据函数, 无需编写策略结构。如果 token 不合法, 访问需要身份验证的函数会抛出异常。
token 位置参见终端-系统设置界面-密钥管理(token)
函数原型:
set_token(token)
参数:
参数名 | 类型 | 说明 |
---|---|---|
token | str | 身份标识 |
返回值:
None
示例:
set_token('your token')
history_data = history(symbol='SHSE.000300', frequency='1d', start_time='2010-07-28', end_time='2017-07-30', df=True)
注意: token 输入错误会报错“错误或无效的 token”。
# set_option
- 系统设置函数
设置策略单次运行时的系统选项。
函数原型:
set_option(max_wait_time=3600000, backtest_thread_num=1, ctp_md_info={})
参数:
参数名 | 类型 | 说明 |
---|---|---|
max_wait_time | int | api 调用触发流控(超出单位时间窗口的调用次数)时,允许系统冷却的最大等待时间(单位:毫秒)。 若系统当次冷却需要的时间>max_wait_time,api 调用失败会返回流控错误,需要策略自行处理(例如捕获错误提示中的需等待时间,自行等待相应时间)。 默认max_wait_time=3600000 ,即最大 3600000 毫秒,可设范围[0,3600000]. |
backtest_thread_num | int | 回测运行的最大线程个数。默认backtest_thread_num=1 ,即回测运行最多使用 1 个线程,可设范围[1,32]. |
ctp_md_info | dict | ctp柜台tick行情设置 |
返回值:
None
示例:
def init(context):
set_option(max_wait_time=3000)
set_option(backtest_thread_num=4)
def init(context):
set_option(max_wait_time=3000, backtest_thread_num=4)
注意:
- 设置
max_wait_time
,在回测模式/实时模式均可生效,与 run()中设定的策略模式 mode 一致。- 用户策略触发流控规则后,掘金系统默认会自动冷却,等待下一时间窗口再请求下一轮,不会中止策略;只有系统当次冷却需要的时间超出
max_wait_time
时,才会返回流控错误并终止策略。 - 如果自定义最大等待时间
max_wait_time=0
,触发流控规则后会返回流控错误并中止策略。如果不想中止策略,可根据流控错误提示中的等待时间,自行冷却,再次发起调用请求。
- 用户策略触发流控规则后,掘金系统默认会自动冷却,等待下一时间窗口再请求下一轮,不会中止策略;只有系统当次冷却需要的时间超出
- 设置
backtest_thread_num
,只对回测模式生效。
示例:
- 连CTP柜台tick行情
# coding=utf-8
from __future__ import print_function, absolute_import
from gm.api import *
def init(context):
symbols = 'SHSE.600000, SZSE.000001, CFFEX.IC2406, SHFE.rb2409'
subscribe(symbols=symbols, frequency='tick')
def on_tick(context, tick):
print('symbol:{}, tick:{}'.format(tick['symbol'], tick))
if __name__ == '__main__':
'''
strategy_id策略ID, 由系统生成
filename文件名, 请与本文件名保持一致
mode运行模式, 实时模式:MODE_LIVE回测模式:MODE_BACKTEST
token绑定计算机的ID, 可在系统设置-密钥管理中生成
backtest_start_time回测开始时间
backtest_end_time回测结束时间
backtest_adjust股票复权方式, 不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
backtest_initial_cash回测初始资金
backtest_commission_ratio回测佣金比例
backtest_slippage_ratio回测滑点比例
backtest_match_mode市价撮合模式,以下一tick/bar开盘价撮合:0,以当前tick/bar收盘价撮合:1
'''
# 设置CTP柜台行情地址
set_option(ctp_md_info={'addr':'101.230.102.238:51213'})
run(strategy_id='55bdf284-0049-11ee-b9da-00ff15ce52e0',
filename='main.py',
mode=MODE_LIVE,
token='2c4e3c59cde776ebc268bf6d7b4c457f204482b3',
backtest_start_time='2024-01-01 09:00:00',
backtest_end_time='2024-05-01 09:00:00',
backtest_adjust=ADJUST_PREV,
backtest_initial_cash=10000000,
backtest_commission_ratio=0.0001,
backtest_slippage_ratio=0.0001,
backtest_match_mode=1)
# log - 日志函数
函数原型:
log(level, msg, source)
参数:
参数名 | 类型 | 说明 |
---|---|---|
level | str | 日志级别 debug , info , warning , error |
msg | str | 信息 |
source | str | 来源 |
返回值:
None
示例:
log(level='info', msg='平安银行信号触发', source='strategy')
注意:
1. log 函数仅支持实时模式,输出到终端策略日志处。
2. level 输入无效参数不会报错,终端日志无显示。
3. 参数类型报 NameError 错误,缺少参数报 TypeError 错误。
4. 重启终端日志记录会自动清除,需要记录日志到本地的,可以使用 Python 的 logging 库
# get_strerror
- 查询错误码的错误描述信息
函数原型:
get_strerror(error_code)
参数:
参数名 | 类型 | 说明 |
---|---|---|
error_code | int | 错误码 |
全部 错误码详细信息
返回值:
错误原因描述信息字符串
示例:
err = get_strerror(error_code=1010)
print(err)
输出:
b'\xe6\x97\xa0\xe6\xb3\x95\xe8\x8e\xb7\xe5\x8f\x96\xe6\x8e\x98\xe9\x87\x91\xe6\x9c\x8d\xe5\x8a\xa1\xe5\x99\xa8\xe5\x9c\xb0\xe5\x9d\x80\xe5\x88\x97\xe8\xa1\xa8'
注意:
error_code 值输入错误无报错,返回值为空。
# get_version
- 查询 api 版本
函数原型:
get_version()
返回值:
字符串 当前 API 版本号
示例:
version = get_version()
print(version)
输出:
3.0.127