大佬们
我看cta的例子里面是在def on_init(self):里面self.load_bar(10) ,即获取十天的bar数据
我现想在def on_bar(self, bar: BarData):函数中,向前取2个月的数据(1分钟bardata),这时候我应该用哪个函数api来获取呢?
并同时将这两个月的1分钟bardata转为dataframe形式使用,请教一下各位大佬!
大佬们
我看cta的例子里面是在def on_init(self):里面self.load_bar(10) ,即获取十天的bar数据
我现想在def on_bar(self, bar: BarData):函数中,向前取2个月的数据(1分钟bardata),这时候我应该用哪个函数api来获取呢?
并同时将这两个月的1分钟bardata转为dataframe形式使用,请教一下各位大佬!
最近问题比较多,主要就是怕自己实现的方法走弯路,低效,
所以才想跟大佬们请教一下是否是简洁有效的写法,不浪费性能,感谢
关于在策略里读取历史数据并生成dataframe的方法我写了一个初稿,请各位大佬斧正
def load_select_bar_data_from_mongodb(self,symbol: str,
exchange: Exchange,
interval: Interval,
start: datetime,
end: datetime,
collection_name: str = None):
df = pd.DataFrame(database_manager.load_bar_data(symbol, exchange, interval, start, end, collection_name))
df = df.rename(index=str, columns={"open_price": "open",
"high_price": "high",
"low_price": "low",
"close_price": "close",
})
data_select_columns = ["open", "high", "low", "close", "open_interest", "volume"]
df = df.set_index('datetime')[data_select_columns]
print(df)
return df
我是准备在on_bar触发的时候调用这个函数取得想要的起止日期的dataframe
有如下两方面具体问题请请教大佬
1这个函数方法是否有必要写到比如vnpy-2.1.7\vnpy\app\cta_strategy\strategies\atr_rsi_strategy.py策略文件中 ,并设置为一个策略类的属性方法?还是说我放在类外面独立为一个单独的函数就够了?
2回测中反复从MongoDB中读取数据生成dataframe是否是一种低效的方式?有办法改进么,在同实盘保持接轨的思路下(策略是1分钟级别)?
2020-11-29 23:26:59.647871 开始加载历史数据
2020-11-29 23:27:00.047876 加载进度:########## [100%]
2020-11-29 23:27:00.047876 历史数据加载完成,数据量:4560
2020-11-29 23:27:00.047876 触发异常,回测终止
2020-11-29 23:27:00.051934 Traceback (most recent call last):
File "D:\vnpy-2.1.7\vnpy\app\cta_strategy\backtesting.py", line 344, in run_backtesting
self.callback(data)
File "D:\vnpy-2.1.7\vnpy\app\cta_strategy\strategies\atr_rsi_strategy.py", line 126, in on_bar
self.load_select_bar_data_from_mongodb(self.vt_symbol,self.exchange,self.interval,(bar.datetime-timedelta(days=3)),bar.datetime,self.collection_name)
AttributeError: 'AtrRsiStrategy' object has no attribute 'exchange'
这个代码写的还不够严禁 部分属性有问题
这些数据在am里取应该就可以了吧。比如am默认size=100,am.close就能输出close_price的array(最新100个值)
策略初始化时 有self.am = ArrayManager() 你可以在am里面定义一个np.ndarray转pandas.dataframe的函数 在策略on_bar里即可am.调用
stan_133652 wrote:
策略初始化时 有self.am = ArrayManager() 你可以在am里面定义一个np.ndarray转pandas.dataframe的函数 在策略on_bar里即可am.调用
请问如何找到ArrayManager()的代码细节呢?(在哪个文件夹里面呀?)。我有类似需求,需要再onbar()里面直接调出open high low close 还有volume 的价格,并且每个是一个numpy array。应该如何做呢?
代码在vnpy.trader.utility下
am默认的size是100,可以根据自己需要进行调整