量化交易之One Piece篇 - onepiece_rsh双均线策略回测模板(支持tick、bar两种模式)

本文介绍了一个名为DoubleMaStrategy的交易策略,它使用TemplateStrategy模板,并利用numpy计算快MA和慢MA来生成交易信号。策略根据价格变动执行买卖操作,适用于股票或期货市场。
摘要由CSDN通过智能技术生成
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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值