请教:
问题一、用脚本策略运行多品种策略时,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
报错:
用的windows 10 系统,看到不少朋友都出现了这个问题,请问怎么解决?