好的,现在我使用块中的df.iterrows()
循环每一分钟,并与之前的Renko close进行比较。然而,这需要很长时间。我一直在想,有没有一种方法可以更快地进行矢量化和回溯测试。因为我将对刻度数据进行回溯测试,这意味着数百万行
下面是我一直在使用的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
目前没有回答
相关问题 更多 >
编程相关推荐