
Đây là một chiến lược theo dõi xu hướng ATR động dựa trên sự phá vỡ mức hỗ trợ. Chiến lược này sử dụng hệ thống đường trung bình EMA, chỉ số biến động ATR và khái niệm tiền thông minh (SMC) để nắm bắt xu hướng thị trường. Chiến lược này thực hiện quản lý rủi ro tốt bằng cách tính toán động kích thước vị trí và vị trí dừng lỗ.
Chiến lược được xây dựng dựa trên một số thành phần cốt lõi:
Chiến lược này là một hệ thống theo dõi xu hướng hoàn chỉnh hơn, tăng sự ổn định của giao dịch thông qua quản lý rủi ro hợp lý và xác nhận nhiều tín hiệu. Mặc dù có một số chậm trễ, nhưng nói chung là một hệ thống giao dịch đáng tin cậy.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// TradingView Pine Script strategy for Smart Money Concept (SMC)
//@version=5
strategy("Smart Money Concept Strategy", overlay=true, default_qty_type=strategy.fixed, default_qty_value=100)
// === Input Parameters ===
input_risk_percentage = input.float(1, title="Risk Percentage", step=0.1)
input_atr_length = input.int(14, title="ATR Length")
input_ema_short = input.int(50, title="EMA Short")
input_ema_long = input.int(200, title="EMA Long")
// === Calculations ===
atr = ta.atr(input_atr_length)
ema_short = ta.ema(close, input_ema_short)
ema_long = ta.ema(close, input_ema_long)
// === Utility Functions ===
// Identify Order Blocks
is_order_block(price, direction) =>
((high[1] > high[2] and low[1] > low[2] and direction == 1) or (high[1] < high[2] and low[1] < low[2] and direction == -1))
// Identify Imbalance Zones
is_imbalance() =>
range_high = high[1]
range_low = low[1]
range_high > close and range_low < close
// Calculate Lot Size Based on Risk
calculate_lot_size(stop_loss_points, account_balance) =>
risk_amount = account_balance * (input_risk_percentage / 100)
lot_size = risk_amount / (stop_loss_points * syminfo.pointvalue)
lot_size
// Determine if Market is Consolidating
is_consolidating() =>
(ta.highest(high, 20) - ta.lowest(low, 20)) / atr < 2
// === Visual Enhancements ===
// Plot Order Blocks
// if is_order_block(close, 1)
// line.new(x1=bar_index[1], y1=low[1], x2=bar_index, y2=low[1], color=color.green, width=2, extend=extend.right)
// if is_order_block(close, -1)
// line.new(x1=bar_index[1], y1=high[1], x2=bar_index, y2=high[1], color=color.red, width=2, extend=extend.right)
// Highlight Imbalance Zones
// if is_imbalance()
// box.new(left=bar_index[1], top=high[1], right=bar_index, bottom=low[1], bgcolor=color.new(color.orange, 80))
// === Logic for Trend Confirmation ===
is_bullish_trend = ema_short > ema_long
is_bearish_trend = ema_short < ema_long
// === Entry Logic ===
account_balance = strategy.equity
if not is_consolidating()
if is_bullish_trend
stop_loss = close - atr * 2
take_profit = close + (math.abs(close - (close - atr * 2)) * 3)
stop_loss_points = math.abs(close - stop_loss) / syminfo.pointvalue
lot_size = calculate_lot_size(stop_loss_points, account_balance)
strategy.entry("Buy", strategy.long, qty=lot_size)
strategy.exit("TP/SL", "Buy", stop=stop_loss, limit=take_profit)
if is_bearish_trend
stop_loss = close + atr * 2
take_profit = close - (math.abs(close - (close + atr * 2)) * 3)
stop_loss_points = math.abs(close - stop_loss) / syminfo.pointvalue
lot_size = calculate_lot_size(stop_loss_points, account_balance)
strategy.entry("Sell", strategy.short, qty=lot_size)
strategy.exit("TP/SL", "Sell", stop=stop_loss, limit=take_profit)
// === Plotting Indicators ===
plot(ema_short, color=color.blue, title="EMA 50")
plot(ema_long, color=color.orange, title="EMA 200")
plotshape(series=is_bullish_trend and not is_consolidating(), style=shape.triangleup, location=location.belowbar, color=color.green, text="Buy")
plotshape(series=is_bearish_trend and not is_consolidating(), style=shape.triangledown, location=location.abovebar, color=color.red, text="Sell")