使用vn.py怎样进行量化策略开发?
在vn.py常使用的IDE是VS Code,这里的IDE没有什么特殊要求,大家在使用的时候使用的环境是Pycharm+VN Studio。相比于以前自己在源码基础上的策略开发,以现在这种的开发方式可以更好地专注于策略本身。
为了方便管理自己的策略代码,需要创建一个strategies的文件夹存放策略代码,这个文件夹的目录位置需要:
如果是按照官方默认配置的话,也就是.vntrader在C:/Users/YourName/下,strategies放在.vntrader的同级目录下即可。
如果把.vntrader放在了其他位置,也需要在它的同级目录下创建strategies文件夹。
因为在启动VN Trader的时候,它会在.vntrader文件在所在的目录下查找strategies文件夹,并加载其中的策略代码。之后在strategies文件夹中创建一个命名为demo_strategy.py的文件,并用IDE打开。
策略代码编写
策略这里选用vn.py中的双均线策略demo,它的完整代码如下:
from vnpy.app.cta_strategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager,
)
class DemoStrategy(CtaTemplate):
"""演示用的简单双均线"""
# 策略作者
author = "Smart Trader"
# 定义参数
fast_window = 10
slow_window = 20
# 定义变量
fast_ma0 = 0.0
fast_ma1 = 0.0
slow_ma0 = 0.0
slow_ma1 = 0.0
# 添加参数和变量名到对应的列表
parameters = ["fast_window", "slow_window"]
variables = ["fast_ma0", "fast_ma1", "slow_ma0", "slow_ma1"]
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
""""""
super().__init__(cta_engine, strategy_name, vt_symbol, setting)
# K线合成器:从Tick合成分钟K线用
self.bg = BarGenerator(self.on_bar)
# 时间序列容器:计算技术指标用
self.am = ArrayManager()
def on_init(self):
"""
当策略被初始化时调用该函数。
"""
# 输出个日志信息,下同
self.write_log("策略初始化")
# 加载10天的历史数据用于初始化回放
self.load_bar(10)
def on_start(self):
"""
当策略被启动时调用该函数。
"""
self.write_log("策略启动")
# 通知图形界面更新(策略最新状态)
# 不调用该函数则界面不会变化
self.put_event()
def on_stop(self):
"""
当策略被停止时调用该函数。
"""
self.write_log("策略停止")
self.put_event()
def on_tick(self, tick: TickData):
"""
通过该函数收到Tick推送。
"""
self.bg.update_tick(tick)
def on_bar(self, bar: BarData):
"""
通过该函数收到新的1分钟K线推送。
"""
am = self.am
# 更新K线到时间序列容器中
am.update_bar(bar)
# 若缓存的K线数量尚不够计算技术指标,则直接返回
if not am.inited:
return
# 计算快速均线
fast_ma = am.sma(self.fast_window, array=True)
self.fast_ma0 = fast_ma[-1] # T时刻数值
self.fast_ma1 = fast_ma[-2] # T-1时刻数值
# 计算慢速均线
slow_ma = am.sma(self.slow_window, array=True)
self.slow_ma0 = slow_ma[-1]
self.slow_ma1 = slow_ma[-2]
# 判断是否金叉
cross_over = (self.fast_ma0 > self.slow_ma0 and
self.fast_ma1 < self.slow_ma1)
# 判断是否死叉
cross_below = (self.fast_ma0 < self.slow_ma0 and
self.fast_ma1 > self.slow_ma1)
# 如果发生了金叉
if cross_over:
# 为了保证成交,在K线收盘价上加5发出限价单
price = bar.close_price + 5
# 当前无仓位,则直接开多
if self.pos == 0:
self.buy(price, 1)
# 当前持有空头仓位,则先平空,再开多
elif self.pos < 0:
self.cover(price, 1)
self.buy(price, 1)
# 如果发生了死叉
elif cross_below:
price = bar.close_price - 5
# 当前无仓位,则直接开空
if self.pos == 0:
self.short(price, 1)
# 当前持有空头仓位,则先平多,再开空
elif self.pos > 0:
self.sell(price, 1)
self.short(price, 1)
self.put_event()
def on_order(self, order: OrderData):
"""
通过该函数收到委托状态更新推送。
"""
pass
def on_trade(self, trade: TradeData):
"""
通过该函数收到成交推送。
"""
# 成交后策略逻辑仓位发生变化,需要通知界面更新。
self.put_event()
def on_stop_order(self, stop_order: StopOrder):
"""
通过该函数收到本地停止单推送。
"""
pass
使用vn.py怎样进行量化策略开发?相关推荐
- 量化策略开发中的参数调优
量化策略研发时,进行参数调优也是很重要的一步 以下例子来看 这是一个使用ATR止损的策略 20日一次调仓,000016(上证50),卖出价格低于close-3ATR的标的 (为了过滤手续费的影响,将手 ...
- vnpy2.0与simnow搭建简单的量化策略开发环境
刚接触量化的时候,开始研究的是python的package:ctpwrapper调用CTP接口,毕竟自己也擅长Qt和pyQt的开发,但是后来渐渐的发现,个人的力量真的太渺小,于是决定将开发环境转到vn ...
- VN.PY量化框架创始人教你做量化交易
特邀讲师:"用Python的交易员" 陈晓优 网名"用Python的交易员",伦敦卡斯商学院数理金融硕士,曾在数家大型量化私募基金担任量化交易员和期权投资经理. ...
- 百倍加速!Python量化策略的算法性能提升指南
性能问题 Python在2016年里可以说是风靡国内量化投资圈,目前整个生态链已经初具规模: 交易:vn.py.easytrader.at_py 数据:tushare 回测:rqalpha 在线平台: ...
- 百倍加速:Python量化策略的算法性能提升指南
性能问题 Python在2016年里可以说是风靡国内量化投资圈,目前整个生态链已经初具规模: 交易:vn.py.easytrader.at_py 数据:tushare 回测:rqalpha 在线平台: ...
- AI量化策略会:可以直接上实盘的策略构建方法
一年一度的培训虽晚但到,这是BigQuant与大家走过的第五个培训年头,在过去的四年里看到很多学员的成长和蜕变,从一开始的懵懂无知,到现在对深度学习的信手拈来,BigQuant与各位学员们一样都收获颇 ...
- 股票购买接口系统怎么使用vn.py进行量化策略?
一般情况下,股票购买接口系统主要是可以运用在股票量化交易系统开发的一个大方向,也就是说,股票购买接口系统是根据这些量化的特点来开发的,就比如使用vn.py进行量化策略,在这方面,对交易者进行量化分析也 ...
- 【vn.py】量化策略历史回测(基于本地csv数据)
文章目录 写在前面 获取数据 csv数据导入 历史回测 写在后面 REF 写在前面 策略研发之后,为了检测我们策略的效果,不可能一上来就接入实盘,所以需要的就是通过历史数据对我们的策略进行检验,也就是 ...
- vn.py开源量化交易程序开发框架
http://www.vnpy.org/ vn.py 是基于 Python 的开源量化交易程序开发框架,起源于国内私募的自主量化交易系统,目前已经成长为一套全功能的交易程序开发框架. vn.py项目起 ...
最新文章
- Flutter——设置appBar的高度
- SAP转储单全面总结
- python类包含对象的个数_python类与对象各个算数运算魔法方法总结
- Linux之Redis安装
- 计算机应用基础第九章在线测试答案,郑大计算机应用基础第9章节在线测试答案...
- 快手打击低俗直播 封禁一批高粉用户
- php如何修改二维数组的值,php如何改变二维数组的值
- IOS开发之自定义键盘
- linux安装配置samba服务,UbuntuLinux系统安装配置Samba服务
- 大数据python之简单的网络爬虫代码实现(单一与循环代码进行网络爬虫)
- 通讯录 C语言分类,C语言 通讯录
- 软考信息系统项目管理师论成本管理范文
- [MIT]微积分重点 第四课 指数函数(exponential) 学习笔记
- 店盈通:拼多多推广技巧步骤
- java email bean_JavaWeb学习笔记-第四章JavaBean技术
- 来套近乎啊——思维导图
- 《博客园精华集---CLR/C#分册》第三轮筛选结果 转载
- 带你深入了解Java!十七、超市会员管理系统!
- 从0到1学习CTF WEB
- 虚火已去:月收入超2亿元的虚商在创新中寻找新机遇
热门文章
- emif接口速率问题_有关TI DSP的EMIF接口的两个问题
- jeecg 从一个Tab页跳转到另一个Tab页
- 最全的免费OA试用地址
- 利用python函数,求正方形的面积
- 解决VA加载失败问题:visual assist ({44630D46-96B5-488C-8DF9-26E21DB8C1A3})未加载。请与程序包供应商联系以获得帮助
- 【历史上的今天】12 月 22 日:世界上第一封电子邮件发出;我国研制亿次计算机;第一台可编程计算机的发明者出生
- unc0ver更新适用于iOS14的越狱工具
- Android 获取手机设备信息(厂商,型号等)
- c# spire.xls 设置文字为微软雅黑_学习 原来Excel文字排版也这样漂亮!
- msvcp110.dll丢失修复,哪种修复方法效率高?