好的,现在我使用df.iterrows()
块循环每分钟并与之前的 Renko 关闭进行比较。然而,这需要很长时间。我一直在想有没有一种方法可以更快地进行矢量化和回测。因为我将对刻度数据进行回测,这意味着数百万行。
下面是我一直在使用的 for 循环。我是新手,所以请原谅我编写的代码中的任何低效率,并以任何可能的方式帮助我。
def trend(box, df, lasttrend, lastrenko):
for rows in df.itertuples():
index = rows.Index
print(index)
df.loc[index, 'renko close'] = lastrenko
if index == 0:
df.loc[index, 'renko close'] = df.loc[index, 'close']
df.loc[index, 'trend'] = 'S'
lasttrend = 'S'
lastrenko = df.loc[index, 'renko close']
print('Trend start: S', lastrenko, '\n-------------------------------------')
continue
if df.loc[index, 'close'] - lastrenko >= box:
if lasttrend == 'R':
if df.loc[index, 'close'] - lastrenko >= 2*box:
df.loc[index, 'renko close'] = lastrenko + (2*box)
df.loc[index, 'deviation'] = abs(df.loc[index, 'close'] - df.loc[index, 'renko close'])
df.loc[index, 'deviation boxes'] = df.loc[index, 'deviation']/box
df.loc[index, 'trend'] = 'G'
if df.loc[index,'deviation boxes'] >= 1:
df.loc[index, 'renko close'] = df.loc[index, 'renko close'] + (math.floor(df.loc[index,'deviation boxes']))*(box)
lasttrend = 'G'
lastrenko = df.loc[index, 'renko close']
print('Trend change: R - G', lastrenko, '\n-------------------------------------')
elif lasttrend == 'G' or lasttrend == 'S':
df.loc[index, 'renko close'] = lastrenko + (box)
df.loc[index, 'deviation'] = abs(df.loc[index, 'close'] - df.loc[index, 'renko close'])
df.loc[index, 'deviation boxes'] = df.loc[index, 'deviation']/box
df.loc[index, 'trend'] = 'G'
if df.loc[index, 'deviation boxes'] >= 1:
df.loc[index, 'renko close'] = df.loc[index, 'renko close'] + (math.floor(df.loc[index, 'deviation boxes']))*(box)
lasttrend = 'G'
lastrenko = df.loc[index, 'renko close']
print('Trend change: G - G', lastrenko, '\n-------------------------------------')
else:
df.loc[index, 'deviation'] = abs(df.loc[index, 'close'] - df.loc[index, 'renko close'])
df.loc[index, 'deviation boxes'] = df.loc[index, 'deviation']/box
df.loc[index, 'trend'] = 'N'
print('Trend change: R - N', lastrenko, '\n-------------------------------------')
elif df.loc[index, 'close'] - lastrenko <= -box:
if lasttrend == 'G':
if df.loc[index, 'close'] - lastrenko <= -2*box:
df.loc[index, 'renko close'] = lastrenko - (2*box)
df.loc[index, 'deviation'] = abs(df.loc[index, 'close'] - df.loc[index, 'renko close'])
df.loc[index, 'deviation boxes'] = df.loc[index, 'deviation']/box
df.loc[index, 'trend'] = 'R'
if df.loc[index,'deviation boxes'] >= 1:
df.loc[index, 'renko close'] = df.loc[index, 'renko close'] - (math.floor(df.loc[index,'deviation boxes']))*(box)
lasttrend = 'R'
lastrenko = df.loc[index, 'renko close']
print('Trend change: G - R', lastrenko, '\n-------------------------------------')
elif lasttrend == 'R' or lasttrend == 'S':
df.loc[index, 'renko close'] = lastrenko - (box)
df.loc[index, 'deviation'] = abs(df.loc[index, 'close'] - df.loc[index, 'renko close'])
df.loc[index, 'deviation boxes'] = df.loc[index, 'deviation']/box
df.loc[index, 'trend'] = 'R'
if df.loc[index,'deviation boxes'] >= 1:
df.loc[index, 'renko close'] = df.loc[index, 'renko close'] - (math.floor(df.loc[index,'deviation boxes']))*(box)
lasttrend = 'R'
lastrenko = df.loc[index, 'renko close']
print('Trend change: R - R', lastrenko, '\n-------------------------------------')
else:
df.loc[index, 'deviation'] = abs(df.loc[index, 'close'] - df.loc[index, 'renko close'])
df.loc[index, 'deviation boxes'] = df.loc[index, 'deviation']/box
df.loc[index, 'trend'] = 'N'
print('Trend change: G - N', lastrenko, '\n-------------------------------------')
else:
df.loc[index, 'renko close'] = lastrenko
df.loc[index, 'deviation'] = abs(df.loc[index, 'close'] - df.loc[index, 'renko close'])
df.loc[index, 'deviation boxes'] = df.loc[index, 'deviation']/box
df.loc[index, 'trend'] = 'N'
print('Trend change: N', lastrenko, '\n-------------------------------------')
return df, lasttrend, lastrenko