VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 19
声望: 1

为什么按照视频里写了双均线策略回测完成后,却没有结果,用系统自带的ATRRSI策略就有结果。
description

description

Member
avatar
加入于:
帖子: 1472
声望: 105

贴下策略代码?

Member
avatar
加入于:
帖子: 125
声望: 4

估计是参数问题,没有触发到交易

Member
avatar
加入于:
帖子: 19
声望: 1

from vnpy_ctastrategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager
)
from vnpy.trader.constant import Interval
class huice(CtaTemplate):
""""""
author: str = "wanghang"
MA1=10
MA2=20

fast_ma0 = 0.0
fast_ma1 = 0.0
slow_ma0 = 0.0
slow_ma1 = 0.0
parameters = ["MA1", "MA2"]
variables = ["fast_ma0", "fast_ma1", "slow_ma0", "slow_ma1"]

def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
    """"""
    super().__init__(cta_engine, strategy_name, vt_symbol, setting)

    self.bg = BarGenerator(
        self.on_bar,
        window=1,
        #on_window_bar=self.on_1daily_bar,
        #interval=Interval.DAILY
        )
    self.am = ArrayManager(30)

def on_init(self):
    #self.fast_ma0 = 50 + self.MA1
    #self.fast_ma0 = 50 - self.MA2

    self.load_bar(10)
def on_start(self) -> None:
    self.put_event()
def on_stop(self) -> None:
    pass
def on_bar(self, bar: BarData) -> None:
    self.bg.update_bar(bar)
#def on_1daily_bar(self,bar:BarData):

    am=self.am

    am.update_bar(bar)
    if  am.inited:
        return
    fast_ma=am.sma(self.fast_window,array=True)
    self.fast_ma0=fast_ma[-1]
    self.fast_ma1=fast_ma[-2]

    slow_ma=am.sma(self.slow_window,array=True)
    self.slow_ma0=slow_ma[-1]
    self.slow_ma1=slow_ma[-2]

    cross_over=(self.fast_ma0>=self.slow_ma0 and
                self.fast_ma1<self.slow_ma1)

    cross_below=(self.fast_ma0<=self.slow_ma0 and
                    self.fast_ma1>self.slow_ma1)

    if cross_over:

         self.buy(bar.open_price,1)
    elif cross_below:

            self.short(bar.open_price,1)

    self.put_event()
Member
avatar
加入于:
帖子: 19
声望: 1

潇湘 wrote:

为什么按照视频里写了双均线策略回测完成后,却没有结果,用系统自带的ATRRSI策略就有结果。
from vnpy_ctastrategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager
)
from vnpy.trader.constant import Interval

class huice(CtaTemplate):
""""""
author: str = "123"
MA1=10
MA2=20

fast_ma0 = 0.0
fast_ma1 = 0.0
slow_ma0 = 0.0
slow_ma1 = 0.0

parameters = ["MA1", "MA2"]
variables = ["fast_ma0", "fast_ma1", "slow_ma0", "slow_ma1"]

def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
    """"""
    super().__init__(cta_engine, strategy_name, vt_symbol, setting)

    self.bg = BarGenerator(
        self.on_bar,
        window=1,
        on_window_bar=self.on_1daily_bar,
        interval=Interval.DAILY
        )
    self.am = ArrayManager()


def on_init(self):

    self.fast_ma0 = 50 + self.MA1
    self.fast_ma0 = 50 - self.MA2

    self.load_bar(100)
def on_start(self) -> None:
    self.put_event()
def on_stop(self) -> None:
    pass
def on_bar(self, bar: BarData) -> None:
    self.bg.update_bar(bar)
def on_1daily_bar(self,bar:BarData):

    am=self.am
    am.update_bar(bar)
    if  am.inited:
        return
    fast_ma=am.sma(self.fast_window,array=True)
    self.fast_ma0=fast_ma[-1]
    self.fast_ma1=fast_ma[-2]

    slow_ma=am.sma(self.slow_window,array=True)
    self.slow_ma0=slow_ma[-1]
    self.slow_ma1=slow_ma[-2]

    cross_over=(self.fast_ma0>=self.slow_ma0 and
                self.fast_ma1<self.slow_ma1)

    cross_below=(self.fast_ma0<=self.slow_ma0 and
                    self.fast_ma1>self.slow_ma1)

    if cross_over:

         self.buy(bar.open_price,1)
    elif cross_below:



        self.short(bar.open_price,1)

    self.put_event()
def on_order(self, order: OrderData):
    """
    Callback of new order data update.
    """
    pass

def on_trade(self, trade: TradeData):
    """
    Callback of new trade data update.
    """
    self.put_event()

def on_stop_order(self, stop_order: StopOrder):
    """
    Callback of stop order update.
    """
    pass
Member
avatar
加入于:
帖子: 19
声望: 1

潇湘 wrote:

为什么按照视频里写了双均线策略回测完成后,却没有结果,用系统自带的ATRRSI策略就有结果。
description

description
回测后有参数的策略里,bar参数都是 self.bg = BarGenerator(self.on_bar)
self.am = ArrayManager()
,如果没有参数的都是自己修改的bar参数。
我修改的参数是
self.bg = BarGenerator(
self.on_bar,
window=1,
on_window_bar=self.on_1daily_bar,
interval=Interval.DAILY
)
self.am = ArrayManager(),
通过CSV导入的通达信日线级别数据。回测后没有结果

Member
avatar
加入于:
帖子: 4711
声望: 287

官方版本没有支持日线合成,并且使用导入的日线数据,数据会直接传入on_bar,把策略逻辑写在on_bar下即可

Member
avatar
加入于:
帖子: 19
声望: 1

潇湘 wrote:

潇湘 wrote:

为什么按照视频里写了双均线策略回测完成后,却没有结果,用系统自带的ATRRSI策略就有结果。
description

description
回测后有参数的策略里,bar参数都是 self.bg = BarGenerator(self.on_bar)
self.am = ArrayManager()
,如果没有参数的都是自己修改的bar参数。
我修改的参数是
self.bg = BarGenerator(
self.on_bar,
window=1,
on_window_bar=self.on_1daily_bar,
interval=Interval.DAILY
)
self.am = ArrayManager(),
通过CSV导入的通达信日线级别数据。回测后没有结果
Traceback (most recent call last):
File "C:\veighna_studio\lib\site-packages\vnpy_ctastrategy\backtesting.py", line 225, in run_backtesting
self.callback(data)
File "C:\Users\12594\strategies\测试回测.py", line 50, in on_bar
self.bg.update_bar(bar)
File "C:\veighna_studio\lib\site-packages\vnpy\trader\utility.py", line 271, in update_bar
self.update_bar_minute_window(bar)
File "C:\veighna_studio\lib\site-packages\vnpy\trader\utility.py", line 307, in update_bar_minute_window
if not (bar.datetime.minute + 1) % self.window:
ZeroDivisionError: integer division or modulo by zero

现在报错这个,😓太难了,能不能帮我分析分析

Member
avatar
加入于:
帖子: 125
声望: 4

分母不能是0,self.window是不是变成0了啊

Member
avatar
加入于:
帖子: 4711
声望: 287

self.bg = BarGenerator(self.on_bar)
把委托逻辑都写在on_bar里

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】