我想计算过去 5 天的 ADR,但我有一个问题,我不知道如何获取这 5 天,因为我“只有”1 分钟的时间范围数据。 所以我不得不把事情搞砸,但无论我怎么尝试 当我与 Tradingview 进行比较时,我从未得到正确的结果 这是代码:
from backtesting import Backtest, Strategy
import pandas as pd
def getADR(highs,lows):
high = highs.max()
low = lows.min()
return high-low
class MyStrategy(Strategy):
def init(self):
pass
def next(self):
high = self.data.High[-1]
open = self.data.Open[-1]
low = self.data.Low[-1]
close = self.data.Close[-1]
# And here I want to check the ADR of the last 5 days. So I have to somehow make 5 daily data out of the 1 minute data
xx = getADR(self.data.High[""" :390? i dont know """],self.data.High[""" :390? i dont know """])
df = pd.read_csv('AAPL_Stock1m.csv',index_col='Timestamp',parse_dates=True)
bt = Backtest(df,MyStrategy,cash=50000)
print(bt.run())
我的索引看起来像这样(缩短) https://pastebin.com/WaDvhGES
我希望有人可以帮助我解决我的问题:)
我尝试查看索引,直到有 5 天的时间,例如[-390:] 然后 [-400] 等,但不知何故,ADR 结果不正确。
ADR = High(max)-Low(min)
backtesting.py 可以解决您的问题:
对于 ATR,您可以使用 TA https://technical-analysis-library-in-python.readthedocs.io/en/latest/ta.html#ta.volatility.average_true_range
示例:
self.atr = self.I(ta.volatility.average_true_range, pd.Series(最高), pd.Series(最低), pd.Series(收盘))
要从 1 分钟中获取 5 分钟数据,请查看 backtesting.py 自己的重采样函数 https://kernc.github.io/backtesting.py/doc/backtesting/lib.html#backtesting.lib.resample_apply
示例:
self.sma = resample_apply('D', SMA, self.data.Close, 10, plot=False)