如何根据账户资金比例下单?

目前vn.py所提供的示例代码都是按照固定数量下单,本文将介绍‘如何根据账户资金情况计算交易数量进而下单’。感谢‘爱茶语’以及‘王玥’在「维恩的派」论坛内的分享!

设计思路

  1. 从接口查询账户资金情况;
  2. 每次下单前根据账户资金情况来计算交易数量;

代码

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

原文发布于微信公众号 - 维恩的派VNPIE(vn-pie)

原文发表时间:2018-06-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

Office DDEAUTO技术分析报告

0x1 背景 过去几年,基于宏的文档攻击技术一直是主流,虽然需要用户主动进行确认,但是攻击的成功率依然非常的高。不过,近段时间来,使用Office DDEAUT...

2258
来自专栏币聪财经

币聪早报:以太坊dApp浏览器采取措施提高钱包安全性

Paul Camechon在Medium中写道:“由于用户隐私问题,MetaMask和其他dApp浏览器已经承诺在11月2日停止向用户浏览器注入Web3,这意味...

883
来自专栏闪电gogogo的专栏

使用Ctex中遇到的一些问题

一般下载好Ctex,我是使用Latex+dvi2pdf完成编译的,但是发现推荐的使用为: 1)运行CCT & Latex命令生成两次dvi和ps文件

2314
来自专栏jouypub

Maven引入外部jar的几种方法

简书主页:https://www.jianshu.com/u/756c9c8ae984

2044
来自专栏Python小白进阶之旅

Python盗号原理-代码实现截屏键盘记录远程发送-不要做坏事-木马外挂学习使用

这年头盗号的从出不穷,不是脱裤就是社工钓鱼。今天呢我们就以前面的几篇技术文章做铺垫,来讲一下python盗号的原理(学习用途,请勿用于违法犯罪),知己知彼方能百...

6258
来自专栏FreeBuf

恶意软件的小伎俩,伪装成Cloudflare页面默默挖矿

FileTour是一种广告软件,通常作为游戏和其他软件的破解或欺骗手段传播。这个软件包是界定于广告软件和PUP以及更危险的计算机感染类型(如密码窃取木马和矿工)...

993
来自专栏Brian

Linux网络工具之Ping命令

---- Ping用法 之前一直在用Ping,再仔细深入之后才发现自己只是了解皮毛。下面我把一些Ping的常用用法都记录下来,对于我来说今天又学了一个”神技”,...

3717
来自专栏蓝天

提高 Linux 上 socket 性能

在开发 socket 应用程序时,首要任务通常是确保可靠性并满足一些特定的需求。利用本文中给出的 4 个提示,您就可以从头开始为实现最佳性能来设计并开发 soc...

1423
来自专栏飞雪无情的博客

从Hexo迁移到Hugo-送漂亮的Hugo Theme主题

自从Hugo出来后,作为Go语言(golang)的重度用户的重度用户,一直想把自己的博客迁移到Hugo,但是一直没有行动,主要原因在于,我的博客使用的一款主题m...

4651
来自专栏互联网杂技

GET和POST有什么区别?及为什么网上多数答案都是错的

如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历 前几天有人问我这个问题。我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用...

34410

扫码关注云+社区

领取腾讯云代金券