|
| 1 | +.. _unanttended: |
| 2 | + |
| 3 | +在无人监控环境下执行策略 |
| 4 | +================================================= |
| 5 | +对于已经过充分测试, 十分成熟的策略程序, 也可以选择以无人值守方式运行. |
| 6 | + |
| 7 | +准备环境 |
| 8 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 9 | +TqSdk可以在windows/linux或macosx环境下运行. 无论您选择使用windows或linux系统, 请确保 |
| 10 | + |
| 11 | +* 已经装有 Python 3.6+ |
| 12 | +* 安装 :ref:`TqSdk <install>` |
| 13 | + |
| 14 | +创建一个目录, 放置你所有的策略文件. |
| 15 | + |
| 16 | + |
| 17 | +在每个策略程序中设置实盘账号 |
| 18 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 19 | +将每个策略程序配置为独立直连实盘账号. 在创建 TqApi 时, 传入TqAccount实例. 注意期货公司名称需要与天勤中的名称一致:: |
| 20 | + |
| 21 | + api = TqApi(TqAccount("H海通期货", "022631", "123456")) |
| 22 | + |
| 23 | + |
| 24 | +检查策略程序 |
| 25 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 26 | +将策略代码投入无人监控运行前, 除对策略代码进行全面测试外, 还应注意以下事项: |
| 27 | + |
| 28 | +* 使用 python 的 logging 模块输出日志信息到文件, 不要使用 print 打印日志信息 |
| 29 | +* 策略代码退出时记得调用 api.close() 函数, 或者用 with closing(api) 的格式确保退出时自动关闭 |
| 30 | +* 目前api在运行过程中抛出的异常, 默认处理都是整个策略进程直接退出. 如无特殊需求, 不要使用 expect: 的方式捕获异常并阻止程序退出, 这种情况如果没有正确处理, 可能产生难以预测的后果. |
| 31 | + |
| 32 | + |
| 33 | +在 windows 环境下配置策略的定时启动/停止 |
| 34 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 35 | +在 windows 下, 通常使用计划任务来管理策略的定时启动/停止, 下面的说明以 Windows Server 2008 为例, 其它 windows 版本操作可能有少许差异. |
| 36 | + |
| 37 | + |
| 38 | +打开 windows 任务计划管理器 |
| 39 | + |
| 40 | +.. image:: ../images/win2008_start_scheduled_task.png |
| 41 | + |
| 42 | + |
| 43 | +为每个策略添加一个策略启动任务, [程序或脚本]处填 python.exe, [添加参数]处填策略代码py文件名和参数, [起始于]处填策略代码目录 |
| 44 | + |
| 45 | +.. image:: ../images/win2008_scheduled_task_python.png |
| 46 | + |
| 47 | + |
| 48 | +最后添加一个任务, 用来停止所有策略进程. [程序或脚本]处填 taskkill, [添加参数]处填 /IM python.exe |
| 49 | + |
| 50 | +.. image:: ../images/win2008_scheduled_task_kill.png |
| 51 | + |
| 52 | + |
| 53 | +在 linux 环境下配置策略的定时启动/停止 |
| 54 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 55 | +在 linux 下, 通常使用 cron 服务来处理策略的定时启动/停止. 具体配置请参考您所使用linux发行版的相应文档. |
| 56 | + |
| 57 | + |
| 58 | +将一个策略应用于多个合约或多个账户 |
| 59 | +------------------------------------------------- |
| 60 | +将一个策略应用于多个合约或多个账户是一个常见需求. 我们推荐使用 命令行参数 来传递合约或账户信息. 请看下面例子:: |
| 61 | + |
| 62 | + # -*- coding: utf-8 -*- |
| 63 | + |
| 64 | + from tqsdk import TqApi, TqAccount |
| 65 | + |
| 66 | + api = TqApi(TqAccount("H海通期货", "0330203", "123456")) |
| 67 | + # 开仓两手并等待完成 |
| 68 | + order = api.insert_order(symbol="SHFE.rb1901", direction="BUY", offset="OPEN", limit_price=4310,volume=2) |
| 69 | + while order.status != "FINISHED": |
| 70 | + api.wait_update() |
| 71 | + print("已开仓") |
| 72 | + |
| 73 | + |
| 74 | +上面的代码中固定了账户及合约代码 SHFE.rb1901. 我们可以利用 python 的 argparse 模块为这个程序添加一些参数:: |
| 75 | + |
| 76 | + # -*- coding: utf-8 -*- |
| 77 | + |
| 78 | + import argparse |
| 79 | + from tqsdk import TqApi, TqSim, TqAccount |
| 80 | + |
| 81 | + #解析命令行参数 |
| 82 | + parser = argparse.ArgumentParser() |
| 83 | + parser.add_argument('--broker') |
| 84 | + parser.add_argument('--user_name') |
| 85 | + parser.add_argument('--password') |
| 86 | + parser.add_argument('--symbol') |
| 87 | + args = parser.parse_args() |
| 88 | + print("策略参数为: ", args.user_name, args.symbol) |
| 89 | + |
| 90 | + api = TqApi(TqAccount(args.broker, args.user_name, args.password)) |
| 91 | + # 开仓两手并等待完成 |
| 92 | + order = api.insert_order(symbol=args.symbol, direction="BUY", offset="OPEN", limit_price=4310,volume=2) |
| 93 | + while order.status != "FINISHED": |
| 94 | + api.wait_update() |
| 95 | + print("已开仓") |
| 96 | + |
| 97 | +要通过命令行运行此策略, 可以输入:: |
| 98 | + |
| 99 | + python args.py --broker=H海通期货 --user_name=0330203 --password=123456 --symbol=SHFE.cu1901 |
| 100 | + |
| 101 | + |
| 102 | +要在 PyCharm 中同时执行此程序的多种参数版本, 可以通过 PyCharm 的 Run Configuration 实现. |
| 103 | + |
| 104 | + |
| 105 | +先在 Edit Configuration 中, 为每组参数创建一个运行项 |
| 106 | + |
| 107 | +.. image:: ../images/pycharm_edit_configuration_entry.png |
| 108 | + |
| 109 | +.. image:: ../images/pycharm_edit_configuration.png |
| 110 | + |
| 111 | + |
| 112 | +在 Edit Configuration 中配置好以后, 通过 Run... 菜单选择保存好的运行项, 即可实现带参数运行 |
| 113 | + |
| 114 | +.. image:: ../images/pycharm_run_configuration.png |
| 115 | + |
| 116 | + |
| 117 | + |
0 commit comments