使用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项目起 ...
最新文章
- Java项目:网上电商项目(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
- 整合大数据价值最大化的三个关键因素
- 获取go语言官方文档的两个方法
- 速攻蓝牙NRF52832系列教程之方法篇(三)
- php语言培训费用,PHP语言编程的优势在哪里
- Android Studio在线安装Android SDK注意事项
- 电脑中计算机右键管理无法打开,win8系统计算机右键菜单中的管理打不开怎么办...
- typora+picgo+gitee搭建免费图床纵享丝滑
- 松鼠会啊松鼠会,22号来杭州啦
- 为什么32.768kHz的晶振封装这么另类?
- 个人理解设计为何要多用组合,少用继承
- 《Cocos Creator游戏实战》在游戏中显示弹幕
- 模块1--BH1750的应用(IIC)
- HNUCM 1366 绿地装饰解题报告 (模拟)
- 1.21.3 经典车间生产调度问题智能生产系统中的调度问题
- Linux安装与卸载Nginx
- C# xmind总结
- momen.js记录下开发中用到的日期
- 推荐一些IEDA,Eclipse十分好用的插件
- 中国的5G建设和美国马斯克的星链有什么区别?
热门文章
- mybatis分页警告:Hessian/Burlap: 'com.github.pagehelper.Page' is an unknown class in WebappClasss解决办法
- 基于FFmpeg的视频播放器之七:音频解码
- 8.4 小波变换分解与重构算法
- Echarts 地图概述及二维地图初始化
- 基于MCGS与PLC的四路抢答器
- msvcp110.dll丢失修复,哪种修复方法效率高?
- Kubernetes 生产环境安装部署 基于 Kubernetes v1.14.0 之 etcd集群
- MQTT订阅发布主题
- 该公司myRIO不仅有丰富的硬体生态系统
- 武汉理工计算机考研难吗,武汉理工大学(专业学位)计算机技术考研难吗