引言
vn.py是一个开源的Python量化交易平台,它提供了丰富的API接口,支持多种交易策略的开发和实现。在CentOS系统上使用vn.py进行实战应用,不仅能够充分利用系统的稳定性和安全性,还能够通过一系列优化技巧提升交易系统的性能和稳定性。本文将详细介绍vn.py在CentOS上的实战应用过程,并分享一些优化技巧。
##vn.py环境搭建
1. 系统要求
在CentOS上运行vn.py,需要确保系统满足以下要求:
- CentOS 7.6及以上版本
- Python 3.6及以上版本
- 安装必要的依赖库,如numpy、pandas等
2. 安装Python环境
sudo yum install -y python3 python3-pip
3. 安装vn.py
pip3 install vn.py
4. 安装依赖库
pip3 install numpy pandas
vn.py实战应用
1. 创建策略
vn.py提供了丰富的API接口,可以方便地创建交易策略。以下是一个简单的示例:
”`python from vnpy.app.cta_strategy import CtaTemplate from vnpy.app.cta_strategy.engine import MainEngine from vnpy.app.cta_strategy.event import (
CtaEngineEvent, CtaStrategyEvent, CtaBarEvent, CtaTickEvent
)
class MyStrategy(CtaTemplate):
author = "Example"
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
super().__init__(cta_engine, strategy_name, vt_symbol, setting)
self.order_count = 0
def on_init(self):
self.write_log("策略初始化")
def on_start(self):
self.write_log("策略启动")
def on_stop(self):
self.write_log("策略停止")
def on_tick(self, tick):
self.write_log(f"收到tick: {tick}")
def on_bar(self, bar):
self.write_log(f"收到bar: {bar}")
def on_order(self, order):
self.write_log(f"收到order: {order}")
def on_trade(self, trade):
self.write_log(f"收到trade: {trade}")
def on_close(self):
self.write_log("策略关闭")
if name == “main”:
main_engine = MainEngine()
main_engine.init()
cta_engine = main_engine.get_engine("CTA")
cta_engine.init()
setting = {
"id": "MyStrategy",
"vt_symbol": "SHFE.cu2101",
"product_id": "SHFE",
"exchange_id": "SHFE",
"strategy_name": "MyStrategy",
"currency": "CNY",
"rate": 1,
"size": 1,
"price_type": 1,
"order_price_type": 1,
"stop_price_type": 1,
"position_type": 1,
"order_time": 1,
"limit_price": 0,
"stop_price": 0,
"volume": 1,
"interval": 1,
"limit_volume": 0,
"limit_offset": 0,
"max_count": 10,
"max_open_volume": 10,
"min_volume": 1,
"min_interval": 60,
"risk": 0.1,
"slippage": 0.1,
"max_pn_l": 0,
"max_pn_n": 0,
"max_pn_d": 0,
"max_pn_w": 0,
"max_pn_m": 0,
"max_pn_q": 0,
"max_pn_y": 0,
"max_loss": 0,
"max_profit": 0,
"max_position": 0,
"max_close_position": 0,
"max_position_ratio": 0,
"max_close_position_ratio": 0,
"max_position_amount": 0,
"max_close_position_amount": 0,
"max_position_risk": 0,
"max_close_position_risk": 0,
"max_position_price": 0,
"max_close_position_price": 0,
"max_position_value": 0,
"max_close_position_value": 0,
"max_position_margin": 0,
"max_close_position_margin": 0,
"max_position_profit": 0,
"max_close_position_profit": 0,
"max_position_loss": 0,
"max_close_position_loss": 0,
"max_position_pn": 0,
"max_close_position_pn": 0,
"max_position_pn_l": 0,
"max_close_position_pn_l": 0,
"max_position_pn_n": 0,
"max_close_position_pn_n": 0,
"max_position_pn_d": 0,
"max_close_position_pn_d": 0,
"max_position_pn_w": 0,
"max_close_position_pn_w": 0,
"max_position_pn_m": 0,
"max_close_position_pn_m": 0,
"max_position_pn_q": 0,
"max_close_position_pn_q": 0,
"max_position_pn_y": 0,
"max_close_position_pn_y": 0,
"max_position_risk_ratio": 0,
"max_close_position_risk_ratio": 0,
"max_position_risk_amount": 0,
"max_close_position_risk_amount": 0,
"max_position_risk_value": 0,
"max_close_position_risk_value": 0,
"max_position_risk_margin": 0,
"max_close_position_risk_margin": 0,
"max_position_risk_profit": 0,
"max_close_position_risk_profit": 0,
"max_position_risk_loss": 0,
"max_close_position_risk_loss": 0,
"max_position_risk_pn": 0,
"max_close_position_risk_pn": 0,
"max_position_risk_pn_l": 0,
"max_close_position_risk_pn_l": 0,
"max_position_risk_pn_n": 0,
"max_close_position_risk_pn_n": 0,
"max_position_risk_pn_d": 0,
"max_close_position_risk_pn_d": 0,
"max_position_risk_pn_w": 0,
"max_close_position_risk_pn_w": 0,
"max_position_risk_pn_m": 0,
"max_close_position_risk_pn_m": 0,
"max_position_risk_pn_q": 0,
"max_close_position_risk_pn_q": 0,
"max_position_risk_pn_y": 0,
"max_close_position_risk_pn_y": 0,
"max_position_profit_ratio": 0,
"max_close_position_profit_ratio": 0,
"max_position_profit_amount": 0,
"max_close_position_profit_amount": 0,
"max_position_profit_value": 0,
"max_close_position_profit_value": 0,
"max_position_profit_margin": 0,
"max_close_position_profit_margin": 0,
"max_position_profit_profit": 0,
"max_close_position_profit_profit": 0,
"max_position_profit_loss": 0,
"max_close_position_profit_loss": 0,
"max_position_profit_pn": 0,
"max_close_position_profit_pn": 0,
"max_position_profit_pn_l": 0,
"max_close_position_profit_pn_l": 0,
"max_position_profit_pn_n": 0,
"max_close_position_profit_pn_n": 0,
"max_position_profit_pn_d": 0,
"max_close_position_profit_pn_d": 0,
"max_position_profit_pn_w": 0,
"max_close_position_profit_pn_w": 0,
"max_position_profit_pn_m": 0,
"max_close_position_profit_pn_m": 0,
"max_position_profit_pn_q": 0,
"max_close_position_profit_pn_q": 0,
"max_position_profit_pn_y": 0,
"max_close_position_profit_pn_y": 0,
"max_position_loss_ratio": 0,
"max_close_position_loss_ratio": 0,
"max_position_loss_amount": 0,
"max_close_position_loss_amount": 0,
"max_position_loss_value": 0,
"max_close_position_loss_value": 0,
"max_position_loss_margin": 0,
"max_close_position_loss_margin": 0,
"max_position_loss_profit": 0,
"max_close_position_loss_profit": 0,
"max_position_loss_loss": 0,
"max_close_position_loss_loss": 0,
"max_position_loss_pn": 0,
"max_close_position_loss_pn": 0,
"max_position_loss_pn_l": 0,
"max_close_position_loss_pn_l": 0,
"max_position_loss_pn_n": 0,
"max_close_position_loss_pn_n": 0,
"max_position_loss_pn_d": 0,
"max_close_position_loss_pn_d": 0,
"max_position_loss_pn_w": 0,
"max_close_position_loss_pn_w": 0,
"max_position_loss_pn_m": 0,
"max_close_position_loss_pn_m": 0,
"max_position_loss_pn_q": 0,
"max_close_position_loss_pn_q": 0,
"max_position_loss_pn_y": 0,
"max_close_position_loss_pn_y": 0,
"max_position_risk_profit_ratio": 0,
"max_close_position_risk_profit_ratio": 0,
"max_position_risk_profit_amount": 0,
"max_close_position_risk_profit_amount": 0,
"max_position_risk_profit_value": 0,
"max_close_position_risk_profit_value": 0,
"max_position_risk_profit_margin": 0,
"max_close_position_risk_profit_margin": 0,
"max_position_risk_profit_profit": 0,
"max_close_position_risk_profit_profit": 0,
"max_position_risk_profit_loss": 0,
"max_close_position_risk_profit_loss": 0,
"max_position_risk_profit_pn": 0,
"max_close_position_risk_profit_pn": 0,
"max_position_risk_profit_pn_l": 0,
"max_close_position_risk_profit_pn_l": 0,
"max_position_risk_profit_pn_n": 0,
"max_close_position_risk_profit_pn_n": 0,
"max_position_risk_profit_pn_d": 0,
"max_close_position_risk_profit_pn_d": 0,
"max_position_risk_profit_pn_w": 0,
"max_close_position_risk_profit_pn_w": 0,
"max_position_risk_profit_pn_m": 0,
"max_close_position_risk_profit_pn_m": 0,
"max_position_risk_profit_pn_q": 0,
"max_close_position_risk_profit_pn_q": 0,
"max_position_risk_profit_pn_y": 0,
"max_close_position_risk_profit_pn_y": 0,
"max_position_risk_loss_ratio": 0,
"max_close_position_risk_loss_ratio": 0,
"max_position_risk_loss_amount": 0,
"max_close_position_risk_loss_amount": 0,
"max_position_risk_loss_value": 0,
"max_close_position_risk_loss_value": 0,
"max_position_risk_loss_margin": 0,
"max_close_position_risk_loss_margin": 0,
"max_position_risk_loss_profit": 0,
"max_close_position_risk_loss_profit": 0,
"max_position_risk_loss_loss": 0,
"max_close_position_risk_loss_loss": 0,
"max_position_risk_loss_pn": 0,
"max_close_position_risk_loss_pn": 0,
"max_position_risk_loss_pn_l": 0,
"max_close_position_risk_loss_pn_l": 0,
"max_position_risk_loss_pn_n": 0,
"max_close_position_risk_loss_pn_n": 0,
"max_position_risk_loss_pn_d": 0,
"max_close_position_risk_loss_pn_d": 0,
"max_position_risk_loss_pn_w": 0,
"max_close_position_risk_loss_pn_w": 0,
"max_position_risk_loss_pn_m": 0,
"max_close_position_risk_loss_pn_m": 0,
"max_position_risk_loss_pn_q": 0,
"max_close_position_risk_loss_pn_q": 0,
"max_position_risk_loss_pn_y": 0,
"max_close_position_risk_loss_pn_y": 0,
"max_position_profit_loss_ratio": 0,
"max_close_position_profit_loss_ratio": 0,
"max_position_profit_loss_amount": 0,
"max_close_position_profit_loss_amount": 0,
"max_position_profit_loss_value": 0,
"max_close_position_profit_loss_value": 0,
"max_position_profit_loss_margin": 0,
"max_close_position_profit_loss_margin": 0,
"max_position_profit_loss_profit": 0,
"max_close_position_profit_loss_profit": 0,
"max_position_profit_loss_loss": 0,
"max_close_position_profit_loss_loss": 0,
"max_position_profit_loss_pn": 0,
"max_close_position_profit_loss_pn": 0,
"max_position_profit_loss_pn_l": 0,
"max_close_position_profit_loss_pn_l": 0,
"max_position_profit_loss_pn_n": 0,
"max_close_position_profit_loss_pn_n": 0,
"max_position_profit_loss_pn_d": 0,
"max_close_position_profit_loss_pn_d": 0,
"max_position_profit_loss_pn_w": 0,
"max_close_position_profit_loss_pn_w": 0,
"max_position_profit_loss_pn_m": 0,
"max_close_position_profit_loss_pn_m": 0,
"max_position_profit_loss_pn_q": 0,
"max_close_position_profit_loss_pn_q": 0,
"max_position_profit_loss_pn_y": 0,
"max_close_position_profit_loss_pn_y": 0,
"max_position_risk_profit_loss_ratio": 0,
"max_close_position_risk_profit_loss_ratio": 0,
"max_position_risk_profit_loss_amount": 0,
"max_close_position_risk_profit_loss_amount": 0,
"max_position_risk_profit_loss_value": 0,
"max_close_position_risk_profit_loss_value": 0,
"max_position_risk_profit_loss_margin": 0,
"max_close_position_risk_profit_loss_margin": 0,
"max_position_risk_profit_loss_profit": 0,
"max_close_position_risk_profit_loss_profit": 0,
"max_position_risk_profit_loss_loss": 0,
"max_close_position_risk_profit_loss_loss": 0,
"max_position_risk_profit_loss_pn": 0,
"max_close_position_risk_profit_loss_pn": 0,
"max_position_risk_profit_loss_pn_l": 0,
"max_close_position_risk_profit_loss_pn_l": 0,
"max_position_risk_profit_loss_pn_n": 0,
"max_close_position_risk_profit_loss_pn_n": 0,
"max_position_risk_profit_loss_pn_d": 0,
"max_close_position_risk_profit_loss_pn_d": 0,
"max_position_risk_profit_loss_pn_w": 0,
"max_close_position_risk_profit_loss_pn_w": 0,
"max_position_risk_profit_loss_pn_m": 0,
"max_close_position_risk_profit_loss_pn_m": 0,
"max_position_risk_profit_loss_pn_q": 0,
"max_close_position_risk_profit_loss_pn_q": 0,
"max_position_risk_profit_loss_pn_y": 0,
"max_close_position_risk_profit_loss_pn_y": 0,
"max_position_profit_risk_ratio": 0,
"max_close_position_profit_risk_ratio": 0,
"max_position_profit_risk_amount": 0,
"max_close_position_profit_risk_amount": 0,
"max_position_profit_risk_value": 0,
"max_close_position_profit_risk_value": 0,
"max_position_profit_risk_margin": 0,
"max_close_position_profit_risk_margin": 0,
"max_position_profit_risk_profit": 0,
"max_close_position_profit_risk_profit": 0,
"max_position_profit_risk_loss": 0,
"max_close_position_profit_risk_loss": 0,
"max_position_profit_risk_pn": 0,
"max_close_position_profit_risk_pn": 0,
"max_position_profit_risk_pn_l": 0,
"max_close_position_profit_risk_pn_l": 0,
"max_position_profit_risk_pn_n": 0,
"max_close_position_profit_risk_pn_n": 0,
"max_position_profit_risk_pn_d": 0,
"max_close_position_profit_risk_pn_d": 0,
"max_position_profit_risk_pn_w": 0,
"max_close_position_profit_risk_pn_w": 0,
"max_position_profit_risk_pn_m": 0,
"max_close_position_profit_risk_pn_m": 0,
"max_position_profit_risk_pn_q": 0,
"max_close_position_profit_risk_pn_q": 0,
"max_position_profit_risk_pn_y": 0,
"max_close_position_profit_risk