# 其他函数

# 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)

注意:

  1. 设置max_wait_time,在回测模式/实时模式均可生效,与 run()中设定的策略模式 mode 一致。
    • 用户策略触发流控规则后,掘金系统默认会自动冷却,等待下一时间窗口再请求下一轮,不会中止策略;只有系统当次冷却需要的时间超出max_wait_time时,才会返回流控错误并终止策略。
    • 如果自定义最大等待时间max_wait_time=0,触发流控规则后会返回流控错误并中止策略。如果不想中止策略,可根据流控错误提示中的等待时间,自行冷却,再次发起调用请求。
  2. 设置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

上次更新: 5/29/2024, 5:29:07 PM