Strategi Pelacakan Momentum dan Tren

Penulis:ChaoZhang, Tanggal: 2024-02-22 17:27:18
Tag:

img

Gambaran umum

Ide inti dari strategi ini adalah untuk menggabungkan indikator Super Trend dan Indeks Gerakan Arah Rata-rata (ADX) untuk menilai dan melacak tren. Indikator Super Trend digunakan untuk mengidentifikasi arah tren harga saat ini, dan ADX digunakan untuk menentukan kekuatan tren. Perdagangan hanya dilakukan dalam kondisi tren yang kuat. Selain itu, strategi ini juga menggunakan warna tubuh lilin, volume perdagangan dan indikator lainnya untuk konfirmasi, membentuk seperangkat aturan perdagangan yang relatif lengkap.

Secara keseluruhan, strategi ini termasuk dalam strategi pelacakan tren, yang bertujuan untuk menangkap tren jangka menengah dan panjang yang jelas sambil menghindari gangguan dari periode konsolidasi dan osilasi.

Prinsip Strategi

  1. Gunakan indikator Super Trend untuk menentukan arah tren harga. Ketika harga berada di atas Super Trend, itu adalah sinyal panjang, dan ketika berada di bawah Super Trend, itu adalah sinyal pendek.

  2. Gunakan ADX untuk menilai kekuatan tren. Sinyal perdagangan hanya dihasilkan ketika ADX lebih besar dari ambang batas, sehingga periode dengan konsolidasi yang tidak jelas dapat disaring.

  3. Warna tubuh candlestick digunakan untuk menilai apakah saat ini dalam pola naik atau turun, dikombinasikan dengan indikator Super Trend untuk membentuk konfirmasi.

  4. Peningkatan volume perdagangan berfungsi sebagai sinyal konfirmasi. Posisi hanya ditetapkan ketika volume perdagangan meningkat.

  5. Atur stop loss dan ambil keuntungan untuk mengunci keuntungan dan mengendalikan risiko.

  6. Tutup semua posisi sebelum akhir hari.

Keuntungan dari Strategi

  1. Melacak tren jangka menengah dan panjang yang jelas, menghindari osilasi, dan mencapai profitabilitas tinggi.

  2. Strategi ini memiliki beberapa parameter dan mudah dipahami dan diterapkan.

  3. Risiko dikendalikan dengan baik dengan stop loss dan mengambil keuntungan di tempat.

  4. Penggunaan beberapa indikator untuk konfirmasi dapat mengurangi sinyal palsu.

Risiko dari Strategi

  1. Dapat mengalami kerugian besar selama koreksi besar di seluruh pasar.

  2. Saham individu dapat mengalami pembalikan tajam karena perubahan fundamental.

  3. Black Swan peristiwa dari perubahan kebijakan utama.

Solusi:

  1. Sesuai menyesuaikan parameter ADX untuk memastikan perdagangan hanya di bawah tren yang kuat.

  2. Meningkatkan persentase stop loss untuk mengontrol jumlah kerugian tunggal.

  3. Memantau kebijakan dan peristiwa penting, secara aktif memotong kerugian jika perlu.

Arahan untuk Optimalisasi

  1. Uji kombinasi yang berbeda dari parameter Super Trend untuk menemukan yang menghasilkan sinyal yang paling stabil.

  2. Uji kombinasi parameter ADX yang berbeda untuk menentukan pengaturan yang optimal.

  3. Tambahkan indikator konfirmasi lainnya seperti volatilitas dan Bollinger Bands untuk mengurangi sinyal palsu.

  4. Gabungkan dengan strategi breakout untuk memotong kerugian secara tepat waktu ketika tren rusak.

Ringkasan

Logika keseluruhan dari strategi ini jelas, menggunakan Super Trend untuk menilai arah tren harga, ADX untuk menentukan kekuatan tren, dan trading di sepanjang tren yang kuat. Stop loss dan take profit diatur untuk mengendalikan risiko. Strategi ini memiliki beberapa parameter dan mudah dioptimalkan.


/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Intraday Strategy Template

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © vikris

//@version=4
strategy("[VJ]Hulk Smash Intra", overlay=true, calc_on_every_tick = false, pyramiding=0,default_qty_type=strategy.percent_of_equity, default_qty_value=100,initial_capital=2000)

// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01    
     
var float i_multiplier = input(title = "ST Multiplier", type = input.float, 
     defval = 2, step = 0.1, confirm=true)

var int i_atrPeriod = input(title = "ST ATR Period", type = input.integer, 
     defval = 10, confirm=true)     
     
len = input(title="ADX Length", type=input.integer, defval=14)
th = input(title="ADX Threshold", type=input.integer, defval=20)
adxval = input(title="ADX Momemtum Value", type=input.integer, defval=25)     



// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0

// ********** Supporting functions - End **********


// ********** Strategy - Start **********

[superTrend, dir] = supertrend(i_multiplier, i_atrPeriod)

colResistance = dir == 1 and dir == dir[1] ? color.new(color.red, 0) : color.new(color.red, 100)
colSupport = dir == -1 and dir == dir[1] ? color.new(color.green, 0) : color.new(color.green, 100)


// Super Trend Long/short condition
stlong = close > superTrend
stshort = close < superTrend



// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)

//Vol Confirmation
vol = volume > volume[1]


//Candles colors
greenCandle = (close > open)
redCandle = (close < open)

// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)

// Trade only if intraday session is active




TrueRange = max(max(high - low, abs(high - nz(close[1]))), abs(low - nz(close[1])))
DirectionalMovementPlus = high - nz(high[1]) > nz(low[1]) - low ? max(high - nz(high[1]), 0) : 0
DirectionalMovementMinus = nz(low[1]) - low > high - nz(high[1]) ? max(nz(low[1]) - low, 0) : 0


SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - nz(SmoothedTrueRange[1]) / len + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - 
   nz(SmoothedDirectionalMovementPlus[1]) / len + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - 
   nz(SmoothedDirectionalMovementMinus[1]) / len + DirectionalMovementMinus

DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus - DIMinus) / (DIPlus + DIMinus) * 100
ADX = sma(DX, len)

// a = plot(DIPlus, color=color.green, title="DI+", transp=100)
// b = plot(DIMinus, color=color.red, title="DI-", transp=100)

//Final Long/Short Condition
longCondition = stlong and redCandle and vol and ADX>adxval
shortCondition = stshort and greenCandle and vol and ADX >adxval



//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("TP/SL", "My Long Entry Id",stop=stop_level, limit=profit_level)
    


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
    
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********

Lebih banyak