vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 11
声望: 0

我照着例子写了一个简单的双均线策略,但是一直在那里停着不动,请问

  1. 这是什么问题
  2. 去哪里能看到日志,调查为什么卡住了

前题:数据是提前下载好了的,试过了CTPTest以及币安的交易都是这样

description


class demo_double_script(CtaTemplate):
    """
    测试双曲线策略
    """

    fast_window = 10    # 快速均线
    slow_window = 20    # 慢速均线

    # 定义变量
    fast_ma0 = 0
    fast_ma1 = 0
    slow_ma0 = 0
    slow_ma1 = 0

    parameters = ["fast_window", "slow_window"]
    variables = ["fast_ma0", "fast_ma1", "slow_ma0", "slow_ma1"]

    def __init__(self,
                 cta_engine,
                 strategy_name,
                 vt_symbol,
                 setting):
        """
        初使化
        """
        super().__init__(self,
                         cta_engine,
                         strategy_name,
                         vt_symbol,
                         setting)
        self.write_log("进入策略")
        self.bg = BarGenerator(self.on_bar)  # 均线
        self.am = ArrayManager()            # 数据队列

    def on_init(self):
        """
        Callback when strategy is inited.
        """
        self.write_log("策略初使化")
        self.load_bar(10)

    def on_start(self):
        """
        Callback when strategy is started.
        """
        self.write_log("策略开始")

    def on_stop(self):
        """
        Callback when strategy is stopped.
        """
        self.write_log("策略结束")

    def on_tick(self, tick: TickData):
        """
        Callback of new tick data update.
        """
        self.write_log("策略tick")
        self.bg.update_tick(tick)
        pass

    def on_bar(self, bar: BarData):
        """
        Callback of new bar data update.
        即拿到K线后的回调
        """
        self.write_log("策略bar")

        # 更新K线
        self.am.update_bar(bar)

        if not self.am.inited:
            return

        # 当前均线数值
        self.fast_ma0 = self.am.sma(self.fast_window, array=True)[-1]
        # 上一个均线数值
        self.fast_ma1 = self.am.sma(self.fast_window, array=True)[-2]
        # 当前均线数值
        self.slow_ma0 = self.am.sma(self.slow_window, array=True)[-1]
        # 上一个均线数值
        self.slow_ma1 = self.am.sma(self.slow_window, array=True)[-2]

        # 是否持仓
        if self.pos == 0:
            if self.fast_ma0 > self.slow_ma0 and self.fast_ma1 < self.slow_ma1:
                self.buy(bar.close_price, 1)

            elif self.fast_ma0 < self.slow_ma0 and self.fast_ma1 > self.slow_ma1:
                self.short(bar.close_price, 1)

        self.put_event()

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

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

    def on_stop_order(self, stop_order: StopOrder):
        """
        Callback of stop order update.
        """
        pass
Member
avatar
加入于:
帖子: 1702
声望: 115
  1. 显示数据量为0,你没有数据,自然就没有成交记录了。
  2. 已有任务在运行中提示应该是策略没跑完你就有点击了回测吧。
    建议先获取数据,然后用示例策略跑跑看
Member
avatar
加入于:
帖子: 11
声望: 0

xiaohe wrote:

  1. 显示数据量为0,你没有数据,自然就没有成交记录了。
  2. 已有任务在运行中提示应该是策略没跑完你就有点击了回测吧。
    建议先获取数据,然后用示例策略跑跑看

按照您的建议

  1. 重新下载了数据:成功
  2. 使用系统中有的策略:成功
  3. 使用自己写的:还是卡住

具体见下图,所以是否可以从代码或是环境上看一下哪里出问题?或是哪里有日志可以研究一下?

description

description

Member
avatar
加入于:
帖子: 11
声望: 0

上面成功的是:ArtRsi,可以图片上的名称我截图的时候换了一下有点误导

Member
avatar
加入于:
帖子: 1702
声望: 115

看了下你的代码,第一个问题是没有

from vnpy.app.cta_strategy import (
    CtaTemplate,
    StopOrder,
    Direction,
    TickData,
    BarData,
    TradeData,
    OrderData,
    BarGenerator,
    ArrayManager,
)

第二个是你super().init(self,cta_engine,strategy_name,vt_symbol,setting)里面多了一个self。这个问题如果你用run.py打开vntrader底层报错会定位到这里的。

Member
avatar
加入于:
帖子: 11
声望: 0

xiaohe wrote:

看了下你的代码,第一个问题是没有

from vnpy.app.cta_strategy import (
    CtaTemplate,
    StopOrder,
    Direction,
    TickData,
    BarData,
    TradeData,
    OrderData,
    BarGenerator,
    ArrayManager,
)

第二个是你super().init(self,cta_engine,strategy_name,vt_symbol,setting)里面多了一个self。这个问题如果你用run.py打开vntrader底层报错会定位到这里的。

谢谢,我研究一下,非常感谢

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

沪公网安备 31011502017034号