xiaohe wrote:
no_ui脚本是全自动交易,需要无界面交互式操作可以使用scripttrader模块
好的,谢谢老师回复。
各位老师,我目前用notebook 同时多策略模拟实盘,如果想停止其中某个策略,则需要把整个notebook停止了,这样就会停止其他的策略。有什么方法能够在no ui时停止其中某个策略,但是不影响其他策略的呢?谢谢
xiaohe wrote:
2.7.0就移除了market_radar了
嗯嗯,谢谢
请教各位老师:
我使用的是vnpy 2.9.0, 想使用market radar 模块。但是在vnpy的trader.app中没有找到相关模块。
请问在哪里可以找到market radar模块代码?
MTF wrote:
先用DataManager将数据下载到SQLite数据库中,再在回测的过程中使用
感谢!我又看了一下代码,vnpy回测和数据下载是分开的两个步骤,回测的时候会查找数据库是否有储存相应的历史数据。
各位老师,我使用米筐数据在backtesting engine中回测,发现获取历史数据使用了backtesting中的load_bar_data, 然后发现load_bar_data使用的是vnpy_sqlite,请教一下在backtesting engine中是怎么调用米筐数据的?谢谢。
xiaohe wrote:
不知道你自己写的这个backtesting_on_trade具体怎么调用的了。要获取成交信息,策略的on_trade函数就能收到
谢谢回复啦,我发现我用的是米筐RB888合约做的回测,应该是收盘价出现了负数
结果第一次调用on_trade就报错,显示self.pos 和trade_amount都为0
backtesting_on_trade
/ (abs(prev_amount) + trade_amount)
ZeroDivisionError: float division by zero
def backtesting_on_trade(self, trade:TradeData):
trade_amount = trade.volume
if trade.direction.value == '多':
prev_amount = self.pos - trade_amount
else:
prev_amount = self.pos + trade_amount
print(prev_amount, trade_amount)
self.avg_holding_price = (abs(prev_amount)*self.avg_holding_price + trade_amount*trade.price)\
/ (abs(prev_amount) + trade_amount)
self.put_event()
我在用BacktestingEngine时,每次都发送停止单,并且希望每次调用on_trade时把trade.volume记录下来,结果发现volume为0,这个可能是什么原因呢?
郭易燔 wrote:
因为vnpy_ctabacktester中的BacktestingEngine就是从vnpy_ctastrategy导入的
明白了!谢谢您的回复
然后发现回测是调用的还是vnpy_ctastrategy中的BacktestingEngine,挺奇怪的
`
from vnpy_ctabacktester import BacktesterEngine
from vnpy.event import EventEngine
from vnpy.trader.setting import SETTINGS
from vnpy.trader.engine import MainEngine
from vnpy_ctp import CtpGateway
from vnpy_ctastrategy.base import EVENT_CTA_LOG
event_engine = EventEngine()
main_engine = MainEngine(event_engine)
main_engine.add_gateway(CtpGateway)
cta_engine = BacktesterEngine(main_engine, event_engine)
main_engine.write_log("主引擎创建成功")
class_name = "AtrRsiStrategy"
strategy_name = "atr_rb"
vt_symbol = "RB888.SHFE"
start=datetime(2019, 3, 22)
end=datetime(2022, 3, 21)
interval='1m'
rate=0.3/10000
slippage=0.2
size = 10
pricetick=0.2
capital=1_000_000
strategy_setting = {
"atr_length": 22,
"atr_ma_length": 10,
'rsi_length':5,
'rsi_entry':16,
'trailing_percent':0.8,
'fixed_size':1
}
log_engine = main_engine.get_engine("log")
event_engine.register(EVENT_CTA_LOG, log_engine.process_log_event)
main_engine.write_log("注册日志事件监听")
cta_engine.init_engine()
main_engine.write_log("CTA策略初始化完成")
cta_engine.add_strategy(class_name, strategy_name, vt_symbol, strategy_setting)
cta_engine.run_backtesting(class_name, vt_symbol, interval, start, end, rate, slippage, size, pricetick, capital, True, {})
`
使用vnpy回测的时候,我用的是vnpy_ctabacktester 中的BacktesterEngine,但为什么调用的时候仍然会使用vnpy_ctastrategy中的BacktestingEngine?
代码如下:
xiaohe wrote:
没有这个功能了,有需要的话可以自己计算
好的,感谢您的回复
如果是实盘,我猜测应该和offsetconverter有关,但backtest的时候不知道怎么得到