技能标识:vnpy
vn.py 开源量化交易框架 - 支持CTA、价差、期权策略,20+券商接口,覆盖国内外市场。
vn.py 是中国最受欢迎的开源量化交易框架,由社区驱动。支持CTA策略、价差交易、期权波动率交易等。连接CTP、飞马、恒生及20多家券商接口。
文档:https://www.vnpy.com/docs/cn/
GitHub:https://github.com/vnpy/vnpy
bash
VeighNa Trader (GUI)
├── Gateway (Broker Interface)
│ ├── CTP (Futures)
│ ├── Femas (Futures)
│ ├── Hundsun UFT (Securities)
│ ├── EMT (Securities)
│ └── IB / Alpaca (International)
├── App (Application Modules)
│ ├── CtaStrategy (CTA Strategy)
│ ├── SpreadTrading (Spread Trading)
│ ├── OptionMaster (Options Trading)
│ ├── PortfolioStrategy (Portfolio Strategy)
│ └── AlgoTrading (Algorithmic Trading)
└── DataService
├── RQData
├── TuShare
└── Custom Data Sources
python
from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp
CTA(商品交易顾问)策略是vn.py中的核心策略类型,适用于趋势跟踪、均值回归等。
python
from vnpy_ctastrategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager,
)
class DoubleMaStrategy(CtaTemplate):
双均线CTA策略
author = 量化开发者
# 策略参数(可在GUI中编辑)
fast_window = 10 # 快速均线周期
slow_window = 20 # 慢速均线周期
fixed_size = 1 # 每次交易手数
# 策略变量(在GUI中显示)
fast_ma0 = 0.0
slow_ma0 = 0.0
# 参数和变量列表(用于GUI显示和持久化)
parameters = [fastwindow, slowwindow, fixed_size]
variables = [fastma0, slowma0]
def init(self, ctaengine, strategyname, vt_symbol, setting):
super().init(ctaengine, strategyname, vt_symbol, setting)
# K线生成器:将tick合成1分钟K线,再合成N分钟K线
self.bg = BarGenerator(self.on_bar)
# 数组管理器:存储K线数据并计算技术指标
self.am = ArrayManager(size=100) # 保留最近100根K线
def on_init(self):
策略初始化——加载历史数据
self.write_log(策略初始化中)
self.load_bar(10) # 加载最近10天的历史K线
def on_start(self):
策略启动
self.write_log(策略已启动)
def on_stop(self):
策略停止
self.write_log(策略已停止)
def on_tick(self, tick: TickData):
Tick数据回调——合成为K线
self.bg.update_tick(tick)
def on_bar(self, bar: BarData):
K线数据回调——主要交易逻辑
self.am.update_bar(bar)
if not self.am.inited:
return # 数据不足,等待
# 计算快慢均线
fastma = self.am.sma(self.fastwindow, array=False)
slowma = self.am.sma(self.slowwindow, array=False)
# 检测金叉/死叉
crossover = fastma > slow_ma # 金叉
crossbelow = fastma < slow_ma # 死叉
if cross_over:
if self.pos == 0:
self.buy(bar.closeprice, self.fixedsize) # 无持仓,开多
elif self.pos < 0:
self.cover(bar.close_price, abs(self.pos)) # 先平空
self.buy(bar.closeprice, self.fixedsize) # 再开多
elif cross_below:
if self.pos == 0:
self.short(bar.closeprice, self.fixedsize) # 无持仓,开空
elif self.pos > 0:
self.sell(bar.close_price, abs(self.pos)) # 先平多
self.short(bar.closeprice, self.fixedsize) # 再开空
# 更新GUI显示变量
self.fastma0 = fastma
self.slowma0 = slowma
self.put_event() # 触发GUI更新
def on_order(self, order: OrderData):
订单状态更新
pass
def on_trade(self, trade: TradeData):
成交回调
self.put_event()
def onstoporder(self, stop_order: StopOrder):
停止单状态更新
pass
| 方法 | 描述 |
|---|---|
| self.buy(price, volume) | 买入开多仓 |
| self.sell(price, volume) |
ArrayManager 提供内置的技术指标计算:
python
am = ArrayManager(size=100)
python
from vnpy_ctastrategy import BarGenerator
class MyStrategy(CtaTemplate):
def init(self, ctaengine, strategyname, vt_symbol,
以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:
帮我安装 SkillHub 和 vnpy-1776114147 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 vnpy-1776114147 技能
skillhub install vnpy-1776114147
文件大小: 10.45 KB | 发布时间: 2026-4-15 14:52