Strategi Pelacakan Tren Cerdas ADX

Penulis:ChaoZhang, Tanggal: 2023-11-28 14:04:00
Tag:

img

Gambaran umum

Strategi Pelacakan Tren Cerdas ADX menggunakan Indeks Arah Rata-rata (ADX) untuk menilai kekuatan tren dan menangkap tren ketika mereka lemah dan mengikuti tren yang kuat untuk keuntungan.

Prinsip Strategi

Inti dari strategi ini terutama didasarkan pada Indeks Arah Rata-rata (ADX) untuk menilai kekuatan tren saat ini. ADX menghitung nilai rata-rata Indikator Arah fluktuasi harga selama periode tertentu untuk mewakili kekuatan tren. Ketika nilai ADX berada di bawah ambang batas yang ditetapkan, kami percaya pasar sedang konsolidasi. Pada saat ini, kisaran kotak ditentukan. Jika harga menerobos rel atas dan bawah kotak, sinyal perdagangan dihasilkan.

Secara khusus, strategi pertama menghitung nilai ADX 14 siklus. Ketika lebih rendah dari 18, dianggap bahwa tren lebih lemah. Kemudian menghitung kisaran kotak yang terbentuk oleh harga tertinggi dan terendah dari 20 garis K terakhir. Ketika harga menembus kotak ini, sinyal beli dan jual dihasilkan. Jarak stop loss adalah 50% dari ukuran kotak, dan jarak take profit adalah 100% dari ukuran kotak.

Strategi ini menggabungkan penilaian kekuatan tren dan sinyal terobosan untuk menangkap tren ketika mereka lebih lemah dan memasuki konsolidasi, menghindari perdagangan yang sering di pasar yang tidak teratur.

Keuntungan dari Strategi

  1. Menggabungkan penilaian kekuatan tren dapat menghindari perdagangan yang sering di pasar yang tidak teratur.
  2. Penembusan kotak meningkatkan penyaringan untuk menghindari terjebak di pasar yang tidak stabil.
  3. Di pasar tren, target keuntungan yang lebih besar dapat diperoleh.
  4. Parameter ADX yang dapat disesuaikan, parameter kotak, koefisien stop loss, dll untuk beradaptasi dengan varietas yang berbeda.

Risiko dari Strategi

  1. Pengaturan parameter ADX yang tidak benar dapat melewatkan tren atau membuat penilaian yang salah.
  2. Jangkauan kotak yang terlalu besar atau kecil dapat mempengaruhi hasil.
  3. Koefisien stop loss dan take profit yang tidak tepat dapat menyebabkan stop loss yang tidak cukup atau profit taking yang terlalu dini.

Parameter seperti ADX, kisaran kotak, koefisien stop loss dapat dioptimalkan untuk membuatnya lebih cocok untuk produk dan lingkungan pasar yang berbeda.

Arahan untuk Optimasi Strategi

  1. Parameter ADX dapat menguji hasil siklus yang berbeda.
  2. Parameter kotak dapat menguji panjang yang berbeda untuk menentukan ukuran rentang yang optimal.
  3. Perbaiki stop loss dan mengambil koefisien keuntungan untuk mengoptimalkan rasio risiko-pengembalian.
  4. Uji efek perdagangan panjang/pendek sepihak saja.
  5. Tambahkan indikator lain untuk kombinasi, seperti indikator volume.

Ringkasan

Strategi Pelacakan Tren Cerdas ADX umumnya merupakan strategi pelacakan tren yang relatif stabil. Strategi ini menggabungkan penilaian kekuatan tren dan sinyal terobosan harga untuk menghindari masalah seperti mengejar puncak dan membunuh terendah yang umum terjadi dalam strategi trend berikut. Melalui optimasi parameter dan manajemen uang yang ketat, strategi dapat menghasilkan keuntungan secara stabil.


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

Lebih banyak