所以我在 Google Bigquery 上对股票市场的一些交易策略进行了一些回测,我想设置一个与输入价格相差 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 时,追踪止损首先设置为 2018 年 1 月 7 日价格的 99%,交易在该日期执行。
当价格上涨 y% 时,追踪止损也会上涨 y%。但是,如果价格下跌,追踪止损将不会改变其最后的值。
当价格 <= 追踪止损时,交易退出并且会有一个 exit_signal 为 1...
如果价格也下跌 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
这是我的原始代码:
SELECT
date, price, entry_signal,
GREATEST(trailing_stop_loss, 0.99 * price) AS trailing_stop_loss
FROM (
SELECT
date, price, entry_signal,
LAST_VALUE(trailing_stop_loss IGNORE NULLS) OVER (ORDER BY DATE) AS trailing_stop_loss
FROM (
SELECT
date, price, entry_signal,
IF(entry_signal * 0.99 * price > 0, 0.99 * price, NULL) AS trailing_stop_loss
FROM table
)
)
我得到的表:
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