Strategi Perdagangan Momentum Penapis Selang Berganda


Tarikh penciptaan: 2024-04-01 10:54:47 Akhirnya diubah suai: 2024-04-01 10:54:47
Salin: 3 Bilangan klik: 590
1
fokus pada
1617
Pengikut

Strategi Perdagangan Momentum Penapis Selang Berganda

Gambaran keseluruhan

Strategi ini adalah strategi dagangan dinamik berdasarkan penapis dua ruang. Strategi ini memperoleh penapis ruang komprehensif untuk menentukan pergerakan harga semasa dengan mengira ruang yang lancar dalam dua kitaran cepat dan lambat. Strategi ini menghasilkan isyarat beli / jual apabila harga melintasi ruang itu.

Prinsip Strategi

  1. Hitung julat halus antara dua kitaran cepat dan lambat. Julat cepat menggunakan kitaran yang lebih pendek dan kelipatan yang lebih kecil, dan julat perlahan menggunakan kitaran yang lebih lama dan kelipatan yang lebih besar.
  2. Menggunakan purata julat laju dan julat perlahan sebagai penapis julat komprehensif ((TRF) }}.
  3. Mengira hubungan harga semasa dengan harga sebelumnya untuk menentukan trend naik (upward) dan turun (downward)
  4. Hitung dinamik atas (FUB) dan bawah (FLB), sebagai rujukan trend.
  5. Menurut hubungan harga penutupan dengan TRF, menghasilkan isyarat beli dan jual.
  6. Tetapkan empat hentian gradien dan satu hentian kerugian, sesuai dengan perkadaran kedudukan yang berbeza dan peratusan keuntungan / kerugian.

Analisis kelebihan

  1. Penapis dua ruang menggabungkan kitaran cepat dan perlahan, yang dapat menyesuaikan diri dengan irama pasaran yang berbeza dan menangkap lebih banyak peluang perdagangan.
  2. Reka bentuk naik dan turun secara dinamik membantu mengikuti trend semasa dan mengurangkan isyarat palsu.
  3. Tetapan empat hentian gradien membolehkan anda mendapatkan keuntungan lebih banyak apabila trend berlanjutan, dan juga dapat mengunci sebahagian keuntungan dengan tepat pada masa apabila trend berbalik.
  4. Tetapan stop loss membantu mengawal kerugian maksimum dalam satu transaksi dan melindungi keselamatan akaun.

Analisis risiko

  1. Strategi ini mungkin menghasilkan lebih banyak isyarat palsu ketika pasaran bergolak atau dalam pergerakan selang-seling, yang menyebabkan kehilangan dagangan dan yuran yang kerap.
  2. Tetapan penghadang tangga mungkin menyebabkan sebahagian keuntungan dikunci lebih awal dan tidak dapat menikmati sepenuhnya keuntungan dari tren.
  3. Tetapan Damage Stop mungkin tidak dapat sepenuhnya mengelakkan kerosakan ekstrim akibat Black Swan.

Arah pengoptimuman

  1. Anda boleh mempertimbangkan untuk memperkenalkan lebih banyak petunjuk teknikal atau sentimen pasaran sebagai syarat tambahan untuk menilai trend dan mengurangkan isyarat palsu.
  2. Untuk tetapan stop dan stop loss, anda boleh menyesuaikan secara dinamik mengikut keadaan pasaran yang berbeza dan jenis perdagangan, meningkatkan kebolehpasaran strategi.
  3. Berdasarkan pengesanan semula, anda boleh mengoptimumkan lagi parameter, seperti pemilihan kitaran antara laju cepat dan lambat, dan persentasenya untuk berhenti dan berhenti, untuk meningkatkan kestabilan dan keuntungan strategi.

ringkaskan

Strategi perdagangan berganda berjangka berfluktuasi membina penapis komprehensif dengan melonggarkan dua kitaran dengan cepat dan perlahan, dan pada masa yang sama menggabungkan pergerakan dinamik dan turun, menilai pergerakan harga, menghasilkan isyarat beli dan jual. Strategi ini juga menetapkan empat stop stop dan satu stop loss untuk mengawal risiko dan mengunci keuntungan. Strategi ini sesuai untuk digunakan dalam keadaan trend, tetapi mungkin menghasilkan lebih banyak isyarat palsu di pasaran yang bergolak.

Kod sumber strategi
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=5
strategy(title='2"Twin Range Filter', overlay=true)
strat_dir_input = input.string(title='İşlem Yönü', defval='Alis', options=['Alis', 'Satis', 'Tum'])
strat_dir_value = strat_dir_input == 'Alis' ? strategy.direction.long : strat_dir_input == 'Satis' ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)

////////////////////////////

// Backtest inputs
BaslangicAy = input.int(defval=1, title='İlk ay', minval=1, maxval=12)
BaslangicGun = input.int(defval=1, title='İlk Gün', minval=1, maxval=31)
BaslangicYil = input.int(defval=2023, title='İlk Yil', minval=2000)
SonAy = input.int(defval=1, title='Son Ay', minval=1, maxval=12)
SonGun = input.int(defval=1, title='Son Gün', minval=1, maxval=31)
SonYil = input.int(defval=9999, title='Son Yıl', minval=2000)

