import numpy
from op_futures.op_strategy_plugins.template_strategy import TemplateStrategy
from op_futures.op_objects.tick_data import TickData
from op_futures.op_objects.bar_data import BarData
class DoubleMaStrategy(TemplateStrategy):
author = 'Erwin'
def __init__(self, fast_window: int, slow_window: int):
super().__init__()
self.lots = 1
# param value.
self.fast_window = fast_window
self.slow_window = slow_window
# alpha value.
self.fast_ma_value = 0
self.slow_ma_value = 0
self.pre_fast_ma_value = 0
self.pre_slow_ma_value = 0
# global in strategy instance.
self.his_close_prices = []
def on_init(self):
pass
def on_tick(self, tick: TickData):
self.his_close_prices.append(tick.last_price)
if len(self.his_close_prices) <= self.slow_window:
return
self.__update_alphas()
if self.fast_ma_value > self.slow_ma_value and self.pre_fast_ma_value < self.pre_slow_ma_value:
if self.pos < 0:
self.cover(symbol='test_symbol', lots=abs(self.pos), price=tick.last_price)
self.buy(symbol='test_symbol', lots=self.lots, price=tick.last_price)
elif self.fast_ma_value < self.slow_ma_value and self.pre_fast_ma_value > self.pre_slow_ma_value:
if self.pos > 0:
self.sell(symbol='test_symbol', lots=self.pos, price=tick.last_price)
self.short(symbol='test_symbol', lots=self.lots, price=tick.last_price)
def on_bar(self, bar: BarData = None):
self.his_close_prices.append(bar.close_price)
if len(self.his_close_prices) <= self.slow_window:
return
# update alphas value.
self.__update_alphas()
if self.fast_ma_value > self.slow_ma_value and self.pre_fast_ma_value < self.pre_slow_ma_value:
if self.pos < 0:
self.cover(symbol='test_symbol', lots=abs(self.pos), price=bar.close_price)
self.buy(symbol='test_symbol', lots=self.lots, price=bar.close_price)
elif self.fast_ma_value < self.slow_ma_value and self.pre_fast_ma_value > self.pre_slow_ma_value:
if self.pos > 0:
self.sell(symbol='test_symbol', lots=self.pos, price=bar.close_price)
self.short(symbol='test_symbol', lots=self.lots, price=bar.close_price)
def on_stop(self):
pass
def __update_alphas(self):
self.fast_ma_value = numpy.array(self.his_close_prices[-self.fast_window - 1:-1]).mean()
self.slow_ma_value = numpy.array(self.his_close_prices[-self.slow_window - 1:-1]).mean()
self.pre_fast_ma_value = numpy.array(self.his_close_prices[-self.fast_window - 2:-2]).mean()
self.pre_slow_ma_value = numpy.array(self.his_close_prices[-self.slow_window - 2:-2]).mean()
量化交易之One Piece篇 - onepiece_rsh双均线策略回测模板(支持tick、bar两种模式)
最新推荐文章于 2024-03-23 20:06:14 发布
本文介绍了一个名为DoubleMaStrategy的交易策略,它使用TemplateStrategy模板,并利用numpy计算快MA和慢MA来生成交易信号。策略根据价格变动执行买卖操作,适用于股票或期货市场。
摘要由CSDN通过智能技术生成