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

description
ui界面如图,成交记录为空,无委托发出(委托记录也是空的)
description
代码如下(和内置的双均线策略比对修改过,目前几乎是完全一样的):

from vnpy_ctastrategy import (
    CtaTemplate,
    StopOrder,
    TickData,
    BarData,
    TradeData,
    OrderData,
    BarGenerator,
    ArrayManager,
)


class DemoStrategy(CtaTemplate):
    """"""
    author: str = "abc"

    #定义参数(parameter列表)
    fast_window = 10
    slow_window = 20

    #定义变量(t时刻均线的数值和t-1时刻均线的数值,ma0是当前数值)
    fast_ma0 = 0.0
    fast_ma1 = 0.0
    slow_ma0 = 0.0
    slow_ma1 = 0.0

    parameters: list = [
        "fast_window",
        "slow_window"
    ]

    variables: list = [
        "fast_ma0",
        "fast_ma1",
        "slow_ma0",
        "slow_ma1"
    ]

    def __init__(
        self,
        cta_engine,
        strategy_name: str,
        vt_symbol: str,
        setting: dict,
    ) -> None:
        super().__init__(cta_engine, strategy_name, vt_symbol, setting)

        self.bg = BarGenerator(self, on_bar)
        self.am = ArrayManager()


def on_init(self):
    """写策略日志,策略初始化"""
    self.write_log("策略初始化")

    """加载均线"""
    self.load_bar(10)

def on_start(self):
    """启动"""
    self.write_log("策略启动")
    self.put_event()

def on_stop(self):
    """停止"""
    self.write_log("策略停止")
    self.put_event()

def on_tick(self, tick:TickData):
    self.bg.update_tick(tick)

    """双均线策略"""

def on_bar(self, bar:BarData):
    """k线更新"""
    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.fast_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)

    #如果金叉,做多(空仓时,非空仓可不操作,有空单先平空单,price为挂单价格,5只是一个示例)
    if cross_over:
        price = bar.close_price + 5

        if self.pos == 0:
            self.buy(price, 1)

        elif self.pos < 0:
            self.cover(price, 1)
            self.buy(price, 1)
    #如果死叉,做空,仓位为零时做空,不为零时先平仓
    elif cross_below:
        price = bar.close_price - 5 

        if self.pos == 0:
            self.short(price, 1)
        elif self.pos > 0:
            self.sell(price, 1)
            self.short(price, 1)

    #更新图形界面
    self.put_event()

    #实盘交易合成:任何国内交易所几乎只提供tick数据

    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
加入于:
帖子: 4713
声望: 287

可以自己在策略里面结合策略逻辑、委托函数、策略交易状态打印排查看看

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

沪公网安备 31011502017034号

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