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

请教:
问题一、用脚本策略运行多品种策略时,a = Return10Strategy(StrategyEngine,'zhangsan',vt_symbols,setting) 中的StrategyEngine传什么参数?
问题二、以下代码是用组合策略的模板写的,为什么运行时,打印的bar都是None?

from vnpy_scripttrader import init_cli_trading
from vnpy_ctp import CtpGateway
engine = init_cli_trading([CtpGateway])

setting = {
"用户名": "*",
"密码": "*",
"经纪商代码": "*",
"交易服务器":"*",
"行情服务器":"*",
"产品名称":"*",
"授权编码":"*"
}
engine.connect_gateway(setting,"CTP")

from typing import List, Dict
from datetime import datetime

from vnpy_portfoliostrategy import StrategyTemplate, StrategyEngine
from vnpy.trader.utility import BarGenerator, ArrayManager
from vnpy.trader.object import TickData, BarData

from vnpy.trader.constant import Interval

vt_symbols = ['rb2309.SHFE','rb2310.SHFE']

class Return10Strategy(StrategyTemplate):
""""""

author = "KeKe"

price_add_percent = 0.05    # 超价5%下单
fixed_pos_value = 1000000   # 每个合约做100万
signal_ts = {}
signal_total = {}
last_tick_time: datetime = None
trade_day = 0
targets_pos = {}

parameters = [
    "price_add_percent",
    "fixed_size",
]
variables = [
    "signal_ts", "signal_total",
    "trade_day", "targets_pos"
]

def __init__(
    self,
    strategy_engine: StrategyEngine,
    strategy_name: str,
    vt_symbols: List[str],
    setting: dict
):
    """"""
    super().__init__(strategy_engine, strategy_name, vt_symbols, setting)

    self.bgs: Dict[str, BarGenerator] = {}
    self.ams: Dict[str, ArrayManager] = {}

    # Obtain contract info
    for vt_symbol in self.vt_symbols:
        def on_bar(bar: BarData):
            """"""
            pass

        self.bgs[vt_symbol] = BarGenerator(on_bar)
        self.ams[vt_symbol] = ArrayManager()

def on_init(self):
    """
    Callback when strategy is inited.
    """
    print("策略初始化")

def on_start(self):
    """
    Callback when strategy is started.
    """
    print("策略启动")

def on_stop(self):
    """
    Callback when strategy is stopped.
    """
    print("策略停止")

def on_tick(self, tick: TickData):
    """
    Callback of new tick data update.
    """
    if (
        self.last_tick_time
        and self.last_tick_time.minute != tick.datetime.minute
    ):
        bars = {}
        for vt_symbol, bg in self.bgs.items():
            bars[vt_symbol] = bg.generate()
        self.on_bars(bars)

    bg: BarGenerator = self.bgs[tick.vt_symbol]
    bg.update_tick(tick)

    self.last_tick_time = tick.datetime

def on_bars(self, bars: Dict[str, BarData]):
    """"""
    # 1) 全撤
    #self.cancel_all()

    # 2.3)初始化am &计算时间序列
    for vt_symbol, bar in bars.items():
        am: ArrayManager = self.ams[vt_symbol]
        am.update_bar(bar)
        print(am)
        # if not am.inited:
        #     return

        # 信号 过去10天的收益率
        return10 = am.rocp(10)

        # 信号>0,时序信号+1,信号<0,时序信号-1
        if return10 > 0:
            self.signal_ts[vt_symbol] = 1
        elif return10 < - 0:
            self.signal_ts[vt_symbol] = -1
        else:
            self.signal_ts[vt_symbol] = 0

    # 3)信号汇总,总信号=时序信号汇总 + 横截面信号汇总
    # 基于总体信号,得到目标持仓
    for vt_symbol, bar in bars.items():
        self.signal_total[vt_symbol] = self.signal_ts[vt_symbol]
        self.targets_pos[vt_symbol] = int(
            self.fixed_pos_value / bar.close_price
        ) * self.signal_total[vt_symbol]

    # 3)交易执行(每隔10个交易日检查并且调仓)
    if self.trade_day == 0 or not self.trade_day % 10:

        for vt_symbol in self.vt_symbols:
            bar = bars.get(vt_symbol)
            if not bar:
                continue

    self.put_event()

vt_symbols = ['rb2309.SHFE','rb2310.SHFE']
a = Return10Strategy(StrategyEngine,'zhangsan',vt_symbols,setting)
while True:
for vt_symbol in vt_symbols:
print(a.bgs[vt_symbol].bar)

由于不属于CTA策略,所以不想套用CTA策略的模板,请问如何使用脚本策略合成K线。比如:轮询合约ABC,输出ABC的1分钟K线。

get_trades
入参:vt_orderid: str, use_df: bool = False
出参:Sequence[TradeData]
根据给定的一个vt_orderid返回这次报单过程中的所有TradeData对象。vt_orderid是本地委托号,每一个委托OrderData,由于部分成交关系,可以对应多笔成交TradeData。

这是文档中对get_trades的介绍,请问TradeData是指的什么?gei_orders已经返回了哪些成交,哪些未成交,这个TradeData有什么用?哪里可以查到它的数据结构?

看到了,get_all_accounts

看到了:get_all_positions

使用说明的文档上写:
get_position
入参:vt_positionid: str, use_df: bool = False
出参:PositionData
根据vt_positionid来查询持仓情况,返回对象包含接口名称、交易所、合约代码、数量、冻结数量等。
position = engine.get_position(vt_positionid='rb2202.SHFE.多')

这是查询某个交易所某个合约某个方向的持仓情况的语句,如果想查询所有的持仓,该如何写呢?

我想查询自己的账户里有多少钱,脚本策略运行以下的代码:
account = engine.get_account(vt_accountid="CTP.189672",use_df=False)
请问怎么才能知道自己账户的vt_accountid?

嗯,还安装了anaconda3,要卸载掉吗?

出现上述报错后,CMD下运行D:\vnstudio/python.exe -m pip install --no-index -f D:\vnstudio/pkgs -r D:\vnstudio/pkgs/requirements.txt
报错:
description

同问

用的windows 10 系统,看到不少朋友都出现了这个问题,请问怎么解决?
description

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

沪公网安备 31011502017034号

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