Strategi saluran turun naik K-line kejayaan dua hala


Tarikh penciptaan: 2024-01-31 10:24:00 Akhirnya diubah suai: 2024-01-31 10:24:00
Salin: 1 Bilangan klik: 568
1
fokus pada
1617
Pengikut

Strategi saluran turun naik K-line kejayaan dua hala

Gambaran keseluruhan

Strategi saluran lonjakan dua hala untuk menembusi K-Line dengan mengira laluan tengah, laluan atas dan bawah, menggabungkan petunjuk trend dan petunjuk harga kuantitatif untuk menentukan arah dan kekuatan pasaran, menetapkan isyarat penembusan pada masa yang sama di kedua-dua sisi saluran, untuk mencapai tujuan utama membeli dan menjual.

Prinsip Strategi

Penunjuk teras strategi ini adalah saluran turun naik K-baris berdasarkan statistik. Jalur tengah menggunakan algoritma purata, dan jalur atas dan bawah menggunakan kaedah pengiraan gelombang sebenar purata, yang dapat menangkap pergerakan harga secara dinamik. Pada masa yang sama, strategi memasukkan DMI dan peraturan penghakiman jumlah transaksi, untuk mengelakkan kerugian akibat penembusan palsu.

Khususnya, apabila harga menembusi saluran dari bawah, garis + DI DMI melebihi garis -DI dan garis asas ADX yang ditetapkan, dan menghasilkan isyarat beli apabila jumlah transaksi meningkat. Sebaliknya, apabila harga menembusi saluran dari atas ke bawah, peraturan penilaian bertentangan dengan yang disebutkan di atas, menghasilkan isyarat jual.

Analisis kelebihan

Kelebihan terbesar strategi ini adalah menangkap arah harga utama, dengan menggunakan penilaian dua hala yang berkesan untuk mengelakkan penyusunan dan pergerakan, mengurangkan jumlah hentian. Berbanding dengan strategi purata bergerak yang mudah, penilaian saluran K lebih beradaptasi dengan turun naik harga.

Di samping itu, pengenalan penunjuk tambahan DMI dan jumlah transaksi juga berfungsi sebagai penapis yang baik untuk mengelakkan isyarat palsu. Oleh itu, strategi ini mempunyai kelebihan dari segi kadar kemenangan dan keuntungan.

Analisis risiko

Risiko terbesar dalam strategi penembusan dua hala adalah ketidakupayaan untuk menilai pembalikan pasaran, dan titik penangguhan boleh diaktifkan dengan mudah jika berlaku pembalikan jenis V. Selain itu, parameter yang tidak betul dapat memberi kesan negatif kepada sistem perdagangan.

Untuk risiko, kita boleh mengurangkan risiko dengan mengoptimumkan parameter penunjuk lebih jauh, mengurangkan marjin stop loss. Sudah tentu, sistem perdagangan tidak pernah dapat sepenuhnya mengelakkan kerugian, kunci adalah untuk mengawal risiko.

Arah pengoptimuman

Strategi ini juga mempunyai potensi pengoptimuman yang kuat, yang boleh diperbaiki dalam beberapa aspek:

  1. Parameter pengoptimuman, seperti panjang DI dan ADX DMI, dan seting kitaran dan kelipatan saluran K

  2. Menambah syarat penapisan, seperti gabungan MACD dan lain-lain untuk mengelakkan penembusan palsu

  3. Mengekalkan pengesanan stop loss secara automatik untuk mengawal risiko

  4. Tetapan parameter dan peraturan penapisan yang dioptimumkan untuk pelbagai jenis

ringkaskan

Strategi saluran turun naik dua hala yang menembusi K secara keseluruhan adalah sistem penembusan yang berkesan. Ia dapat menilai arah dan kekuatan trend utama dengan berkesan, dan mempunyai potensi yang besar dalam pengoptimuman dan kawalan risiko.

Kod 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')