Memantau Momentum dan Strategi Trend

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

img

Ringkasan

Idea utama strategi ini adalah untuk menggabungkan penunjuk Super Trend dan Indeks Pergerakan Arah Purata (ADX) untuk menilai dan mengesan trend. Penunjuk Super Trend digunakan untuk mengenal pasti arah trend harga semasa, dan ADX digunakan untuk menentukan kekuatan trend. Dagangan hanya dibuat di bawah keadaan trend yang kuat. Di samping itu, strategi ini juga menggunakan warna badan lilin, jumlah perdagangan dan penunjuk lain untuk pengesahan, membentuk satu set peraturan perdagangan yang agak lengkap.

Secara keseluruhan, strategi ini termasuk dalam strategi pengesanan trend, yang bertujuan untuk menangkap trend yang jelas jangka sederhana dan panjang sambil mengelakkan gangguan dari tempoh penyatuan dan goyangan.

Prinsip Strategi

  1. Gunakan penunjuk Super Trend untuk menentukan arah trend harga. Apabila harga berada di atas Super Trend, ia adalah isyarat panjang, dan apabila ia berada di bawah Super Trend, ia adalah isyarat pendek.

  2. Gunakan ADX untuk menilai kekuatan trend. Isyarat perdagangan dihasilkan hanya apabila ADX lebih besar daripada ambang, supaya tempoh dengan penyatuan yang tidak jelas dapat disaring.

  3. Warna badan candlestick digunakan untuk menilai sama ada ia sedang dalam corak menaik atau menurun, digabungkan dengan penunjuk Super Trend untuk membentuk pengesahan.

  4. Peningkatan jumlah dagangan berfungsi sebagai isyarat pengesahan. Posisi hanya ditubuhkan apabila jumlah dagangan meningkat.

  5. Tetapkan stop loss dan ambil keuntungan untuk mengunci keuntungan dan mengawal risiko.

  6. Tutup semua kedudukan sebelum akhir hari.

Kelebihan Strategi

  1. Mengesan trend jangka sederhana dan jangka panjang yang jelas, mengelakkan turun naik, dan mencapai keuntungan yang tinggi.

  2. Strategi ini mempunyai beberapa parameter dan mudah difahami dan dilaksanakan.

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

  4. Penggunaan pelbagai penunjuk untuk pengesahan dapat mengurangkan isyarat palsu.

Risiko Strategi

  1. Mungkin mengalami kerugian besar semasa pembetulan besar di seluruh pasaran.

  2. Saham individu mungkin mengalami pembalikan tajam disebabkan oleh perubahan dalam asas.

  3. Black Swan peristiwa daripada perubahan dasar utama.

Penyelesaian:

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

  2. Meningkatkan peratusan stop loss untuk mengawal jumlah kerugian tunggal.

  3. Memantau dengan teliti dasar dan peristiwa penting, secara aktif mengurangkan kerugian jika perlu.

Arahan untuk Pengoptimuman

  1. Uji kombinasi parameter Super Trend yang berbeza untuk mencari yang menghasilkan isyarat yang paling stabil.

  2. Uji kombinasi parameter ADX yang berbeza untuk menentukan tetapan optimum.

  3. Tambah penunjuk pengesahan lain seperti turun naik dan Bollinger Bands untuk mengurangkan isyarat palsu.

  4. Gabungkan dengan strategi breakout untuk mengurangkan kerugian tepat pada masanya apabila trend terputus.

Ringkasan

Logik keseluruhan strategi ini jelas, menggunakan Super Trend untuk menilai arah trend harga, ADX untuk menentukan kekuatan trend, dan berdagang mengikut trend yang kuat. Hentikan kerugian dan ambil keuntungan ditetapkan untuk mengawal risiko. Strategi ini mempunyai beberapa parameter dan mudah dioptimumkan.


/*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 lanjut