Strategi Saluran Keltner berasaskan trend


Tarikh penciptaan: 2023-11-03 16:59:39 Akhirnya diubah suai: 2023-11-03 16:59:39
Salin: 0 Bilangan klik: 791
1
fokus pada
1617
Pengikut

Strategi Saluran Keltner berasaskan trend

Gambaran keseluruhan

Strategi ini berdasarkan tiga petunjuk utama: petunjuk trend, laluan Keltner dan petunjuk DM.

Indikator trend terdiri daripada SMA dan EMA. Apabila EMA melintasi SMA, ia mengesahkan trend masuk. Saluran Keltner digunakan untuk menentukan harga pembukaan dan penutupan Candle. Indikator DM digunakan untuk menentukan arah kosong.

Anda boleh melakukan lebih banyak jika anda memenuhi syarat kemasukan berikut:

  1. EMA naik melalui SMA, mengesahkan trend naik
  2. Candle buka harga di atas, tutup harga di dalam corong
  3. Indeks DM lebih besar daripada garis asas yang ditetapkan

Strategi menetapkan dua tempat berhenti dan satu tempat berhenti. Anda boleh mempertimbangkan untuk menggunakan tracking stop untuk mendapatkan lebih banyak keuntungan.

Prinsip Strategi

Penghakiman Trend

Arah trend ditentukan oleh EMA dan SMA. Parameter EMA adalah 46, dan parameter SMA adalah 46. Apabila EMA melintasi SMA, ia menunjukkan bahawa ia memasuki trend naik.

Jalan Kelterna

Jalur Keltner terdiri daripada tiga garis: garis tengah, atas, dan bawah. Garis tengah adalah harga penutupan SMA, dengan panjang 81. Garis atas dan bawah masing-masing terletak di atas dan di bawah garis tengah.

Saluran Keltner digunakan terutamanya untuk menentukan sama ada harga berada di dalam saluran dan melintasi saluran.

Indeks DM

Penunjuk DM terdiri daripada tiga garis: ADX, + DI dan - DI. + DI mengukur kekuatan kenaikan, - DI mengukur kekuatan penurunan. ADX mewakili penunjuk trend purata, yang mencerminkan kekuatan trend.

Di sini parameter ADX ditetapkan sebagai 10, dan parameter DI 19 . Apabila garis +DI memakai garis rujukan yang ditetapkan ((default 27), ini menandakan kenaikan yang kuat, sesuai untuk melakukan lebih banyak.

Analisis kelebihan

Strategi ini menggabungkan trend, saluran dan indikator kekuatan untuk menentukan pergerakan harga dan arah polygon dengan berkesan. Ia mempunyai kelebihan berikut:

  1. Penghakiman trend agak tepat, mengelakkan operasi berlawanan arah.

  2. Saluran Keltner dapat dilihat dengan jelas, membentuk sokongan dan tekanan.

  3. Penunjuk DM boleh mengukur daya udara dan memastikan arah udara yang betul.

  4. Keadaan strategi yang ketat, boleh menyaring kebocoran palsu yang berpunca daripada kejatuhan.

  5. Tetapkan titik henti rugi untuk peluang keuntungan.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Trend mungkin bertukar, EMA mungkin turun di bawah SMA, perlu berhati-hati untuk keluar tepat pada masanya.

  2. Dalam keadaan yang kuat, saluran mungkin tidak berfungsi dan tidak boleh dianggap sebagai tekanan sokongan yang ketat.

  3. Indikator DM mungkin memberi isyarat yang salah, yang perlu dipertimbangkan dengan harga.

  4. Penembusan palsu boleh mencetuskan masuk, tetapi tidak lama lagi jatuh kembali, dan hentian yang munasabah harus ditetapkan.

  5. Stop loss perlu terus dioptimumkan untuk menyesuaikan diri dengan perubahan pasaran.

Arah pengoptimuman

Ia boleh dioptimumkan dengan cara berikut:

  1. Menyesuaikan parameter, menguji keberkesanan pelbagai kaedah penilaian trend.

  2. Mengoptimumkan parameter saluran agar lebih dekat dengan julat turun naik yang sebenar.

  3. Uji kombinasi parameter DM yang berbeza dan pilih parameter terbaik.

  4. Tetapkan syarat kemasukan yang berbeza, seperti penapis jumlah transaksi.

  5. Mengoptimumkan strategi hentian dan hentian, seperti mencuba jejak hentian untuk mendapatkan lebih banyak keuntungan.

  6. Ujian berasingan untuk pelbagai jenis, memilih kombinasi parameter terbaik.

ringkaskan

Strategi ini menggunakan pelbagai petunjuk untuk menentukan arah trend, menyokong tekanan dan kekuatan multi-udara, untuk menangkap trend dengan berkesan dan mengawal risiko. Namun, anda masih perlu memperhatikan risiko dan mengoptimumkan parameter untuk menyesuaikan diri dengan perubahan pasaran. Secara keseluruhannya, strategi ini mempunyai kegunaan yang kuat.

Kod sumber strategi
/*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")