我正在 Pandas 数据框上对股票市场上的一些交易策略进行一些回溯测试,我想设置一个距离输入价格 1% 的追踪止损。如果股价上涨了 5%,那么追踪止损也会上涨 5%。如果股价下跌,追踪止损不会改变。 ( https://www.investopedia.com/terms/t/trailingstop.asp )

我有一张表格,它显示了我的入场信号,如果价格低于追踪止损价格,则退出列将显示值 1,这意味着交易已退出。

这是我到目前为止的表:

date           price      entry_signal
30/06/2018     95              0
01/07/2018     100             1
02/07/2018     103             0
03/07/2018     105             0
04/07/2018     104.50          0
05/07/2018     101             0

我想有一栏显示每个日期的追踪止损是什么。当 enter_signal = 1 时,追踪止损首先设置为 01/07/2018 价格的 99%,此时交易在该日期执行。

当价格上涨 y% 时,追踪止损也会上涨 y%。但是,如果价格下跌,追踪止损将不会从其最后一个值改变。

当价格
如果价格也下跌 y%,我目前无法让追踪止损下跌 y%....

期望的表结果:
date           price      trailing stop loss      entry_signal      exit_signal
30/06/2018     95              NULL                     0                0
01/07/2018     100             99                       1                0
02/07/2018     103             101.97                   0                0
03/07/2018     105             103.95                   0                0
04/07/2018     104.50          103.95                   0                0
05/07/2018     101             103.95                   0                1

我得到的表:
date           price      trailing stop loss      entry_signal
30/06/2018     95              NULL                     0
01/07/2018     100             99                       1
02/07/2018     103             101.97                   0
03/07/2018     105             103.95                   0
04/07/2018     104.50          103.455                  0
05/07/2018     101             99.99                    0

最佳答案

困难的问题涉及 cummaxpct_change + clip_lower + cumprod

s=df.loc[df.entry_signal.cummax().astype(bool),'price'].pct_change().add(1).fillna(1)

df['trailing stop loss']=s.clip_lower(1).cumprod()*99
df['exit_signal']=(df['trailing stop loss']>df['price']).astype(int)
df
Out[114]:
         date  price  entry_signal  trailing stop loss  exit_signal
0  30/06/2018   95.0             0                 NaN            0
1  01/07/2018  100.0             1               99.00            0
2  02/07/2018  103.0             0              101.97            0
3  03/07/2018  105.0             0              103.95            0
4  04/07/2018  104.5             0              103.95            0
5  05/07/2018  101.0             0              103.95            1

关于python - Pandas 数据框上的追踪止损,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56861966/

10-11 21:37