Stratégie de négociation de l'élan du filtre à double portée

Auteur:ChaoZhang est là., Date: 2024-04-01 10:54:47 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de trading dynamique basée sur un double filtre de gamme. La stratégie calcule des gammes lisses pour des périodes rapides et lentes afin d'obtenir un filtre de gamme complet, qui est utilisé pour déterminer la tendance actuelle des prix. Lorsque le prix dépasse/dépasse cette gamme, la stratégie génère des signaux d'achat/vente.

Principe de stratégie

  1. Calculer des plages lisses pour les périodes rapides et lentes. La plage rapide utilise une période plus courte et un multiple plus petit, tandis que la plage lente utilise une période plus longue et un multiple plus grand.
  2. Utiliser la moyenne des plages rapides et lentes comme filtre de plage globale (TRF).
  3. Déterminez les tendances à la hausse et à la baisse en comparant le prix actuel avec le prix précédent.
  4. Calculer les bandes dynamiques supérieure (FUB) et inférieure (FLB) comme référence pour la tendance.
  5. Générer des signaux d'achat et de vente basés sur la relation entre le prix de clôture et le TRF.
  6. Définir quatre niveaux de prise de bénéfices et un niveau de stop-loss, correspondant à différents pourcentages de position et pourcentages de profit/perte.

Analyse des avantages

  1. Le double filtre de gamme combine des périodes rapides et lentes, permettant à la stratégie de s'adapter aux différents rythmes du marché et de saisir davantage d'opportunités de négociation.
  2. La conception de bandes supérieures et inférieures dynamiques aide la stratégie à s'aligner sur la tendance actuelle et réduit les faux signaux.
  3. Les quatre niveaux de prise de bénéfice par gradient permettent à la stratégie d'obtenir plus de bénéfices lorsque la tendance se poursuit tout en obtenant des gains partiels lorsque la tendance s'inverse.
  4. Le paramètre stop-loss aide à contrôler la perte maximale par transaction et protège la sécurité du compte.

Analyse des risques

  1. Pendant les fluctuations du marché ou les conditions de plage, la stratégie peut générer de nombreux faux signaux, ce qui entraîne des pertes fréquentes de négociation et de commissions.
  2. Les paramètres de prise de bénéfices par dégradation peuvent entraîner un verrouillage prématuré de certains bénéfices, empêchant la stratégie de tirer pleinement parti des mouvements de tendance.
  3. Le paramètre stop-loss peut ne pas éviter complètement les pertes extrêmes causées par des événements de cygne noir.

Direction de l'optimisation

  1. Considérez l'inclusion d'indicateurs plus techniques ou d'indicateurs de sentiment du marché comme conditions auxiliaires pour la détermination de la tendance afin de réduire les faux signaux.
  2. Pour les réglages de prise de profit et de stop-loss, ajustez-les dynamiquement en fonction des différents environnements de marché et instruments de négociation afin d'améliorer l'adaptabilité de la stratégie.
  3. Sur la base des résultats des tests antérieurs, optimiser davantage les paramètres, tels que la sélection des périodes d'intervalle rapide et lente, et les paramètres en pourcentage pour les niveaux de prise de profit et de stop-loss, afin d'améliorer la stabilité et la rentabilité de la stratégie.

Résumé

La stratégie de trading de l'élan du filtre à double plage construit un filtre complet en utilisant des plages lisses à partir de périodes rapides et lentes, combinées à des bandes supérieures et inférieures dynamiques pour déterminer les tendances des prix et générer des signaux d'achat / vente. La stratégie définit également quatre niveaux de prise de profit en gradient et un niveau de stop-loss pour contrôler les risques et verrouiller les profits. Cette stratégie convient à une utilisation sur les marchés en tendance, mais peut générer plus de faux signaux sur les marchés fluctuants.


/*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)



Plus de