微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我怎样才能加速这个 Pandas 数据帧以进行循环计算?

如何解决我怎样才能加速这个 Pandas 数据帧以进行循环计算?

我有以下 2018-01-15 17:01:00 到 2020-10-31 09:59:00 每分钟的 BTC 价格数据框,如您所见,这是 1,468,379 行数据,所以我的代码需要优化,否则计算可能需要很长时间。

dfcondensed = df[["Open","Close","Buy","Sell"]]
dfcondensed 

Timestamp              Open       Close     Buy Sell            
2018-01-15 17:01:00 14174.00    14185.25    14185.11    NaN
2018-01-15 17:02:00 14185.11    14185.15    NaN NaN
2018-01-15 17:03:00 14185.25    14157.32    NaN NaN
2018-01-15 17:04:00 14177.52    14184.71    NaN NaN
2018-01-15 17:05:00 14185.03    14185.14    NaN NaN
... ... ... ... ...
2020-10-31 09:55:00 13885.00    13908.36    NaN NaN
2020-10-31 09:56:00 13905.38    13915.81    NaN NaN
2020-10-31 09:57:00 13909.02    13936.00    NaN NaN
2020-10-31 09:58:00 13936.00    13920.78    NaN NaN
2020-10-31 09:59:00 13924.56    13907.85    NaN NaN
1468379 rows × 4 columns

我试图运行的算法是这样的:

PnL = []
    for i in range(dfcondensed.shape[0]):
        if str(dfcondensed['Buy'].isnull().values[i]) == "False":
            for j in range(dfcondensed.shape[0]-i):
                if str(dfcondensed['Sell'].isnull().values[i+j]) == "False":
                    PnL.append( ((dfcondensed["Open"].iloc[i+j+1] - dfcondensed["Open"].iloc[i+1]) / dfcondensed["Open"].iloc[i+1]) * 100 )
                    break

基本上,为了清楚起见,我要做的是评估在“买入/卖出”列中的点买入/卖出的利润/损失。因此,在第一行中,数据框中正在测试的策略表示在 14185.11 买入,这是 2018-01-15 17:02:00 的开盘价,然后算法应该寻找策略告诉它何时卖出并标记这一点向下,然后它应该寻找下一次被告知买入并标记下来的时间,然后寻找下一次卖出并将其标记下来,到最后有超过 7,000 次不同的交易,我想看看每笔交易的利润我可以进行一些分析并改进我的策略。

用上面的代码得到一个PnL列表好像跑了很久,放弃了等待。如何加速算法?

解决方法

找到了更好的方法

function testee(){
    let myPromise = new Promise(
        (resolve,reject) => {
            setTimeout( () => {               
                resolve( 777 );
            },1000);
        }
     );
 
    return myPromise;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。