有没有办法在 python 中向量化 Renko 计算?

问题描述

好的,现在我分块使用 df.iterrows() 来循环每分钟并与之前的 Renko 收盘价进行比较。但是,这需要很长时间。我一直在想有没有一种方法可以更快地进行矢量化和回测。因为我将对刻度数据进行回测,这意味着数百万行。

The raw csv

Renko csv

下面是我一直在使用的 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 (将#修改为@)