start = timestamp(BaslangicYil, BaslangicAy, BaslangicGun, 00, 00)  // backtest start window
finish = timestamp(SonYil, SonAy, SonGun, 23, 59)  // backtest finish window
window() => true

source = input(defval=close, title='Source')
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
per1 = input.int(defval=27, minval=1, title='Fast period')
mult1 = input.float(defval=1.6, minval=0.1, title='Fast range')
per2 = input.int(defval=55, minval=1, title='Slow period')
mult2 = input.float(defval=2, minval=0.1, title='Slow range')
smoothrng(x, t, m) =>
    wper = t * 2 - 1
    avrng = ta.ema(math.abs(x - x[1]), t)
    smoothrng = ta.ema(avrng, wper) * m
    smoothrng
smrng1 = smoothrng(source, per1, mult1)
smrng2 = smoothrng(source, per2, mult2)
smrng = (smrng1 + smrng2) / 2
rngfilt(x, r) =>
    rngfilt = x
    rngfilt := x > nz(rngfilt[1]) ? x - r < nz(rngfilt[1]) ? nz(rngfilt[1]) : x - r : x + r > nz(rngfilt[1]) ? nz(rngfilt[1]) : x + r
    rngfilt
filt = rngfilt(source, smrng)
upward = 0.0
upward := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1])
downward = 0.0
downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1])
STR = filt + smrng
STS = filt - smrng
FUB = 0.0
FUB := STR < nz(FUB[1]) or close[1] > nz(FUB[1]) ? STR : nz(FUB[1])
FLB = 0.0
FLB := STS > nz(FLB[1]) or close[1] < nz(FLB[1]) ? STS : nz(FLB[1])
TRF = 0.0
TRF := nz(TRF[1]) == FUB[1] and close <= FUB ? FUB : nz(TRF[1]) == FUB[1] and close >= FUB ? FLB : nz(TRF[1]) == FLB[1] and close >= FLB ? FLB : nz(TRF[1]) == FLB[1] and close <= FLB ? FUB : FUB
al = ta.crossover(close, TRF)
sat = ta.crossunder(close, TRF)
plotshape(showsignals and al, title='Long', text='BUY', style=shape.labelup, textcolor=color.white, size=size.tiny, location=location.belowbar, color=color.rgb(0, 19, 230))
plotshape(showsignals and sat, title='Short', text='SELL', style=shape.labeldown, textcolor=color.white, size=size.tiny, location=location.abovebar, color=color.rgb(0, 19, 230))
alertcondition(al, title='Long', message='Long')
alertcondition(sat, title='Short', message='Short')
Trfff = plot(TRF)
mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0)
longFillColor = close > TRF ? color.green : na
shortFillColor = close < TRF ? color.red : na
fill(mPlot, Trfff, title='UpTrend Highligter', color=longFillColor, transp=90)
fill(mPlot, Trfff, title='DownTrend Highligter', color=shortFillColor, transp=90)

//////////////////////



renk1 = input(true, "Mum Renk Ayarları?")
mumrenk = input(true,title="Trend Bazlı Mum Rengi Değişimi?")
htaColor = renk1 ? (al ? color.rgb(224, 230, 57) : #E56337) : #c92626
barcolor(color = mumrenk ? (renk1 ? htaColor : na) : na)
if (al) and window()
    strategy.entry("Al", strategy.long)
if (sat) and window()
    strategy.entry("Sat", strategy.short)


per1(pcnt) =>
    strategy.position_size != 0 ? math.round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
zarkesmgb = input.float(title='Zarar Kes Yüzdesi', defval=100, minval=0.01)
zarkeslos = per1(zarkesmgb)
q1 = input.int(title='Satış Lot Sayısı 1.Kısım %', defval=5, minval=1)
q2 = input.int(title='Satış Lot Sayısı 2.Kısım %', defval=8, minval=1)
q3 = input.int(title='Satış Lot Sayısı 3.Kısım %', defval=13, minval=1)
q4 = input.int(title='Satış Lot Sayısı 4.Kısım %', defval=21, minval=1)
tp1 = input.float(title='Kar Yüzdesi 1.Kısım', defval=13, minval=0.01)
tp2 = input.float(title='Kar Yüzdesi 2.Kısım', defval=21, minval=0.01)
tp3 = input.float(title='Kar Yüzdesi 3.Kısım', defval=29, minval=0.01)
tp4 = input.float(title='Kar Yüzdesi 4.Kısım', defval=34, minval=0.01)
strategy.exit('✨KS1', qty_percent=q1, profit=per1(tp1), loss=zarkeslos)
strategy.exit('✨KS2', qty_percent=q2, profit=per1(tp2), loss=zarkeslos)
strategy.exit('✨KS3', qty_percent=q3, profit=per1(tp3), loss=zarkeslos)
strategy.exit('✨KS4', qty_percent=q4, profit=per1(tp4), loss=zarkeslos)