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.
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.
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.
Warna badan candlestick digunakan untuk menilai sama ada ia sedang dalam corak menaik atau menurun, digabungkan dengan penunjuk Super Trend untuk membentuk pengesahan.
Peningkatan jumlah dagangan berfungsi sebagai isyarat pengesahan. Posisi hanya ditubuhkan apabila jumlah dagangan meningkat.
Tetapkan stop loss dan ambil keuntungan untuk mengunci keuntungan dan mengawal risiko.
Tutup semua kedudukan sebelum akhir hari.
Mengesan trend jangka sederhana dan jangka panjang yang jelas, mengelakkan turun naik, dan mencapai keuntungan yang tinggi.
Strategi ini mempunyai beberapa parameter dan mudah difahami dan dilaksanakan.
Risiko dikawal dengan baik dengan stop loss dan mengambil keuntungan di tempat.
Penggunaan pelbagai penunjuk untuk pengesahan dapat mengurangkan isyarat palsu.
Mungkin mengalami kerugian besar semasa pembetulan besar di seluruh pasaran.
Saham individu mungkin mengalami pembalikan tajam disebabkan oleh perubahan dalam asas.
Black Swan peristiwa daripada perubahan dasar utama.
Penyelesaian:
Sesuai menyesuaikan parameter ADX untuk memastikan perdagangan hanya di bawah trend yang kuat.
Meningkatkan peratusan stop loss untuk mengawal jumlah kerugian tunggal.
Memantau dengan teliti dasar dan peristiwa penting, secara aktif mengurangkan kerugian jika perlu.
Uji kombinasi parameter Super Trend yang berbeza untuk mencari yang menghasilkan isyarat yang paling stabil.
Uji kombinasi parameter ADX yang berbeza untuk menentukan tetapan optimum.
Tambah penunjuk pengesahan lain seperti turun naik dan Bollinger Bands untuk mengurangkan isyarat palsu.
Gabungkan dengan strategi breakout untuk mengurangkan kerugian tepat pada masanya apabila trend terputus.
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 **********