Stratégie de trading de suivi intelligente basée sur la double moyenne mobile


Date de création: 2024-02-18 15:58:08 Dernière modification: 2024-02-18 15:58:08
Copier: 2 Nombre de clics: 505
1
Suivre
1617
Abonnés

Stratégie de trading de suivi intelligente basée sur la double moyenne mobile

Aperçu

La stratégie de suivi des tendances basée sur la ligne de parité et un indicateur spécifique. Elle utilise deux paramètres différents pour construire des canaux de parité et, en combinaison avec les indicateurs OTT, définit des limites supérieures et inférieures pour les canaux, permettant un suivi intelligent des tendances des prix.

Principe de stratégie

La stratégie utilise principalement deux moyennes mobiles et des indicateurs OTT pour construire des canaux d’adaptation, selon les principes suivants:

  1. Calculer la ligne rapide MAvg, avec le prix de clôture de CLOSE et la ligne moyenne personnalisée comme entrées, de longueur 5;

  2. Calculer le Stop long et le Stop court en fonction du MAvg et du pourcentage de réglage;

  3. Calculer le MT de stop mobile de la chaîne dans l’indicateur OTT, calculer le prix de la chaîne OTT en fonction de l’état de vide;

  4. Le signal de transaction est généré lorsque le prix dépasse l’OTT.

Le processus ci-dessus construit un canal d’adaptation qui permet à la stratégie de suivre en temps réel les tendances des changements de prix et de générer des signaux de transaction.

Avantages stratégiques

Cette stratégie présente les avantages suivants:

  1. La structure de la chaîne à double ligne permet de capturer efficacement les tendances des prix.
  2. L’indicateur OTT définit les pertes mobiles de la chaîne et contrôle les risques.
  3. La structure de la passerelle est adaptée pour répondre rapidement aux variations de prix.
  4. Les paramètres de la stratégie sont flexibles et peuvent être optimisés pour différentes variétés et périodes.

Risque stratégique

Cette stratégie comporte aussi des risques:

  1. Les lignes biunivoques sont facilement déviées et peuvent générer de faux signaux.
  2. Les paramètres OTT mal définis peuvent être trop radicaux ou conservateurs, ce qui affecte les performances de la stratégie.
  3. La stratégie est basée uniquement sur des indicateurs techniques et ne prend pas en compte les facteurs fondamentaux.

Les risques mentionnés ci-dessus peuvent être améliorés et optimisés par l’optimisation des paramètres, en combinaison avec d’autres indicateurs ou des signaux de filtrage de base.

Orientation de l’optimisation de la stratégie

Cette stratégie peut être optimisée dans les directions suivantes:

  1. Optimiser les paramètres de la ligne moyenne en choisissant la combinaison de paramètres appropriée pour la variété et la période;
  2. Optimiser les paramètres de bande passante des canaux, en équilibrant la sensibilité et la stabilité du suivi;
  3. Le filtrage des signaux est basé sur le volume des transactions.
  4. Le filtrage de l’orientation des transactions est basé sur les conditions de base.

Résumer

Cette stratégie est une stratégie de suivi de tendances basée sur des canaux bi-homogènes et des indicateurs OTT. L’idée centrale est de construire des canaux adaptatifs et de générer des signaux de transaction avec des percées.

Code source de la stratégie
/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="BugRA_Trade_Strategy", shorttitle="BugRA_Trade_Strategy", overlay=true)

// Kullanıcı Girdileri
length = input(5, title="Period", minval=1)
percent = input(1, title="Sihirli Yüzde", type=input.float, step=0.1, minval=0)
mav = input(title="Hareketli Ortalama Türü", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
wt_n1 = input(10, title="Kanal Periyodu")
wt_n2 = input(21, title="Averaj Uzunluğu")
src = close

// Tarih Aralığı Girdileri
startDate = input(20200101, title="Başlangıç Tarihi (YYYYMMDD)")
endDate = input(20201231, title="Bitiş Tarihi (YYYYMMDD)")

// Tarih Filtresi Fonksiyonu
isDateInRange() => true

// Özel Fonksiyonlar
Var_Func(src, length) =>
    valpha = 2 / (length + 1)
    vud1 = src > src[1] ? src - src[1] : 0
    vdd1 = src < src[1] ? src[1] - src : 0
    vUD = sum(vud1, length)
    vDD = sum(vdd1, length)
    vCMO = (vUD - vDD) / (vUD + vDD)
    varResult = 0.0
    varResult := nz(valpha * abs(vCMO) * src + (1 - valpha * abs(vCMO)) * nz(varResult[1]))
    varResult

Wwma_Func(src, length) =>
    wwalpha = 1 / length
    wwma = 0.0
    wwma := wwalpha * src + (1 - wwalpha) * nz(wwma[1])
    wwma

Zlema_Func(src, length) =>
    zxLag = floor(length / 2)
    zxEMAData = src + (src - src[zxLag])
    zlema = ema(zxEMAData, length)
    zlema

Tsf_Func(src, length) =>
    lrc = linreg(src, length, 0)
    lrs = lrc - linreg(src, length, 1)
    tsf = lrc + lrs
    tsf

getMA(src, length) =>
    ma = mav == "SMA" ? sma(src, length) :
         mav == "EMA" ? ema(src, length) :
         mav == "WMA" ? wma(src, length) :
         mav == "TMA" ? sma(sma(src, ceil(length / 2)), floor(length / 2) + 1) :
         mav == "VAR" ? Var_Func(src, length) :
         mav == "WWMA" ? Wwma_Func(src, length) :
         mav == "ZLEMA" ? Zlema_Func(src, length) :
         mav == "TSF" ? Tsf_Func(src, length) : na

// Strateji Hesaplamaları
MAvg = getMA(src, length)
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT = MAvg > MT ? MT*(200+percent)/200 : MT*(200-percent)/200

plot(OTT, title="BugRA", color=color.rgb(251, 126, 9))

// Alım ve Satım Koşulları
longCondition = crossover(src, OTT) and isDateInRange()
shortCondition = crossunder(src, OTT) and isDateInRange()

// Strateji Giriş ve Çıkış Emirleri
if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.close("Long")