
Chiến lược này là một hệ thống giao dịch theo dõi xu hướng và động lực dựa trên nhiều chỉ số kỹ thuật. Nó chủ yếu kết hợp các chỉ số xu hướng trung bình (ADX), chỉ số tương đối mạnh (RSI) và sóng thực (ATR) để xác định các cơ hội giao dịch tiềm năng và sử dụng ATR để thiết lập giá mua và dừng động. Chiến lược này đặc biệt phù hợp với giao dịch quyền chọn trong chu kỳ thời gian 1 phút, để tăng tỷ lệ thành công của giao dịch thông qua điều kiện nhập cảnh và quản lý rủi ro nghiêm ngặt.
Logic cốt lõi của chiến lược bao gồm các thành phần chính sau:
Chiến lược này xây dựng một hệ thống giao dịch hoàn chỉnh bằng cách sử dụng nhiều chỉ số kỹ thuật tổng hợp. Ưu điểm của nó là kết hợp xu hướng và phân tích động lực và sử dụng phương pháp quản lý rủi ro động. Mặc dù có một số rủi ro, nhưng có thể đạt được hiệu suất ổn định trong giao dịch thực tế thông qua tối ưu hóa tham số và các biện pháp kiểm soát rủi ro hợp lý.
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SPcuttack
//@version=6
strategy("ADX & RSI Strategy with ATR Targets", overlay=true)
// Input parameters
adxLength = input.int(14, title="ADX Length")
adxSmoothing = input.int(14, title="ADX Smoothing")
rsiLength = input.int(14, title="RSI Length")
rsiSmaLength = input.int(20, title="RSI SMA Length")
atrLength = input.int(14, title="ATR Length")
atrMultiplierTarget = input.float(2.5, title="ATR Multiplier for Target")
atrMultiplierStop = input.float(1.5, title="ATR Multiplier for Stop Loss")
// ADX and DMI calculations
[adx, plusDI, minusDI] = ta.dmi(adxLength, adxSmoothing)
// RSI calculations
rsi = ta.rsi(close, rsiLength)
rsiSma = ta.sma(rsi, rsiSmaLength)
// ATR calculation
atr = ta.atr(atrLength)
// Slope calculations (difference from the previous value)
adxSlope = adx - adx[1]
rsiSlope = rsi - rsi[1]
// Entry conditions
adxCondition = adx > 18 and plusDI > minusDI and adxSlope > 0
rsiCondition = rsi > rsiSma and rsiSlope > 0
rsiCross60 = ta.crossover(rsi, 60)
// Global variable for long entry
var bool longEntry = false
if (adxCondition and rsiCondition and rsiCross60)
longEntry := true
else
longEntry := false
// Variables for target and stop loss levels
var float entryPrice = na
var float targetLevel = na
var float stopLossLevel = na
// Strategy actions
if (longEntry)
entryPrice := close
targetLevel := entryPrice + atr * atrMultiplierTarget
stopLossLevel := entryPrice - atr * atrMultiplierStop
strategy.entry("Long", strategy.long)
if (strategy.position_size > 0)
if (close >= targetLevel)
strategy.close("Long", comment="Tgt Hit")
if (close <= stopLossLevel)
strategy.close("Long", comment="SL Hit")
// Ensure lines plot on the chart body
targetLine = strategy.position_size > 0 ? targetLevel : na
stopLossLine = strategy.position_size > 0 ? stopLossLevel : na
plot(targetLine, title="Target Level", color=color.green, linewidth=2, offset=0)
plot(stopLossLine, title="Stop Loss Level", color=color.red, linewidth=2, offset=0)
// Add entry price for reference
plot(strategy.position_size > 0 ? entryPrice : na, title="Entry Price", color=color.blue, linewidth=1, style=plot.style_cross, offset=0)