Đây là một chiến lược giao dịch toàn diện kết hợp nhiều đường trung bình động, theo xu hướng, đột phá cấu trúc và chỉ số động lực. Chiến lược xác định tín hiệu giao dịch bằng cách phân tích xu hướng trên nhiều khung thời gian trong khi kết hợp đột phá cấu trúc giá và mục thu hồi. Nó sử dụng các mục tiêu dừng lỗ và lợi nhuận cố định để quản lý rủi ro và sử dụng nhiều cơ chế xác thực để tăng độ chính xác giao dịch.
Chiến lược sử dụng ba đường trung bình động nhân tố (EMA25, EMA50 và EMA200) để xác định xu hướng thị trường. Xu hướng tăng được xác định khi giá trên EMA200 và EMA200 đang nghiêng lên; ngược lại chỉ ra xu hướng giảm. Sau khi xác định hướng xu hướng, chiến lược tìm kiếm sự rút lui của giá đến EMA25 hoặc EMA50. Ngoài ra, chiến lược yêu cầu xác nhận mức cao hoặc thấp gần đây và vị trí của giá đóng so với giá mở để xác minh hướng động lực. Chỉ số RSI phục vụ như một bộ lọc bổ sung, yêu cầu RSI trên 50 cho tín hiệu mua và dưới 50 cho tín hiệu bán.
Đây là một chiến lược giao dịch toàn diện được thiết kế tốt, cân bằng hiệu quả các cơ hội giao dịch và kiểm soát rủi ro thông qua việc sử dụng phối hợp nhiều chỉ số kỹ thuật. Sức mạnh cốt lõi của chiến lược nằm trong cơ chế xác thực đa nghiêm ngặt, giúp cải thiện tỷ lệ thành công giao dịch. Mặc dù có những lĩnh vực tối ưu hóa, nói chung, đây là một khuôn khổ chiến lược đáng để khám phá.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-27 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Custom Buy/Sell Strategy", overlay=true) // Input parameters ema25 = ta.ema(close, 25) ema50 = ta.ema(close, 50) ema200 = ta.ema(close, 200) rsi = ta.rsi(close, 14) sl_pips = 10 tp_pips = 15 // Convert pips to price units sl_price_units = sl_pips * syminfo.pointvalue tp_price_units = tp_pips * syminfo.pointvalue // Define conditions for buy and sell signals uptrend_condition = ema200 < close and ta.rising(ema200, 1) downtrend_condition = ema200 > close and ta.falling(ema200, 1) pullback_to_ema25 = low <= ema25 pullback_to_ema50 = low <= ema50 pullback_condition = pullback_to_ema25 or pullback_to_ema50 break_of_structure = high > ta.highest(high, 5)[1] candle_imbalance = close > open buy_condition = uptrend_condition and pullback_condition and rsi > 50 and break_of_structure and candle_imbalance pullback_to_ema25_sell = high >= ema25 pullback_to_ema50_sell = high >= ema50 pullback_condition_sell = pullback_to_ema25_sell or pullback_to_ema50_sell break_of_structure_sell = low < ta.lowest(low, 5)[1] candle_imbalance_sell = close < open sell_condition = downtrend_condition and pullback_condition_sell and rsi < 50 and break_of_structure_sell and candle_imbalance_sell // Plot signals on the chart plotshape(series=buy_condition, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", size=size.large) plotshape(series=sell_condition, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", size=size.large) // Calculate stop loss and take profit levels for buy signals var float buy_sl = na var float buy_tp = na if buy_condition and strategy.position_size == 0 buy_sl := close - sl_price_units buy_tp := close + tp_price_units strategy.entry("Buy", strategy.long) strategy.exit("TP/SL Buy", from_entry="Buy", limit=buy_tp, stop=buy_sl) label.new(bar_index, high, text="Entry: " + str.tostring(close) + "\nSL: " + str.tostring(buy_sl) + "\nTP: " + str.tostring(buy_tp), style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small) // Calculate stop loss and take profit levels for sell signals var float sell_sl = na var float sell_tp = na if sell_condition and strategy.position_size == 0 sell_sl := close + sl_price_units sell_tp := close - tp_price_units strategy.entry("Sell", strategy.short) strategy.exit("TP/SL Sell", from_entry="Sell", limit=sell_tp, stop=sell_sl) label.new(bar_index, low, text="Entry: " + str.tostring(close) + "\nSL: " + str.tostring(sell_sl) + "\nTP: " + str.tostring(sell_tp), style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small) // // Plot stop loss and take profit levels for buy signals // if not na(buy_sl) // line.new(x1=bar_index, y1=buy_sl, x2=bar_index + 1, y2=buy_sl, color=color.red, width=1) // if not na(buy_tp) // line.new(x1=bar_index, y1=buy_tp, x2=bar_index + 1, y2=buy_tp, color=color.green, width=1) // // Plot stop loss and take profit levels for sell signals // if not na(sell_sl) // line.new(x1=bar_index, y1=sell_sl, x2=bar_index + 1, y2=sell_sl, color=color.red, width=1) // if not na(sell_tp) // line.new(x1=bar_index, y1=sell_tp, x2=bar_index + 1, y2=sell_tp, color=color.green, width=1)