Files
sanguo_vnpy/archive/2026-04-29-cleanup/test/rpc/test_simple_strategy.py
T
2026-04-29 20:15:25 +08:00

70 lines
1.8 KiB
Python

from vnpy_ctastrategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager,
)
class SimpleTestStrategy(CtaTemplate):
"""最简单的测试策略,用于排查回测API问题"""
author = "姜维"
# 策略参数
fast_window = 5
slow_window = 20
# 策略变量
fast_ma = 0
slow_ma = 0
parameters = ["fast_window", "slow_window"]
variables = ["fast_ma", "slow_ma"]
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
"""初始化策略"""
super().__init__(cta_engine, strategy_name, vt_symbol, setting)
# 创建K线合成器
self.bg = BarGenerator(self.on_bar)
# 创建数组管理器
self.am = ArrayManager()
def on_init(self):
"""策略初始化"""
self.write_log("策略初始化")
# 预加载10根K线
self.load_bar(10)
def on_start(self):
"""策略启动"""
self.write_log("策略启动")
def on_stop(self):
"""策略停止"""
self.write_log("策略停止")
def on_tick(self, tick: TickData):
"""Tick推送"""
self.bg.update_tick(tick)
def on_bar(self, bar: BarData):
"""K线推送"""
# 更新数组
self.am.update_bar(bar)
if not self.am.inited:
return
# 计算指标
self.fast_ma = self.am.sma(self.fast_window)
self.slow_ma = self.am.sma(self.slow_window)
# 简单交易逻辑
if self.fast_ma > self.slow_ma and not self.pos:
self.buy(bar.close_price, 1)
elif self.fast_ma < self.slow_ma and self.pos > 0:
self.sell(bar.close_price, 1)