问题描述
我有以下 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;
}