
Strategi ini menggunakan pengiraan saluran dan indikator momentum, mengenal pasti bentuk trend, dan mewujudkan perdagangan trend. Khususnya, ia menggabungkan indikator momentum dan indikator saluran keseimbangan, menggunakan kedua-duanya dalam kombinasi, menggunakan saluran keseimbangan untuk mengunci kawasan keuntungan berbilang, sambil melibatkan trend jangka panjang.
Strategi ini digunakan untuk menilai dua indikator utama:
Penunjuk momentum ((DMI): menilai trend pasaran yang kosong, penunjuk lebih besar daripada set nilai terendah yang menghasilkan isyarat perdagangan.
Saluran keseimbangan (Keltner Channel): menilai kawasan trend, harga meletupkan ke arah atas sebagai masa untuk membeli, harga jatuh ke arah tengah sebagai isyarat kedudukan kosong.
Logik dagangan khusus adalah: apabila + DI indikator momentum lebih besar daripada nilai set 32 , menilai sebagai trend berbilang arah terbentuk, pada masa ini seperti harga menembusi saluran keseimbangan di atas landasan, menghasilkan isyarat beli; kemudiannya menggunakan saluran keseimbangan di tengah landasan sebagai garisan stop loss, mengesan stop loss, mewujudkan perlindungan keuntungan.
Strategi ini menggabungkan kelebihan kedua-dua penunjuk, menggunakan penunjuk momentum untuk menentukan arah trend, menggunakan saluran keseimbangan untuk menentukan masa masuk dan kawasan berhenti. Kombinasi kedua-dua penunjuk membolehkan strategi masuk dengan cekap lebih awal dalam penemuan trend, sambil menggunakan penunjuk saluran untuk mengunci keuntungan dan berhenti.
Strategi menggunakan indikator momentum untuk menilai trend pasaran pada awal, lebih berkesan daripada indikator yang tertinggal seperti purata bergerak sederhana.
Menggunakan saluran keseimbangan untuk menilai kawasan perdagangan tertentu, dapat mengunci kawasan keuntungan dengan berkesan.
Parameter penunjuk dan peraturan dagangan adalah ketat dan munasabah, data pengesanan semula berfungsi dengan baik, dan kebolehpercayaan di tempat kerja.
Strategi yang mudah difahami dan mudah diimplementasikan, sesuai untuk pemula dalam perdagangan kuantitatif.
Risiko strategi boleh dikawal, menggunakan hentian dinamik linear rata di tengah-tengah, mengawal kerugian tunggal dengan berkesan.
Strategi ini hanya digunakan untuk keadaan trend dan tidak digunakan untuk membetulkan pasaran yang bergolak, jika saluran QtCore meningkat dan stop loss di tengah-tengah terlalu longgar dan tidak dapat mengawal kerugian.
Indeks DMI ada ketinggalan tertentu, tidak dapat menentukan pengesahan trend, mungkin mengganggu trend lebih awal membawa kerugian.
Terdapat risiko bahawa peratusan stop loss tetap tidak dapat memasuki semula trend selepas kejutan besar, dan terlepas dari perkembangan seterusnya.
Data pengesanan cukup, tetapi masih memerlukan masa yang lama untuk menjalankan pemacu untuk mengesahkan kestabilan parameter.
Ujian boleh dilakukan dengan menggunakan pelbagai jenis stop loss, seperti stop loss ATR dan stop loss bergerak.
Indikator pengesahan peringkat rendah boleh ditambah, seperti peningkatan jumlah transaksi, untuk memastikan kemasukan selepas pengesahan trend.
Anda boleh menguji pelbagai kombinasi optimum untuk mencari kombinasi optimum.
Kestabilan parameter boleh disahkan melalui pengoptimuman langkah demi langkah dan pengesanan balik bergerak.
Strategi ini menggunakan penilaian dua indikator, untuk menangkap tren dengan cekap. Strategi ini lebih mudah, intuitif, logiknya jelas, prestasi pengukuran semula yang baik, dan boleh digunakan sebagai salah satu strategi permulaan perdagangan kuantitatif.
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Original Idea by: @Wunderbit
//@version=4
strategy("Keltner Channel [LINKUSDT] 1H", overlay=true, initial_capital=3000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent,commission_value=0.1)
/// TREND
trend_cond = input(true, title="Enable Ribbon Filter")
ribbon_period = input(30, "Ribbon 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(80, "KELTNER Period", step=1, minval=1)
mult = input(3.0,"KELTNER Multiple", step=0.1)
// Calculate Keltner Channel
ma = ema(source, length)
range = useTrueRange ? tr : high - low
rangema = ema(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 //
lensig = input(14, title="ADX Smoothing", minval=1, maxval=50)
len = input(14, minval=1, title="DI Length")
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / trur)
minus = fixnan(100 * rma(minusDM, len) / trur)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
trig_level=input(title="+DI Trigger Level", defval=32, minval=1,step=1)
//trig_level_adx=input(title="ADX Trigger Level", defval=30, minval=1,step=1)
//plot(adx, color=#FF006E, title="ADX")
//plot(plus, color=#0094FF, title="+DI")
//plot(minus, color=#FF6A00, title="-DI")
// plot(trig_level, 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(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
///// Component Code Stop //////////////////////////////////////////
//////////////// STRATEGY EXECUTION //////////////////////////
// STRATEGY CONDITION
// LONG
long = ((open > lower and open < upper) and close > upper) and plus > minus and plus > trig_level and volume[0] > volume[1]
entry_long = trend_cond ? long and UT : long
exit_long = (close < ma) //or low < SL_long
//LONG SET UP
// Take Profit / Stop Loss
entry_price_long=valuewhen(entry_long,close,0)
//SL_long = entry_price_long * (1 - long_sl_inp)
long_tp1_inp = input(8, title='Long Take Profit 1 Target %', step=0.1)/100
long_tp1_qty = input(20, title="Long Take Profit 1 Qty %", step=1)
long_tp2_inp = input(16, title='Long Take Profit 2 Target %', step=0.1)/100
long_tp2_qty = input(30, 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 EXECUTION
if testPeriod()
// LONG
strategy.entry(id="Long", long=true, when=entry_long, comment = "INSERT ENTRY 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")