我正在尝试使用python进行算法交易,以进行回溯测试。
首先我下载了一些滴答数据,然后将它们重新采样为10秒OHLC数据,然后使用ATR指标作为定义函数:
df = pd.read_csv( 'gbpusd jan17.csv',
names = ['instrument', 'time', 'bid', 'ask'],
index_col = 1,
parse_dates = True,
nrows = 1000
)
df = df['ask'].resample('10s').ohlc()
n = list( range( 0, len( df.index ) ) ) # I changed index because my indicator
# doesn't work on datetime index
df.index = n
def ATR(df, n): #________________________# Average True Range
i = 0
TR_l = [0]
while i < df.index[-1]:
TR = max( df.get_value( i + 1, 'high' ),
df.get_value( i, 'close' )
)
- min( df.get_value( i + 1, 'low' ),
df.get_value( i, 'close' )
)
TR_l.append( TR )
i = i + 1
TR_s = pd.Series( TR_l )
ATR = pd.Series( TR_s.rolling( window = 12,
min_periods = 12,
center = False
).mean(),
name = 'ATR_' + str(n)
)
df = df.join( ATR )
return df
Outputs: head()
instrument bid ask
time
2017-01-02 00:00:01.105 GBP/USD 1.23399 1.23551
2017-01-02 00:00:01.561 GBP/USD 1.23399 1.23551
2017-01-02 00:00:05.122 GBP/USD 1.23399 1.23551
2017-01-02 00:00:05.525 GBP/USD 1.23365 1.23577
2017-01-02 00:00:06.139 GBP/USD 1.23365 1.23577
open high low close ATR_8
\
1.23562 1.23562 1.23562 1.23562 0.000120 0.596718
1.23562 1.23575 1.23548 1.23548 0.000121 0.619445
1.23548 1.23548 1.23541 1.23541 0.000122 0.645532
1.23541 1.23541 1.23541 1.23541 0.000117 0.674178
1.23541 1.23548 1.23541 1.23548 0.000123 0.687229
但是,当我连接到Oanda API以获得流速时,问题就出现了,ATR计算的while循环似乎不起作用,首先我认为,由于没有足够的数据行开始,它不起作用,所以我在某些滴答之后开始进行ATR计算,但仍无效。
任何人都可以使用 while
循环,我该如何更改流媒体数据?