70 lines
1.8 KiB
Python
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) |