Strategi Berbasis Tren Saluran Keltner

Penulis:ChaoZhang, Tanggal: 2023-11-03 16:59:39
Tag:

img

Gambaran umum

Strategi ini didasarkan pada tiga indikator utama: indikator tren, saluran Keltner dan indikator DM.

Indikator tren terdiri dari SMA dan EMA. Saluran Keltner digunakan untuk menentukan harga buka dan tutup lilin. Indikator DM adalah untuk menilai arah panjang dan pendek.

Sinyal masuk diaktifkan ketika:

  1. EMA melintasi SMA, mengkonfirmasi tren naik
  2. Lilin terbuka di atas pita atas dan menutup di dalam saluran
  3. Indikator DM berada di atas tolok ukur

Strategi ini memiliki dua level take profit dan satu level stop loss.

Prinsip Strategi

Identifikasi Tren

SMA dan EMA crossover digunakan untuk menentukan arah tren. EMA (46) menyeberangi SMA (46) menunjukkan tren naik.

Saluran Keltner

Saluran ini memiliki tiga garis: tengah, atas dan bawah. garis tengah adalah SMA harga dekat dengan panjang 81. band atas dan bawah ditempatkan pada kelipatan rentang benar di atas dan di bawah garis tengah. di sini kita menggunakan 2,5 kali rentang benar.

Saluran Keltner menunjukkan level support dan resistance. Gerakan harga sehubungan dengan saluran dianalisis.

Indikator DM

Indikator DM berisi ADX, +DI dan -DI. +DI mengukur kekuatan tren naik sementara -DI mengukur kekuatan tren turun. ADX menunjukkan kekuatan tren.

Di sini ADX (10), DI (19) digunakan. Ketika +DI melintasi di atas acuan (default 27), ini menandakan tren naik yang kuat dan baik untuk masuk panjang.

Analisis Keuntungan

Strategi ini menggabungkan indikator tren, saluran dan momentum untuk secara efektif menentukan tindakan harga dan arah panjang/pendek.

  1. Identifikasi tren relatif akurat untuk menghindari perdagangan yang bertentangan dengan tren.

  2. Saluran Keltner menunjukkan tingkat dukungan dan resistensi yang jelas.

  3. Indikator DM mengukur momentum panjang/pendek untuk memastikan arah.

  4. Aturan masuk yang ketat membantu menyaring pelarian palsu.

  5. Take profit dan stop loss point memungkinkan menangkap keuntungan.

Analisis Risiko

Ada juga beberapa risiko yang harus dipertimbangkan:

  1. Tren dapat berbalik ketika EMA melintasi di bawah SMA, jadi keluar tepat waktu.

  2. Saluran dapat gagal dalam tren yang kuat, bukan dukungan / resistensi yang ketat.

  3. DM dapat menghasilkan sinyal palsu, memeriksa aksi harga.

  4. Lolos palsu bisa memicu masuk tapi cepat mundur, gunakan stop loss yang wajar.

  5. Ambil keuntungan dan stop loss perlu terus-menerus dioptimalkan untuk beradaptasi dengan perubahan kondisi pasar.

Arahan Optimasi

Beberapa cara untuk lebih mengoptimalkan strategi:

  1. Sesuaikan parameter dan uji metode identifikasi tren yang berbeda.

  2. Optimalkan parameter saluran agar lebih sesuai dengan rentang sebenarnya.

  3. Uji parameter DM yang berbeda dan temukan kombinasi yang optimal.

  4. Tambahkan lebih banyak filter entri seperti volume.

  5. Cobalah stop loss untuk mendapatkan lebih banyak keuntungan.

  6. Uji secara terpisah untuk produk yang berbeda untuk menemukan set parameter terbaik.

Kesimpulan

Strategi ini mengintegrasikan beberapa indikator untuk menentukan tren, support/resistance dan momentum, yang memungkinkan untuk secara efektif menangkap tren dan mengendalikan risiko.


/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Original Idea by: Wunderbit Trading

//@version=4
strategy("Keltner Channel ETH/USDT 1H", overlay=true, initial_capital=1000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100,  commission_type=strategy.commission.percent,commission_value=0.07)


/// TREND
ribbon_period = input(46, "Period", step=1)

leadLine1 = ema(close, ribbon_period)
leadLine2 = sma(close, ribbon_period)

// p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
// p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
// fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)

//Upward Trend
UT=leadLine2 < leadLine1
DT=leadLine2>leadLine1

///////////////////////////////////////INDICATORS

// KELTNER //
source       = close
useTrueRange = input(true)
length       = input(81, step=1, minval=1)
mult         = input(2.5, step=0.1)

// Calculate Keltner Channel
ma      = sma(source, length)
range   = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

plot(ma, title="Middle", color=color.orange)
p1=plot(upper, title="Upper", color=color.orange)
p2=plot(lower, title="Lower", color=color.orange)
fill(p1,p2)


// DMI INDICATOR //
adxlen = 10 // input(10, title="ADX Smoothing")
dilen = input(19, title="DI Length")
keyLevel = 23// input(23, title="key level for ADX")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

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

[sig, up, down] = adx(dilen, adxlen)

benchmark=input(title="DMI Benchmark", defval=27, minval=1,step=1)

// plot(sig, color=color.red, title="ADX")
// plot(up, style=plot.style_histogram, color=color.green, title="+DI")
// plot(down, style=plot.style_histogram, color=color.red, title="-DI")
// plot(keyLevel, color=color.white, title="Key Level")

///////////////////////////////////////////////////////////


////////////////////////////////////////////////////Component Code Start

testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(9999, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
///// Component Code Stop //////////////////////////////////////////

//////////////// STRATEGY EXECUTION //////////////////////////

//LONG SET UP
// Take Profit / Stop Loss
long_tp1_inp = input(4.5, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(15, title="Long Take Profit 1 Qty", step=1)

long_tp2_inp = input(20, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(100, title="Long Take Profit 2 Qty", step=1)

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)

long_sl_inp = input(4, title='Long Stop Loss %', step=0.1)/100
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)


// STRATEGY CONDITION
// LONG
entry_long = ((open > lower and open < upper) and close > upper) and up > down and up > benchmark //  and volume[0] > volume[1]
entry_price_long=valuewhen(entry_long,close,0)
SL_long = entry_price_long * (1 - long_sl_inp)
exit_long = (close < lower) or low < SL_long


// STRATEGY EXECUTION
if testPeriod()

    // LONG
    if UT
        strategy.entry(id="Long", long=true, when=entry_long, comment = "INSERT ENTER LONG COMMAND")
    strategy.exit("TP1","Long", qty_percent=long_tp1_qty, limit=long_take_level_1) // PLACE TAKE PROFIT IN WBT BOT SETTINGS 
    strategy.exit("TP2","Long", qty_percent=long_tp2_qty, limit=long_take_level_2) // PLACE TAKE PROFIT IN WBT BOT SETTINGS
    strategy.close(id="Long", when=exit_long, comment= "INSERT EXIT LONG COMMAND")


//PLOT FIXED SLTP LINE
// LONG POSITION
plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
plot(strategy.position_size > 0 ? long_stop_level : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")

Lebih banyak