Skip to content

Commit aa8e5b0

Browse files
committed
docs:无人值守文档
1 parent 72b2016 commit aa8e5b0

File tree

2 files changed

+118
-0
lines changed

2 files changed

+118
-0
lines changed

doc/advanced/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@
1212
gui.rst
1313
for_vnpy_user.rst
1414
for_ctp_user.rst
15+
unanttended.rst

doc/advanced/unanttended.rst

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
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

Comments
 (0)