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

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:

description
因为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的时候不知道怎么得到

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

沪公网安备 31011502017034号

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