问题描述
好的,现在我分块使用 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'] + (math.floor(df.loc[index,'deviation Boxes']))*(Box)
lasttrend = 'G'
lastrenko = df.loc[index,'renko close']
print('Trend change: R - G','\n-------------------------------------')
elif lasttrend == 'G' or lasttrend == 'S':
df.loc[index,'renko close'] = lastrenko + (Box)
df.loc[index,'renko close'])
df.loc[index,'deviation']/Box
df.loc[index,'trend'] = 'G'
if df.loc[index,'deviation Boxes'] >= 1:
df.loc[index,'deviation Boxes']))*(Box)
lasttrend = 'G'
lastrenko = df.loc[index,'renko close']
print('Trend change: G - G','\n-------------------------------------')
else:
df.loc[index,'trend'] = 'N'
print('Trend change: R - N','\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,'trend'] = 'R'
if 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','\n-------------------------------------')
elif lasttrend == 'R' or lasttrend == 'S':
df.loc[index,'renko close'] = lastrenko - (Box)
df.loc[index,'trend'] = 'R'
if df.loc[index,'deviation Boxes']))*(Box)
lasttrend = 'R'
lastrenko = df.loc[index,'renko close']
print('Trend change: R - R','trend'] = 'N'
print('Trend change: G - N','\n-------------------------------------')
else:
df.loc[index,'renko close'] = lastrenko
df.loc[index,'renko close'])
df.loc[index,'deviation']/Box
df.loc[index,'trend'] = 'N'
print('Trend change: N','\n-------------------------------------')
return df,lastrenko
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)