Chiến lược giao dịch quay trở lại đột phá thực hiện giao dịch quay trở lại đột phá dưới các xu hướng cụ thể bằng cách tính toán chỉ số sức mạnh tuyệt đối và chỉ số MACD của giá. Nó thuộc về các chiến lược giao dịch ngắn hạn. Chiến lược này tích hợp nhiều chỉ số để đánh giá xu hướng chính, xu hướng trung hạn và xu hướng ngắn hạn. Nó tiến hành các giao dịch theo dõi xu hướng thông qua các tín hiệu xác nhận phù hợp với xu hướng và bổ sung cho chỉ số.
Chiến lược này chủ yếu dựa trên chỉ số sức mạnh tuyệt đối và chỉ số MACD của giá để thực hiện giao dịch gọi lại đột phá. Đầu tiên, nó tính toán các EMA giá 9 giai đoạn, 21 giai đoạn và 50 giai đoạn để đánh giá hướng xu hướng chính; sau đó nó tính toán chỉ số sức mạnh tuyệt đối của giá để phản ánh sức mạnh của các điều chỉnh ngắn hạn; cuối cùng nó tính toán chỉ số MACD để đánh giá hướng xu hướng ngắn hạn. Nó mua khi xu hướng chính tăng và có điều chỉnh ngắn hạn; nó bán khi xu hướng chính giảm và có sự phục hồi ngắn hạn.
Cụ thể, xu hướng tăng lớn của biến thể đòi hỏi EMA 9 ngày phải cao hơn EMA 21 ngày và EMA 21 ngày phải cao hơn EMA 50 ngày. Các tiêu chí để đánh giá điều chỉnh ngắn hạn là sự khác biệt của chỉ số sức mạnh tuyệt đối nhỏ hơn 0 và MACDDIFF nhỏ hơn 0.
Chiến lược có những lợi thế sau:
Chiến lược này cũng có một số rủi ro:
Để đáp ứng các rủi ro trên, các phương pháp như tối ưu hóa các tham số, đánh giá các chỉ số của các chu kỳ khác nhau, điều chỉnh các quy tắc vị trí để kiểm soát tổn thất đơn lẻ, kết hợp nhiều chỉ số để lọc tín hiệu và cải thiện độ chính xác có thể được sử dụng để cải thiện chiến lược.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Tóm lại, chiến lược giao dịch quay trở lại đột phá thường là một chiến lược giao dịch ngắn hạn tương đối ổn định. Nó kết hợp các đánh giá xu hướng nhiều khung thời gian để tránh các giao dịch sai trong các thị trường dao động. Đồng thời, việc sử dụng kết hợp các chỉ số cũng cải thiện độ chính xác của các đánh giá. Thông qua kiểm tra và tối ưu hóa tiếp theo, chiến lược này có thể trở thành một chiến lược ổn định đáng để giữ trong dài hạn.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Divergence Scalper [30MIN]", overlay=true , commission_value=0.04 ) message_long_entry = input("long entry message") message_long_exit = input("long exit message") message_short_entry = input("short entry message") message_short_exit = input("short exit message") //3x ema out9 = ta.ema(close,9) out21 = ta.ema(close,21) out50 = ta.ema(close,50) //abs absolute_str_formula( ) => top=0.0 bottom=0.0 if(close>close[1]) top:= nz(top[1])+(close/close[1]) else top:=nz(top[1]) if(close<=close[1]) bottom:= nz(bottom[1])+(close[1]/close) else bottom:=nz(bottom[1]) if (top+bottom/2>=0) 1-1/(1+(top/2)/(bottom/2)) abs_partial=absolute_str_formula() abs_final = abs_partial - ta.sma(abs_partial,50) //macd fast_length = input(title="Fast Length", defval=23) slow_length = input(title="Slow Length", defval=11) src = input(title="Source", defval=open) signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 6) sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"]) sma_signal = input.string(title="Signal Line MA Type", defval="SMA", options=["SMA", "EMA"]) // Calculating fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length) slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length) hist = macd - signal long= abs_final > 0 and hist <0 and out9<out21 and out21<out50 short = abs_final <0 and hist >0 and out9>out21 and out21>out50 long_exit = abs_final <0 and hist >0 and out9>out21 and out21>out50 short_exit = abs_final > 0 and hist <0 and out9<out21 and out21<out50 strategy.entry("long", strategy.long, when = long and barstate.isconfirmed, alert_message = message_long_entry) strategy.entry("short", strategy.short, when = short and barstate.isconfirmed, alert_message = message_short_entry) strategy.close("long", when = long_exit and barstate.isconfirmed, alert_message = message_long_exit) strategy.close("short", when = short_exit and barstate.isconfirmed, alert_message = message_short_exit)