
Strategi ini didasarkan pada tiga indikator utama: indikator tren, saluran Keltner, dan indikator DM.
Indikator tren terdiri dari SMA dan EMA. Ketika EMA melintasi SMA, masuk ke tren dikonfirmasi. Saluran Keltner digunakan untuk menentukan harga pembukaan dan penutupan Candle. Indikator DM digunakan untuk menentukan arah bullish.
Anda dapat melakukan lebih banyak jika memenuhi persyaratan masuk berikut:
Strategi menetapkan dua stop loss dan satu stop loss. Anda dapat mempertimbangkan untuk menggunakan tracking stop loss untuk mendapatkan lebih banyak keuntungan.
EMA dan SMA untuk menilai arah tren. Parameter EMA adalah 46, dan SMA adalah 46. Ketika EMA melewati SMA, berarti memasuki tren naik.
Jalur Keltner terdiri dari tiga garis: garis tengah, garis atas, dan garis bawah. Garis tengah adalah SMA untuk harga close, dengan panjang 81. Garis atas dan garis bawah masing-masing berada di atas dan di bawah garis tengah dengan amplitudo aktual dari beberapa kali lipat yang ditentukan.
Saluran Keltner terutama digunakan untuk menentukan apakah harga berada di dalam saluran, dan melintasi saluran.
Indikator DM terdiri dari tiga garis: ADX, + DI dan - DI 。 + DI mengukur kekuatan kenaikan, - DI mengukur kekuatan penurunan 。 ADX mewakili indikator tren rata-rata, yang mencerminkan kekuatan tren 。
Di sini parameter ADX ditetapkan sebagai 10, parameter DI adalah 19. Ketika garis + DI memakai garis acuan yang ditetapkan (default 27), berarti tren kuat, cocok untuk melakukan lebih banyak.
Strategi ini menggabungkan tren, saluran, dan indikator kekuatan dan kelemahan untuk menentukan pergerakan harga dan arah polygon secara efektif. Strategi ini memiliki keuntungan sebagai berikut:
Pengertian tren relatif akurat, menghindari operasi berlawanan arah.
Jalur Keltner terlihat dengan jelas, membentuk titik dukungan dan tekanan.
Indikator DM dapat mengukur kekuatan udara dan memastikan arah udara yang benar.
Kondisi strategi yang ketat, dapat efektif memfilter bouncing dan bouncing back false breaks.
Tetapkan Stop Loss, yang akan membantu Anda mendapatkan keuntungan.
Strategi ini juga memiliki beberapa risiko:
Tren mungkin akan berbalik, EMA mungkin akan melewati SMA, dan perlu diperhatikan untuk keluar tepat waktu.
Dalam situasi yang kuat, saluran mungkin tidak berfungsi dan tidak dapat dianggap sebagai titik tekanan pendukung yang ketat.
Indikator DM dapat memberikan sinyal yang salah, yang harus dipertimbangkan dalam kaitannya dengan harga.
False breakout dapat memicu entry, tetapi segera kembali lagi, dan harus diatur untuk stop loss yang masuk akal.
Stop loss harus terus dioptimalkan agar dapat beradaptasi dengan perubahan pasar.
Ada beberapa hal yang bisa dioptimalkan:
Menyesuaikan parameter, menguji efektivitas metode penilaian tren yang berbeda.
Optimalkan parameter saluran agar lebih dekat dengan kisaran fluktuasi yang sebenarnya.
Uji kombinasi parameter DM yang berbeda untuk memilih parameter terbaik.
Setting entry conditions yang berbeda, misalnya dengan volume filter.
Mengoptimalkan strategi stop loss, seperti mencoba untuk mendapatkan lebih banyak keuntungan dari stop loss tracking.
Untuk menguji varietas yang berbeda, pilih kombinasi parameter yang optimal.
Strategi ini menggunakan berbagai indikator untuk menentukan arah tren, mendukung tekanan dan kekuatan multi-udara, sehingga dapat secara efektif menangkap tren dan mengendalikan risiko. Namun, tetap memperhatikan risiko dan mengoptimalkan parameter untuk beradaptasi dengan perubahan pasar. Secara keseluruhan, strategi ini memiliki kepraktisan yang kuat.
/*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")