
Chiến lược giao dịch đảo ngược phá vỡ bằng cách tính toán chỉ số cường độ tuyệt đối của giá và chỉ số MACD, để thực hiện giao dịch đảo ngược phá vỡ trong một xu hướng cụ thể, thuộc chiến lược giao dịch ngắn. Chiến lược này kết hợp nhiều chỉ số để đánh giá xu hướng lớn, xu hướng trung hạn và xu hướng ngắn hạn, theo dõi xu hướng bằng các tín hiệu xác nhận xu hướng đồng bộ và bổ sung cho nhau.
Chiến lược này chủ yếu dựa trên chỉ số sức mạnh tuyệt đối của giá và chỉ số MACD để thực hiện giao dịch đảo ngược đột phá. Đầu tiên, tính toán 9 chu kỳ, 21 chu kỳ và 50 chu kỳ EMA của giá để xác định hướng xu hướng lớn; sau đó tính toán chỉ số sức mạnh tuyệt đối của giá, phản ánh sức mạnh điều chỉnh ngắn hạn; cuối cùng tính toán chỉ số MACD để xác định hướng xu hướng ngắn hạn.
Cụ thể, xu hướng lớn của giống cần đáp ứng 9 ngày EMA cao hơn 21 ngày EMA, 21 ngày EMA cao hơn 50 ngày EMA. Tiêu chuẩn phán quyết điều chỉnh ngắn hạn là chênh lệch chỉ số cường độ tuyệt đối thấp hơn 0, MACDDIFF nhỏ hơn 0. Xu hướng lớn của giống cần đáp ứng 9 ngày EMA thấp hơn 21 ngày EMA, 21 ngày EMA thấp hơn 50 ngày EMA. Tiêu chuẩn phán quyết hồi phục ngắn hạn là chênh lệch chỉ số cường độ tuyệt đối cao hơn 0, MACDDIFF cao hơn 0.
Chiến lược này có những ưu điểm sau:
Chiến lược này cũng có một số rủi ro:
Đối với các rủi ro trên, có thể được cải thiện bằng cách tối ưu hóa các tham số, đánh giá các chỉ số khác nhau của chu kỳ; điều chỉnh các quy tắc giữ vị trí, kiểm soát tổn thất đơn lẻ; kết hợp với nhiều chỉ số để lọc tín hiệu, tăng độ chính xác.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Nói chung, chiến lược giao dịch rút lui là một chiến lược giao dịch ngắn gọn ổn định hơn. Nó kết hợp các phán đoán xu hướng lớn, ngắn và đa, tránh giao dịch sai trong tình huống xung đột. Đồng thời, việc sử dụng các chỉ số kết hợp cũng làm tăng độ chính xác của phán đoá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)