: | : | :期货程序化 | :期货程序化研究 | :期货量化学习 | :期货量化 |
返回列表 发帖

[模板与范例参考] 全部事件驱动模板【东方财富Python量化】

[模板与范例参考] 全部事件驱动模板【东方财富Python量化】

本示例用于说明python sdk 当前支持的回调方法示例. 建议使用python3.6.5以上的版本, gmsdk 支持Python3.6.x, python3.7.x, python3.8.x, python3.9.x
  1. # coding=utf-8
  2. from __future__ import print_function, absolute_import
  3. from typing import List, NoReturn, Text
  4. from gm.api import *
  5. from gm.csdk.c_sdk import BarLikeDict2, TickLikeDict2
  6. from gm.model import DictLikeAccountStatus, DictLikeExecRpt, DictLikeIndicator, DictLikeOrder, DictLikeParameter
  7. from gm.pb.account_pb2 import AccountStatus, ExecRpt, Order
  8. from gm.pb.performance_pb2 import Indicator
  9. from gm.pb.rtconf_pb2 import Parameter
  10. from gm.utils import gmsdklogger


  11. """
  12. 本示例用于说明python sdk 当前支持的回调方法示例.
  13. 不具有业务含义, 只用于策略编写参考
  14. 注:
  15. 建议使用python3.6.5以上的版本, gmsdk 支持Python3.6.x, python3.7.x, python3.8.x, python3.9.x
  16. """


  17. def init(context):
  18.     # type: (Context) -> NoReturn
  19.     """
  20.     策略中必须有init方法,且策略会首先运行init定义的内容,可用于
  21.     * 获取低频数据(get_fundamentals, get_fundamentals_n, get_instruments, get_history_instruments, get_instrumentinfos,
  22.     get_constituents, get_history_constituents, get_sector, get_industry, get_trading_dates, get_previous_trading_date,
  23.     get_next_trading_date, get_dividend, get_continuous_contracts, history, history_n, )
  24.     * 申明订阅的数据参数和格式(subscribe),并附带数据事件驱动功能
  25.     * 申明定时任务(schedule),附带本地时间事件驱动功能
  26.     * 读取静态的本地数据或第三方数据
  27.     * 定义全局常量,如 context.user_data = 'balabala'
  28.     * 最好不要在init中下单(order_volume, order_value, order_percent, order_target_volume, order_target_value, order_target_percent)
  29.     """

  30.     # 示例定时任务: 每天 14:50:00 调用名字为 my_schedule_task 函数
  31.     schedule(schedule_func=my_schedule_task, date_rule='1d', time_rule='14:50:00')

  32.     # 示例订阅浦发银行,60s的频率
  33.     subscribe(symbols='SHSE.600000', frequency='60s')

  34.     # 定义全局常量示例
  35.     context.user_data = 'balabala'


  36. def my_schedule_task(context):
  37.     # type: (Context) -> NoReturn
  38.     """
  39.     定时任务函数
  40.     注意: 这类的函数可以自定义函数名, 但是只能有一个context做为参数
  41.     """
  42.     # 打印全局变量和运行时间点
  43.     print(context.user_data)
  44.     print(context.now)


  45. def on_tick(context, tick):
  46.     # type: (Context, TickLikeDict2) -> NoReturn
  47.     """
  48.     tick数据推送事件
  49.     参数 tick 为当前被推送的tick.
  50.     tick包含的key值有下列值.
  51.     symbol              str                   标的代码
  52.     open                float                 日线开盘价
  53.     high                float                 日线最高价
  54.     low                 float                 日线最低价
  55.     price               float                      最新价
  56.     cum_volume          long                  成交总量/最新成交量,累计值
  57.     cum_amount          float                 成交总金额/最新成交额,累计值
  58.     trade_type          int                   交易类型 1: ‘双开’, 2: ‘双平’, 3: ‘多开’, 4: ‘空开’, 5: ‘空平’, 6: ‘多平’, 7: ‘多换’, 8: ‘空换’
  59.     last_volume         int                   瞬时成交量
  60.     cum_position        int                   合约持仓量(期),累计值(股票此值为0)
  61.     last_amount         float                 瞬时成交额
  62.     created_at          datetime.datetime     创建时间
  63.     quotes              list[Dict]            股票提供买卖5档数据, list[0]~list[4]分别对应买卖一档到五档, 期货提供买卖1档数据, list[0]表示买卖一档. 目前期货的 list[1] ~ list[4] 值是没有意义的
  64.         quotes 里每项包含的key值有:
  65.           bid_p:  float   买价
  66.           bid_v:  int     买量
  67.           ask_p   float   卖价
  68.           ask_v   int     卖量

  69.     注: 可以使用属性访问的方式得到相应的key的值. 如要访问: symbol. 则可以使用 tick.symbol 或 tick['symbol']
  70.     访问quote里的bid_p, 则可以使用 tick.quotes[0].bid_p  或 tick['quotes'][0]['bid_p']
  71.     """
  72.     pass


  73. def on_bar(context, bars):
  74.     # type: (Context, List[BarLikeDict2]) -> NoReturn
  75.     """
  76.     bar数据推送事件
  77.     参数 bars 为当前被推送的bar列表. 在调用subscribe时指定 wait_group=True, 则返回的是到当前已准备好的bar列表; 若 wait_group=False, 则返回的是当前推送的 bar 一个对象, 放在在 list 里
  78.     bar 对象包含的key值有下列值.
  79.     symbol         str      标的代码
  80.     frequency      str      频率, 支持多种频率. 要把时间转换为相应的秒数. 如 30s, 60s, 300s, 900s
  81.     open           float    开盘价
  82.     close          float    收盘价
  83.     high           float    最高价
  84.     low            float    最低价
  85.     amount         float    成交额
  86.     volume         long     成交量
  87.     position       long     持仓量(仅期货)
  88.     bob            datetime.datetime    bar开始时间
  89.     eob            datetime.datetime    bar结束时间

  90.     注: 可以使用属性访问的方式得到相应的key的值. 如要访问: symbol. 则可以使用 bar.symbol 或 bar['symbol']
  91.     """
  92.     pass


  93. def on_order_status(context, order):
  94.     # type: (Context, DictLikeOrder) -> NoReturn
  95.     """
  96.     委托状态更新事件. 参数order为委托信息
  97.     响应委托状态更新事情,下单后及委托状态更新时被触发
  98.     """
  99.     exchange, number = order.symbol.split(".")
  100.     pass


  101. def on_order_status_v2(context, order):
  102.     # type: (Context, Order) -> NoReturn
  103.     """
  104.     委托状态更新事件. 参数order为委托信息
  105.     响应委托状态更新事情,下单后及委托状态更新时被触发
  106.     3.0.113 后增加.
  107.     与on_order_status 具有等同含义, 在二者都被定义时(当前函数返回类型为类,速度更快,推介使用), 只会调用 on_order_status_v2
  108.     """
  109.     pass


  110. def on_execution_report(context, execrpt):
  111.     # type: (Context, DictLikeExecRpt) -> NoReturn
  112.     """
  113.     委托执行回报事件. 参数 execrpt 为执行回报信息
  114.     响应委托被执行事件,委托成交后被触发
  115.     """
  116.     pass


  117. def on_execution_report_v2(context, execrpt):
  118.     # type: (Context, ExecRpt) -> NoReturn
  119.     """
  120.     委托执行回报事件. 参数 execrpt 为执行回报信息
  121.     响应委托被执行事件,委托成交后被触发
  122.     3.0.113 后增加
  123.     已 on_execution_report 具有等同含义, 在二者都被定义时(当前函数返回类型为类,速度更快,推介使用), 只会调用 on_execution_report_v2
  124.     """
  125.     pass


  126. def on_account_status(context, account_status):
  127.     # type: (Context, DictLikeAccountStatus) -> NoReturn
  128.     """
  129.     交易账户状态变更事件. 仅响应 已连接,已登录,已断开 和 错误 事件
  130.     account_status: 包含account_id(账户id), account_name(账户名),ConnectionStatus(账户状态)
  131.     """
  132.     pass


  133. def on_account_status_v2(context, account_status):
  134.     # type: (Context, AccountStatus) -> NoReturn
  135.     """
  136.     交易账户状态变更事件. 仅响应 已连接,已登录,已断开 和 错误 事件
  137.     account_status: 包含account_id(账户id), account_name(账户名),ConnectionStatus(账户状态)
  138.     3.0.113 后增加
  139.     已 on_account_status 具有同等意义, 在二者都被定义时(当前函数返回类型为类,速度更快,推介使用), 只会调用 on_account_status_v2
  140.     """
  141.     pass


  142. def on_parameter(context, parameter):
  143.     # type: (Context, DictLikeParameter) -> NoReturn
  144.     """
  145.     动态参数修改事件推送. 参数 parameter 为动态参数的信息
  146.     """
  147.     pass


  148. def on_parameter_v2(context, parameter):
  149.     # type: (Context, Parameter) -> NoReturn
  150.     """
  151.     动态参数修改事件推送. 参数 parameter 为动态参数的信息
  152.     3.0.113 后增加
  153.     已 on_parameter 具有同等意义, 在二者都被定义时(当前函数返回类型为类,速度更快,推介使用), 只会调用 on_parameter_v2
  154.     """
  155.     pass


  156. def on_backtest_finished(context, indicator):
  157.     # type: (Context, DictLikeIndicator) -> NoReturn
  158.     """
  159.     回测结束事件. 参数 indicator 为此次回测的绩效指标参数信息

  160.     """
  161.     pass


  162. def on_backtest_finished_v2(context, indicator):
  163.     # type: (Context, Indicator) -> NoReturn
  164.     """
  165.     回测结束事件. 参数 indicator 为此次回测的绩效指标
  166.     3.0.113 后增加
  167.     已 on_backtest_finished 具有同等意义, 在二者都被定义时(当前函数返回类型为类,速度更快,推介使用), 只会调用 on_backtest_finished_v2
  168.     """
  169.     pass


  170. def on_error(context, code, info):
  171.     # type: (Context, int, Text) -> NoReturn
  172.     """
  173.     底层sdk出错时的回调函数
  174.     :param context:
  175.     :param code: 错误码.  参考: https://www.myquant.cn/docs/python/python_err_code
  176.     :param info: 错误信息描述
  177.     """
  178.     pass


  179. def on_trade_data_connected(context):
  180.     # type: (Context) -> NoReturn
  181.     """
  182.     交易通道网络连接成功事件
  183.     """
  184.     pass


  185. def on_market_data_connected(context):
  186.     # type: (Context) -> NoReturn
  187.     """
  188.     实时行情网络连接成功事件
  189.     """
  190.     pass


  191. def on_market_data_disconnected(context):
  192.     # type: (Context) -> NoReturn
  193.     """
  194.     实时行情网络连接断开事件
  195.     """
  196.     pass


  197. def on_trade_data_disconnected(context):
  198.     # type: (Context) -> NoReturn
  199.     """
  200.     交易通道网络连接断开事件
  201.     """
  202.     pass


  203. def on_shutdown(context):
  204.     # type: (Context) -> NoReturn
  205.     """
  206.     策略退出前回调
  207.     注:只有在终端点击策略·断开·按钮才会触发,直接关闭策略控制台不会被调用
  208.     """
  209.     pass


  210. if __name__ == '__main__':
  211.     '''
  212.         strategy_id策略ID, 由系统生成
  213.         filename文件名, 请与本文件名保持一致
  214.         mode运行模式, 实时模式:MODE_LIVE回测模式:MODE_BACKTEST
  215.         token绑定计算机的ID, 可在系统设置-密钥管理中生成
  216.         backtest_start_time回测开始时间
  217.         backtest_end_time回测结束时间
  218.         backtest_adjust股票复权方式, 不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
  219.         backtest_initial_cash回测初始资金
  220.         backtest_commission_ratio回测佣金比例
  221.         backtest_slippage_ratio回测滑点比例
  222.     '''
  223.     run(strategy_id='strategy_id',
  224.         filename='main.py',
  225.         mode=MODE_BACKTEST,
  226.         token='{{token}}',
  227.         backtest_start_time='2020-11-01 08:00:00',
  228.         backtest_end_time='2020-11-10 16:00:00',
  229.         backtest_adjust=ADJUST_PREV,
  230.         backtest_initial_cash=10000000,
  231.         backtest_commission_ratio=0.0001,
  232.         backtest_slippage_ratio=0.0001)
复制代码

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

返回列表