全部事件驱动模板【东方财富Python量化】
本示例用于说明python sdk 当前支持的回调方法示例. 建议使用python3.6.5以上的版本, gmsdk 支持Python3.6.x, python3.7.x, python3.8.x, python3.9.x[code]# coding=utf-8
from __future__ import print_function, absolute_import
from typing import List, NoReturn, Text
from gm.api import *
from gm.csdk.c_sdk import BarLikeDict2, TickLikeDict2
from gm.model import DictLikeAccountStatus, DictLikeExecRpt, DictLikeIndicator, DictLikeOrder, DictLikeParameter
from gm.pb.account_pb2 import AccountStatus, ExecRpt, Order
from gm.pb.performance_pb2 import Indicator
from gm.pb.rtconf_pb2 import Parameter
from gm.utils import gmsdklogger
"""
本示例用于说明python sdk 当前支持的回调方法示例.
不具有业务含义, 只用于策略编写参考
注:
建议使用python3.6.5以上的版本, gmsdk 支持Python3.6.x, python3.7.x, python3.8.x, python3.9.x
"""
def init(context):
# type: (Context) -> NoReturn
"""
策略中必须有init方法,且策略会首先运行init定义的内容,可用于
* 获取低频数据(get_fundamentals, get_fundamentals_n, get_instruments, get_history_instruments, get_instrumentinfos,
get_constituents, get_history_constituents, get_sector, get_industry, get_trading_dates, get_previous_trading_date,
get_next_trading_date, get_dividend, get_continuous_contracts, history, history_n, )
* 申明订阅的数据参数和格式(subscribe),并附带数据事件驱动功能
* 申明定时任务(schedule),附带本地时间事件驱动功能
* 读取静态的本地数据或第三方数据
* 定义全局常量,如 context.user_data = 'balabala'
* 最好不要在init中下单(order_volume, order_value, order_percent, order_target_volume, order_target_value, order_target_percent)
"""
# 示例定时任务: 每天 14:50:00 调用名字为 my_schedule_task 函数
schedule(schedule_func=my_schedule_task, date_rule='1d', time_rule='14:50:00')
# 示例订阅浦发银行,60s的频率
subscribe(symbols='SHSE.600000', frequency='60s')
# 定义全局常量示例
context.user_data = 'balabala'
def my_schedule_task(context):
# type: (Context) -> NoReturn
"""
定时任务函数
注意: 这类的函数可以自定义函数名, 但是只能有一个context做为参数
"""
# 打印全局变量和运行时间点
print(context.user_data)
print(context.now)
def on_tick(context, tick):
# type: (Context, TickLikeDict2) -> NoReturn
"""
tick数据推送事件
参数 tick 为当前被推送的tick.
tick包含的key值有下列值.
symbol str 标的代码
open float 日线开盘价
high float 日线最高价
low float 日线最低价
price float 最新价
cum_volume long 成交总量/最新成交量,累计值
cum_amount float 成交总金额/最新成交额,累计值
trade_type int 交易类型 1: ‘双开’, 2: ‘双平’, 3: ‘多开’, 4: ‘空开’, 5: ‘空平’, 6: ‘多平’, 7: ‘多换’, 8: ‘空换’
last_volume int 瞬时成交量
cum_position int 合约持仓量(期),累计值(股票此值为0)
last_amount float 瞬时成交额
created_at datetime.datetime 创建时间
quotes list[Dict] 股票提供买卖5档数据, list[0]~list[4]分别对应买卖一档到五档, 期货提供买卖1档数据, list[0]表示买卖一档. 目前期货的 list[1] ~ list[4] 值是没有意义的
quotes 里每项包含的key值有:
bid_p: float 买价
bid_v: int 买量
ask_p float 卖价
ask_v int 卖量
注: 可以使用属性访问的方式得到相应的key的值. 如要访问: symbol. 则可以使用 tick.symbol 或 tick['symbol']
访问quote里的bid_p, 则可以使用 tick.quotes[0].bid_p 或 tick['quotes'][0]['bid_p']
"""
pass
def on_bar(context, bars):
# type: (Context, List[BarLikeDict2]) -> NoReturn
"""
bar数据推送事件
参数 bars 为当前被推送的bar列表. 在调用subscribe时指定 wait_group=True, 则返回的是到当前已准备好的bar列表; 若 wait_group=False, 则返回的是当前推送的 bar 一个对象, 放在在 list 里
bar 对象包含的key值有下列值.
symbol str 标的代码
frequency str 频率, 支持多种频率. 要把时间转换为相应的秒数. 如 30s, 60s, 300s, 900s
open float 开盘价
close float 收盘价
high float 最高价
low float 最低价
amount float 成交额
volume long 成交量
position long 持仓量(仅期货)
bob datetime.datetime bar开始时间
eob datetime.datetime bar结束时间
注: 可以使用属性访问的方式得到相应的key的值. 如要访问: symbol. 则可以使用 bar.symbol 或 bar['symbol']
"""
pass
def on_order_status(context, order):
# type: (Context, DictLikeOrder) -> NoReturn
"""
委托状态更新事件. 参数order为委托信息
响应委托状态更新事情,下单后及委托状态更新时被触发
"""
exchange, number = order.symbol.split(".")
pass
def on_order_status_v2(context, order):
# type: (Context, Order) -> NoReturn
"""
委托状态更新事件. 参数order为委托信息
响应委托状态更新事情,下单后及委托状态更新时被触发
3.0.113 后增加.
与on_order_status 具有等同含义, 在二者都被定义时(当前函数返回类型为类,速度更快,推介使用), 只会调用 on_order_status_v2
"""
pass
def on_execution_report(context, execrpt):
# type: (Context, DictLikeExecRpt) -> NoReturn
"""
委托执行回报事件. 参数 execrpt 为执行回报信息
响应委托被执行事件,委托成交后被触发
"""
pass
def on_execution_report_v2(context, execrpt):
# type: (Context, ExecRpt) -> NoReturn
"""
委托执行回报事件. 参数 execrpt 为执行回报信息
响应委托被执行事件,委托成交后被触发
3.0.113 后增加
已 on_execution_report 具有等同含义, 在二者都被定义时(当前函数返回类型为类,速度更快,推介使用), 只会调用 on_execution_report_v2
"""
pass
def on_account_status(context, account_status):
# type: (Context, DictLikeAccountStatus) -> NoReturn
"""
交易账户状态变更事件. 仅响应 已连接,已登录,已断开 和 错误 事件
account_status: 包含account_id(账户id), account_name(账户名),ConnectionStatus(账户状态)
"""
pass
def on_account_status_v2(context, account_status):
# type: (Context, AccountStatus) -> NoReturn
"""
交易账户状态变更事件. 仅响应 已连接,已登录,已断开 和 错误 事件
account_status: 包含account_id(账户id), account_name(账户名),ConnectionStatus(账户状态)
3.0.113 后增加
已 on_account_status 具有同等意义, 在二者都被定义时(当前函数返回类型为类,速度更快,推介使用), 只会调用 on_account_status_v2
"""
pass
def on_parameter(context, parameter):
# type: (Context, DictLikeParameter) -> NoReturn
"""
动态参数修改事件推送. 参数 parameter 为动态参数的信息
"""
pass
def on_parameter_v2(context, parameter):
# type: (Context, Parameter) -> NoReturn
"""
动态参数修改事件推送. 参数 parameter 为动态参数的信息
3.0.113 后增加
已 on_parameter 具有同等意义, 在二者都被定义时(当前函数返回类型为类,速度更快,推介使用), 只会调用 on_parameter_v2
"""
pass
def on_backtest_finished(context, indicator):
# type: (Context, DictLikeIndicator) -> NoReturn
"""
回测结束事件. 参数 indicator 为此次回测的绩效指标参数信息
"""
pass
def on_backtest_finished_v2(context, indicator):
# type: (Context, Indicator) -> NoReturn
"""
回测结束事件. 参数 indicator 为此次回测的绩效指标
3.0.113 后增加
已 on_backtest_finished 具有同等意义, 在二者都被定义时(当前函数返回类型为类,速度更快,推介使用), 只会调用 on_backtest_finished_v2
"""
pass
def on_error(context, code, info):
# type: (Context, int, Text) -> NoReturn
"""
底层sdk出错时的回调函数
:param context:
:param code: 错误码. 参考: https://www.myquant.cn/docs/python/python_err_code
:param info: 错误信息描述
"""
pass
def on_trade_data_connected(context):
# type: (Context) -> NoReturn
"""
交易通道网络连接成功事件
"""
pass
def on_market_data_connected(context):
# type: (Context) -> NoReturn
"""
实时行情网络连接成功事件
"""
pass
def on_market_data_disconnected(context):
# type: (Context) -> NoReturn
"""
实时行情网络连接断开事件
"""
pass
def on_trade_data_disconnected(context):
# type: (Context) -> NoReturn
"""
交易通道网络连接断开事件
"""
pass
def on_shutdown(context):
# type: (Context) -> NoReturn
"""
策略退出前回调
注:只有在终端点击策略·断开·按钮才会触发,直接关闭策略控制台不会被调用
"""
pass
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回测滑点比例
'''
run(strategy_id='strategy_id',
filename='main.py',
mode=MODE_BACKTEST,
token='{{token}}',
backtest_start_time='2020-11-01 08:00:00',
backtest_end_time='2020-11-10 16:00:00',
backtest_adjust=ADJUST_PREV,
backtest_initial_cash=10000000,
backtest_commission_ratio=0.0001,
backtest_slippage_ratio=0.0001)
[/code]
页:
[1]