什么时间段运行的?
C:\Users\Administrator\strategies
IO2006-C-3900.CFFEX的命名规则好像不一样,自己查阅米筐的手册。
图片评论
策略没有放在指定的文件夹里
退出VN Station,重新登录。
Lucien wrote:
python run.py 按照文章来运行无界面模式,出错
错误产生在 main_engine.connect(exchange_setting,exchange_name) 连接接口 这里。错误内容: 个人理解是gateway产生的
gateway.connect(setting)
session_number, proxy_host, proxy_port)
self.start(session_number)
self._pool = Pool(n)
return ThreadPool(processes, initializer, initargs)
Pool.init(self, processes, initializer, initargs)
if processes < 1:
TypeError: '<' not supported between instances of 'str' and 'int'这要怎么解决呢? 有界面模式是能正常运行的。
你设置的问题吧
配置VN Trader的时候需要勾上CTP接口那个选项。
我这样写是可以直接命令行运行的
from time import sleep
from vnpy.app.script_trader import init_cli_trading
from vnpy.gateway.ctp import CtpGateway
from vnpy.gateway.xtp import XtpGateway
# CTP接口连接设置
ctp_setting = {
}
# XTP接口连接设置
xtp_setting = {
}
engine = init_cli_trading([CtpGateway, XtpGateway])
engine.connect_gateway(ctp_setting, "CTP")
engine.connect_gateway(xtp_setting, "XTP")
sleep(10)
vt_symbols = ["IC2012.CFFEX", "rb2009.SHFE", "601990.SSE"]
engine.subscribe(vt_symbols)
# 获取合约信息
for vt_symbol in vt_symbols:
contract = engine.get_contract(vt_symbol)
msg = f"合约信息,{contract}"
engine.write_log(msg)
# 持续运行,使用strategy_active来判断是否要退出程序
engine.strategy_active = True
while engine.strategy_active:
# 轮询获取行情
for vt_symbol in vt_symbols:
tick = engine.get_tick(vt_symbol, use_df=True)
msg = f"最新行情, {tick}"
engine.write_log(msg)
# 等待3秒进入下一轮
sleep(3)
但这个代码通过VNTrader加载就不行,命令行可以运行。后来发现是 def run(engine: ScriptEngine)函数已经集成了底层的CTP和XTP的接口,所以需要在VNTrader里面登录CTP和XTP的接口才能正常运行,如果没有登录CTP和XTP接口,是无法获取Tick数据的。
我也希望能够有一个详细的Demo来说明脚本策略模式的编写格式和要求。
KTer wrote:
class_name = "DemoMaStrategyCTP", 这里我自己写的策略类py文件放在哪个目录下呢
默认路径是:C:\Users\Administrator\strategies
李怡然 wrote:
我的想法是:
- 给
BarData
增加一个floating_share
字段,用来计算市值。或在策略外维护一个带有时间戳的储存个股流通股数的数据容器。(目的是方便你拿到流通股数)- 为策略设置一个类属性
self.target_pool: List
来存放你的目标股票- 将
vt_symbols
设置为包括A股所有股票和股指期货合约的List
- 在
on_bars
函数内实现一个筛选市值最小的10只股票的逻辑,并将选出的股票放入`self.target_pool'- 利用
self.get_pos
来获得目标池股票的持仓情况,方便你进行动态调仓。该方法的弊端:
载入的数据太多,回测应该会很慢。
多谢版主这么详细的回复。目前我们考虑在每天盘前对昨天的市值进行排名,然后在on_bars里面每隔1min对排名进行刷新,根据已有持仓,获取调入调出的股票List,然后进行决策和下单交易。
日期格式要跟csv一样,不一样的可以修改成匹配的就可以了 %Y-%m-%d %H:%M:%S
我的策略逻辑很简单,就是每天对A股所有股票进行市值排序,由策略给出市值排名最小的10只股票作为交易标的,每天盘中实时更新股票市值排名,排名小于10的就调入,大于10的就调出,另外在期货市场买入1手股指期货合约进行对冲,到期交割后重新买入1手新的合约。
portfolil strategy给出的sample都是需要事先指定若干交易合约标的代码才能进行交易,如何能够不事先指定而由策略给出信号后确定交易标的呢?
cross_below = (self.fast_ma0 <= self.slow_ma0 and self,fast_ma1 > self.slow_ma1)
是self.fast_ma1而你的代码是self,fast_ma1,逗号错了。