ADX Smart Trend Mengikuti Strategi


Tarikh penciptaan: 2023-11-28 14:04:00 Akhirnya diubah suai: 2023-11-28 14:04:00
Salin: 0 Bilangan klik: 884
1
fokus pada
1617
Pengikut

ADX Smart Trend Mengikuti Strategi

Gambaran keseluruhan

Strategi pengesanan trend pintar ADX menggunakan indeks trend purata ((ADX) untuk menilai kekuatan trend, menangkap trend ketika trend lemah, dan menjejaki keuntungan dalam trend yang kuat. Strategi ini menilai kekuatan trend sambil menggabungkan terobosan harga untuk menghasilkan isyarat perdagangan, merupakan salah satu strategi pengesanan trend.

Prinsip Strategi

Strategi ini adalah berdasarkan purata trend indeks ((ADX) untuk menilai kekuatan trend semasa. ADX menunjukkan kekuatan trend dengan mengira purata nilai DIRECTIONAL INDICATOR yang turun naik dalam harga dalam tempoh tertentu. Apabila nilai ADX berada di bawah paras paras paras yang ditetapkan, kita menganggap bahawa keadaan sedang disusun, dan ketika ini melakukan penghakiman jangkauan kotak, jika harga menembusi kotak kotak dan turun, menghasilkan isyarat perdagangan.

Khususnya, strategi pertama mengira nilai ADX 14 kitaran, di bawah 18 dianggap trend lemah. Kemudian mengira jarak kotak yang terbentuk oleh harga tertinggi dan terendah pada 20 garis K yang lalu. Apabila harga menembusi kotak itu, menghasilkan isyarat beli dan jual. Jarak berhenti adalah 50% dari saiz kotak, jarak berhenti adalah 100% dari saiz kotak.

Strategi ini menggabungkan penghakiman kekuatan trend dan isyarat penembusan, yang dapat ditangkap ketika trend lemah dan masuk ke dalam penyusunan, untuk mengelakkan perdagangan yang kerap dalam keadaan yang tidak teratur. Apabila terdapat trend yang kuat, jangkauan berhenti lebih besar dan dapat memperoleh lebih banyak keuntungan.

Kelebihan Strategik

  1. Mengambil keputusan berdasarkan kekuatan trend, anda boleh mengelakkan perdagangan yang kerap dan tidak teratur.
  2. Penembusan kotak menambah penapis untuk mengelakkan kebocoran dalam keadaan gegaran.
  3. Dalam keadaan trend, anda boleh mendapatkan lebih banyak ruang untuk berhenti.
  4. Anda boleh menyesuaikan parameter ADX, parameter kotak, dan pembahagian stop-loss, yang sesuai dengan pelbagai jenis.

Risiko Strategik

  1. Tetapan parameter ADX yang tidak betul boleh kehilangan trend atau kesalahan pertimbangan.
  2. Kawasan kotak yang terlalu besar atau terlalu kecil boleh menjejaskan hasilnya.
  3. Kesalahan dalam pembahagian penangguhan boleh menyebabkan penangguhan yang terlalu kecil atau penangguhan yang terlalu awal.

Ia boleh dioptimumkan dengan menyesuaikan parameter ADX, parameter kotak, faktor stop loss, dan sebagainya, untuk menjadikannya lebih sesuai untuk pelbagai jenis dan keadaan pasaran. Pengurusan wang yang ketat juga penting, mengawal peratusan stop loss tunggal, untuk mengelakkan kerugian besar tunggal.

Arah pengoptimuman strategi

  1. Parameter ADX boleh menguji kesan kitaran yang berbeza.
  2. Parameter kotak boleh menguji panjang yang berbeza untuk menentukan saiz julat yang terbaik.
  3. Faktor stop loss boleh disesuaikan dengan baik untuk mengoptimumkan nisbah risiko-keuntungan.
  4. Anda boleh menguji kesan perdagangan unilateral dengan hanya melakukan lebih banyak atau hanya melakukan kosong.
  5. Ia boleh digabungkan dengan penunjuk lain, seperti penunjuk tenaga tambahan.

ringkaskan

Strategi trend pemantauan ADX pintar adalah strategi trend yang lebih stabil secara keseluruhan. Ia menggabungkan penilaian kekuatan trend dan isyarat harga yang pecah, dan ke tahap tertentu mengelakkan masalah mengejar kenaikan dan penurunan dalam strategi trend pemantauan yang biasa.

Kod sumber strategi
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Developer: Andrew Palladino. 
//Creator: Rob Booker.
//Date: 9/29/2017
//@version=5
//Date: 08/10/2022
//Updated to V5 from V1, default cash settings added and indicators made more easily visible by:
// @ Powerscooter

strategy("Rob Booker - ADX Breakout", shorttitle="ADX Breakout V5", overlay=true, default_qty_type = strategy.cash, default_qty_value = 100000, initial_capital = 100000)

adxSmoothPeriod = input(14, title="ADX Smoothing Period", group = "ADX Settings")
adxPeriod = input(14, title="ADX Period", group = "ADX Settings")
adxLowerLevel = input(18, title="ADX Lower Level", group = "ADX Settings")
boxLookBack = input(20, title="BreakoutBox Lookback Period", group = "BreakoutBox")
profitTargetMultiple = input(1.0, title="Profit Target Box Width Multiple", group = "Take Profit and Stop Loss")
stopLossMultiple = input(0.5, title="Stop Loss Box Width Multiple", group = "Take Profit and Stop Loss")
enableDirection = input(0, title="Both(0), Long(1), Short(-1)", group = "Trade Direction")


// When the ADX drops below threshold limit, then we consider the pair in consolidation. 
// Set Box around highs and lows of the last 20 candles. with upper and lower boundaries. 
// When price breaks outside of box, a trade is taken. (on close or on touch?)
// Stop is placed, default 50%, of the size of the box. So if box is 200 pips, stop is at 100 pips. 
// Profit target is 100% of the size of the box. Default. User can set a profit target of 0.5, 1 full size, 2 or 3. 


dirmov(len) =>
	up = ta.change(high)
	down = -ta.change(low)
	truerange = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

adxHigh(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	plus
	
adxLow(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	minus
	
sig = adx(adxSmoothPeriod, adxPeriod)
//sigHigh = adxHigh(dilen, adxlen)
//sigLow = adxLow(dilen, adxlen)

isADXLow = sig < adxLowerLevel

//boxUpperLevel = ta.highest(high, boxLookBack)[1]
//boxLowerLevel = ta.lowest(low, boxLookBack)[1]

var float boxUpperLevelCarry = 0
var float boxLowerLevelCarry = 0

boxUpperLevel = strategy.position_size == 0 ? ta.highest(high, boxLookBack)[1] : boxUpperLevelCarry
boxUpperLevelCarry := boxUpperLevel
boxLowerLevel = strategy.position_size == 0 ? ta.lowest(low, boxLookBack)[1] : boxLowerLevelCarry
boxLowerLevelCarry := boxLowerLevel

boxWidth = boxUpperLevel - boxLowerLevel

profitTarget = strategy.position_size > 0  ? strategy.position_avg_price + profitTargetMultiple*boxWidth : strategy.position_size < 0 ?  strategy.position_avg_price - profitTargetMultiple*boxWidth : na
stopLoss = strategy.position_size > 0 ? strategy.position_avg_price - stopLossMultiple*boxWidth : strategy.position_size < 0 ? strategy.position_avg_price + stopLossMultiple*boxWidth : na

plot(strategy.position_size == 0 ? boxUpperLevel : na, color=color.white, style = plot.style_linebr)
plot(strategy.position_size == 0 ? boxLowerLevel : na, color=color.white, style = plot.style_linebr)


bgcolor(isADXLow ? color.purple : na, transp=72, title = "ADX limit")
plot(stopLoss, color=color.red, linewidth=2, style = plot.style_linebr, title="StopLossLine")
plot(profitTarget, color=color.blue, linewidth=2, style = plot.style_linebr, title="ProfitTargetLine")

isBuyValid = strategy.position_size == 0 and ta.cross(close, boxUpperLevel) and isADXLow

//Long Entry Condition
strategy.exit("close_long", from_entry="open_long", limit = profitTarget, stop = stopLoss)
if isBuyValid and strategy.opentrades == 0 and (enableDirection == -1 or enableDirection == 0)
    strategy.entry("open_long", strategy.long)

isSellValid = strategy.position_size == 0 and ta.cross(close, boxLowerLevel) and isADXLow

//Short Entry condition
strategy.exit(id="close_short", from_entry="open_short", limit = profitTarget, stop = stopLoss)
if isSellValid and strategy.opentrades == 0 and (enableDirection == 1 or enableDirection == 0)
    strategy.entry("open_short", strategy.short)