Strategi saluran fluktuasi garis K terobosan bilateral


Tanggal Pembuatan: 2024-01-31 10:24:00 Akhirnya memodifikasi: 2024-01-31 10:24:00
menyalin: 1 Jumlah klik: 568
1
fokus pada
1617
Pengikut

Strategi saluran fluktuasi garis K terobosan bilateral

Ringkasan

Strategi saluran bergelombang dua sisi untuk menembus K-line dengan menghitung rel tengah, rel atas, dan rel bawah saluran, dengan mengkombinasikan indikator tren dan indikator harga kuantitatif untuk menentukan arah dan kekuatan pasar, dan mengatur sinyal penembusan secara bersamaan di kedua sisi saluran, untuk mencapai tujuan utama membeli dan menjual.

Prinsip Strategi

Indikator inti dari strategi ini adalah saluran berfluktuasi K-line yang didasarkan pada statistik. Jalur tengah saluran menggunakan algoritma rata-rata, jalur atas dan bawah menggunakan metode perhitungan amplitudo rata-rata yang sebenarnya, yang dapat secara dinamis menangkap batas fluktuasi harga. Pada saat yang sama, strategi tersebut menambahkan DMI dan aturan penilaian volume transaksi, untuk menghindari kerugian akibat terobosan palsu.

Secara khusus, ketika harga memasuki saluran dari tren bawah, garis + DI dari DMI melebihi garis -DI dan garis acuan ADX yang ditetapkan, dan menghasilkan sinyal beli ketika volume transaksi meningkat. Sebaliknya, ketika harga dari tren atas ke saluran bawah, aturan penilaian bertentangan dengan yang disebutkan di atas, menghasilkan sinyal jual.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah menangkap arah harga yang utama untuk terobosan, dengan menggunakan penilaian bilateral untuk terobosan dapat secara efektif menghindari situasi yang terkuras dan bergoyang, mengurangi jumlah stop loss. Dibandingkan dengan strategi rata-rata bergerak sederhana, penilaian terobosan saluran K lebih beradaptasi terhadap fluktuasi harga.

Selain itu, pengenalan indikator tambahan DMI dan volume transaksi juga berperan sebagai penyaringan yang baik untuk menghindari munculnya sinyal palsu. Oleh karena itu, strategi ini memiliki beberapa keunggulan dari segi rasio kemenangan dan kerugian.

Analisis risiko

Risiko terbesar dari strategi bilateral breakout adalah ketidakmampuan untuk menilai pembalikan pasar, dan jika terjadi pembalikan V, stop loss dapat dengan mudah dipicu. Selain itu, pengaturan parameter yang tidak tepat juga dapat berdampak negatif pada sistem perdagangan.

Untuk risiko, kita dapat mengurangi risiko dengan mengoptimalkan parameter indikator lebih lanjut dan mengurangi stop loss. Tentu saja, sistem perdagangan tidak akan pernah benar-benar menghindari kerugian, kuncinya adalah untuk mengendalikan risiko.

Arah optimasi

Strategi ini juga memiliki potensi optimisasi yang kuat, terutama dalam beberapa hal berikut:

  1. Parameter pengoptimalan, seperti penyesuaian panjang DI dan ADX untuk DMI, dan pengaturan periodik dan kelipatan untuk saluran K

  2. Menambahkan kondisi penyaringan, seperti kombinasi MACD dan indikator lainnya untuk menghindari penembusan palsu

  3. Mengimplementasikan Stop Loss Tracking secara otomatis untuk mengontrol risiko lebih lanjut

  4. Optimalkan pengaturan parameter dan aturan penyaringan untuk varietas yang berbeda

Meringkaskan

Bilateral breakout K-line channel strategi secara umum merupakan sistem breakout yang efektif. Ini dapat secara efektif menilai arah dan kekuatan tren utama, dan juga memiliki potensi besar dalam hal optimasi dan pengendalian risiko. Jika dilakukan secara sistematis, strategi ini dapat meningkatkan dan mengoptimalkan keuntungan stabil jangka panjang.

Kode Sumber Strategi
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Original Idea by: Wunderbit Trading

//@version=5
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.int(46, 'Period', step=1)

leadLine1 = ta.ema(close, ribbon_period)
leadLine2 = ta.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.int(81, step=1, minval=1)
mult = input.float(2.5, step=0.1)

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

plot(ma, title='Middle', color=color.new(color.orange, 0))
p1 = plot(upper, title='Upper', color=color.new(color.orange, 0))
p2 = plot(lower, title='Lower', color=color.new(color.orange, 0))
fill(p1, p2, transp=90)


// 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 = 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)
    [adx, plus, minus]

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

benchmark = input.int(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.float(4.5, title='Long Take Profit 1 %', step=0.1) / 100
long_tp1_qty = input.int(15, title='Long Take Profit 1 Qty', step=1)

long_tp2_inp = input.float(20, title='Long Take Profit 2%', step=0.1) / 100
long_tp2_qty = input.int(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.float(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 = ta.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', direction=strategy.long, 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.new(color.green, 0), linewidth=1, title='1st Long Take Profit')
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='2nd Long Take Profit')
plot(strategy.position_size > 0 ? long_stop_level : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Long Stop Loss')