VeighNa量化社区
你的开源社区量化交易平台
1334780859's Avatar
Member
离线
5 帖子
声望: 1

14:27:36 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\Administrator\strategies\测试.py", line 138, in on_bar
am.update_bar(bar)
File "C:\veighna_studio\lib\site-packages\vnpy\trader\utility.py", line 483, in update_bar
self.close_array[-1] = bar.close_price
AttributeError: 'TickData' object has no attribute 'close_price'

14:27:36 开始计算逐日盯市盈亏
14:27:36 成交记录为空,无法计算
14:27:36 开始计算策略统计指标
14:27:36 策略统计指标计算完成

有写了推送tick合成

    # K线合成器:从Tick合成分钟K线用
    self.bg = BarGenerator(self.on_bar)
    self.am = ArrayManager()#创建容器

self.bg.update_tick(tick)

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

class macdyinzhi:
''''''
def init(
self,
boll_window1: int,
boll_window2: int,
boll_window3: int,
) -> None:
super().init()

    self.bg = BarGenerator(self.on_bar)
    self.am = ArrayManager()#    条形数据的时间序列容器
    # 参数
    self.macd1 = boll_window1
    self.macd2 = boll_window2
    self.macd3 = boll_window3

    self.target1: int = 0             # 目标仓位
    self.target2: int = 0             # 目标仓位

def on_tick(self, tick: TickData):
    """
    Callback of new tick data update.
    回调新的报价数据更新。
    """
    self.bg.update_tick(tick)#TICKC载入
    #初始化
def on_bar(self, bar: BarData):
    self.am.update_bar(bar)#初始化
    if self.am.inited :
        self.target1=0
        self.target2=0
        # 缓存K线序列
        self.am.update_bar(bar)
        if not self.am.inited:
            return  

        ma111, ma222, ma333 = self.am.macd(self.macd1,self.macd2,self.macd3,True)
        self.fast_ma0 = ma111[-1]
        self.fast_ma1 = ma111[-2]
        #均线最后一个和最后两个
        self.slow_ma0 = ma222[-1]
        self.slow_ma1 = ma222[-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.target1 = 1

        elif cross_below:#死叉
                self.target1 = -1

def get_target(self) -> int:
        """获取因子目标"""
        return self.target1


class macd_3fenzhong_jiaocha(CtaTemplate):
""""""
author = "用Python的交易员"

boll_window1 = 12
boll_window2 = 26
boll_window3 = 9    
sun=50.0
yin=25.0

fast_ma0: int = 0
fast_ma1: int = 0.0

parameters = ["boll_window1", "boll_window2","boll_window3","sun","yin"]
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.factor = macdyinzhi(
        self.boll_window1,
        self.boll_window2,
        self.boll_window3,
    )

def on_init(self):
    """初始化"""
    self.write_log("策略初始化")
    self.load_bar(1)
def on_start(self):
    """启动"""
    pass
def on_stop(self):
    """停止"""
    pass
def on_tick(self, tick: TickData):
    """Tick推送"""
    pass
def on_bar(self, bar: BarData):
    """原始K线推送"""
    # 全撤之前委托
    self.cancel_all()

    # 推送给因子计算
    self.factor.on_bar(bar)

    # 计算目标和实际仓位差
    self.fast_ma0 = self.factor.get_target()
    # 基于仓位差执行交易
    if self.fast_ma0 > 0:
        price: float = bar.close_price

        if self.pos < 0:
            self.cover(price, 1)
            self.buy(price, abs(self.pos))
        else:
            self.buy(price, abs(self.pos))
    elif self.fast_ma0 < 0:
        price: float = bar.close_price

        if self.pos > 0:
            self.sell(price, 1)
            self.short(price, abs(self.pos))
        else:
            self.short(price, abs(self.pos))

`
不下单,拜托帮忙看看

Traceback (most recent call last):
File "C:\veighna_studio\lib\site-packages\vnpy\trader\ui\mainwindow.py", line 276, in open_widget
widget = widget_class(self.main_engine, self.event_engine)
File "C:\veighna_studio\lib\site-packages\vnpy_ctabacktester\ui\widget.py", line 55, in init
self.backtester_engine.init_engine()
File "C:\veighna_studio\lib\site-packages\vnpy_ctabacktester\engine.py", line 71, in init_engine
self.init_datafeed()
File "C:\veighna_studio\lib\site-packages\vnpy_ctabacktester\engine.py", line 77, in init_datafeed
result: bool = self.datafeed.init()
File "C:\veighna_studio\lib\site-packages\vnpy_rqdata\rqdata_datafeed.py", line 123, in init
df: DataFrame = all_instruments()
File "C:\veighna_studio\lib\site-packages\rqdatac\decorators.py", line 150, in wrap
return func(args, **kwargs)
File "C:\veighna_studio\lib\site-packages\rqdatac\services\basic.py", line 385, in all_instruments
ins_ret = filter(cond, get_instrument_list(market))
File "C:\veighna_studio\lib\site-packages\rqdatac\decorators.py", line 129, in wrapper
value = user_function(
args, kwargs)
File "C:\veighna_studio\lib\site-packages\rqdatac\services\basic.py", line 139, in _all_cached_instruments_list
return _all_instruments_list(market)
File "C:\veighna_studio\lib\site-packages\rqdatac\services\basic.py", line 116, in _all_instruments_list
ins = [Instrument(i) for i in get_client().execute("all_instruments", market=market)]
File "C:\veighna_studio\lib\site-packages\rqdatac\decorators.py", line 67, in wrap
return func(*args,
kwargs)
File "C:\veighna_studio\lib\site-packages\rqdatac\connection_pool.py", line 27, in execute
return conn.execute(method, *args, **kwargs)
File "rqdatac\connection.py", line 117, in rqdatac.connection.Connection.execute
File "rqdatac\connection.py", line 87, in rqdatac.connection.Connection._read_one_packet
rqdatac.share.errors.QuotaExceeded: Quota exceeded

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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