如何解决如何根据条件创建固定的新 numpy 数组值 - 股票价格
input_array =
([[13,93,47,857],[16,91,55,800],[18,105,85,821],[17,106,89,890],[19,60,961],[20,41,988],[21,107,45,999],])
take_profit =
([[15,90,960]])
stop_loss =
([[10,92,750]])
数组中的每一列都是个股的价格,当止盈和止损之间存在价格时,交易打开,价值保持不变。如果价格高于或等于止盈,则交易状态为“TP”,当价格低于或等于 stop_loss 时,该栏其余部分的状态为“SL”。
desired_output_array =
([[13,[TP,SL,TP],])
谁能帮我解决这个问题?该数组有 3000 行长。我的方法如下:
# My approach:
for value in input_array:
if value > take_profit:
value == "TP"
if value < stop_loss:
value == "SL"
else:
value == value
这不起作用,所以尝试了
output_array = np.where(input_array> take_profit,"TP",input_array)
这样做的问题是,输出将最初更改为“TP”,但随后会在“SL”和价格回升时之间的数字之间恢复。一旦价格改变状态,交易就会关闭,所以对于列中下降的其余值,它应该保持固定直到结束!
解决方法
让我们试试 np.select
,使用 pandas
和 mask
传递给 fillna
cond1 = (input_array > take_profit)
cond2 = (input_array < stop_loss)
s = pd.DataFrame(np.select([cond1,cond2],['TP',"SL"],default=input_array))
out_putary = s.mask(s.isin(['TP',"SL"]).cumsum()>0).fillna(s.where(s.isin(['TP',"SL"]).cumsum()>0).bfill().iloc[0]).values
out_putary
Out[65]:
array([['13','93','47','857'],'SL','55','800'],'85','821'],'89','890'],'60','TP'],'TP']],dtype=object)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。