我有以下形式的 pandas DataFrame (new_df):
index open high low close buy sell sl_price tp_price
9124 1.12593 1.12690 1.12340 1.12519 0.0 0.0
9125 1.12519 1.12714 1.12401 1.12542 1.0 0.0 1.11289 1.13794
9126 1.12542 1.12551 1.12462 1.12477 0.0 0.0
9127 1.12477 1.12504 1.12390 1.12395 0.0 0.0
9128 1.12395 1.12450 1.12326 1.12392 0.0 0.0
9129 1.12392 1.12554 1.12050 1.12077 0.0 0.0
9130 1.12077 1.12201 1.11085 1.12068 0.0 0.0
9131 1.12068 1.12160 1.11860 1.11957 0.0 0.0
'open' 'high' 'low' 'close' 列都是價格。'buy' 和 'sell' 列包含 0 或 1。'sl_price' 和 'tp_price' 為 nan,除非 'buy' = 1 或 'sell' = 1,否則它們也是價格。
我想遍歷“購買”列,直到看到 1,此時我想記錄關聯的 sl_price 和 tp_price,然后逐行向下,如果我首先看到一個小于的“低”值'sl_price',我想將 -1 附加到一個名為 long_trades 的空白串列中。但是,如果我首先看到一個大于“tp_price”的“高”值,我想將 1 附加到 long_trades 串列中。無論首先滿足這兩個條件中的哪一個,我都想將 1 或 -1 附加到 long_trades 串列,然后讓程式回傳搜索 'buy' = 1,并再次重復該程序。
可以安全地假設這兩個條件(low < sl_price 和 high > tp_price)永遠不會同時滿足(行)。
我希望這是有道理的。希望我在下面的嘗試能夠澄清我正在嘗試做的事情。我想答案將是一些 for/while 回圈的組合,但我無法理解邏輯。
這是我想出的:
long_trades = []
for i in range(len(new_df['buy'])):
trade_on = False
if new_df['buy'][i] == 1:
trade_on = True
sl, tp = new_df['sl_price'][i], new_df['tp_price'][i]
while trade_on == True:
if new_df['low'][i] < sl:
long_trades.append(-1)
trade_on = False
if new_df['high'][i] > tp:
long_trades.append(1)
trade_on = False
但是當我運行這個控制臺時,控制臺永遠運行,long_trades 串列永遠不會填充,我必須停止控制臺中斷。我認為它陷入了無限回圈,但我不知道如何。
謝謝你的時間!
uj5u.com熱心網友回復:
您的代碼卡在 while 回圈中,因為它永遠不會更新i,所以您只是一遍又一遍地檢查同一行。
while trade_on == True:
# code gets stuck here because i isn't updated
if new_df['low'][i] < sl:
long_trades.append(-1)
trade_on = False
if new_df['high'][i] > tp:
long_trades.append(1)
trade_on = False
因此,我們可以像這樣顯式地使用回圈和中斷:
for j in range(i, len(new_df['buy'])):
# I am assuming here you want to go back to the row
# where you first encountered a 1 after this loop
if new_df['low'][j] < sl:
long_trades.append(-1)
break
if new_df['high'][j] > tp:
long_trades.append(1)
break
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/466207.html
