目前vn.py所提供的示例代码都是按照固定数量下单,本文将介绍‘如何根据账户资金情况计算交易数量进而下单’。感谢‘爱茶语’以及‘王玥’在「维恩的派」论坛内的分享!
设计思路
代码
1. 查询账户资金
以CTP接口为例,其他接口类似。
修改 ctpGateway.py 里面的查询账户资金函数 onRspQryTradingAccount,每60s查询一次,将查询到资金情况保存至文件。(可修改查询频率,修改sleep函数的时间即可。)
代码:
import csv
import os
import datetime
from time import sleep
#路径
vnTrader_dir = '***\\AccountInfo'
today = datetime.datetime.now().strftime("%Y-%m-%d")
#文件名设为当天日期,每天只保存一个文件
path = vnTrader_dir + '\\AccountInfo_' + today + '.csv'
# 如果文件不存在,需要写header
if not os.path.exists(path):
# 用wb读不会产生\r\n的换行问题
with open(path, 'wb') as f:
w = csv.DictWriter(f, data.keys())
w.writeheader()
w.writerow(data)
# 文件存在,不需要写header
else:
#二进制追加形式写入
with open(path,'ab') as f:
w = csv.DictWriter(f, data.keys())
w.writerow(data)
sleep(60)
2. 在策略里面加上 ‘通过csv读取账户可用资金’。
import csv import datetime import time
today = datetime.datetime.now().strftime("%Y-%m-%d")
#之前文件的生成路径
csv_file = file(r'***\\AccountInfo_'+today+'.csv', 'rb')
reader = csv.DictReader(csv_file)
#读取最新查询的资金情况
Available = float([row['Available'] for row in reader ][-1])
3. 在需要调仓的XBAR周期下面加上
self.open_pos = int(self.Available/(self.bar.close*10*0.15)*0.1)
#螺纹钢为例,每手乘数10,保证金按15%算,10%仓位
基于python的开源交易平台开发框架。截止目前,vn.py项目在Github上的Star已经达到5563,量化交易类开源项目第1,量化类项目第3(1、2依旧分别是Zipline和TuShare)。
项目官网:http://www.vnpy.org
论坛地址:www.vnpie.com
知乎专栏:https://zhuanlan.zhihu.com/vn-py
Developed by Traders,
for Traders