Stratégie de négociation de moyenne mobile à double suivi intelligent

Auteur:ChaoZhang est là., Date: 2024-02-18 15:58:08 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie de trading de suivi intelligent des moyennes mobiles doubles est une stratégie de suivi des tendances basée sur des moyennes mobiles et des indicateurs spécifiques. La stratégie utilise deux moyennes mobiles avec des paramètres différents pour créer un canal et combine l'indicateur OTT pour définir les limites supérieures et inférieures du canal pour suivre intelligemment les tendances des prix.

Principe de stratégie

La méthodologie de base de cette stratégie consiste à construire un canal adaptatif en utilisant deux moyennes mobiles et l'indicateur OTT, en particulier:

  1. Calculer la ligne rapide MAvg en utilisant comme entrée la moyenne mobile CLOSE et la moyenne mobile personnalisée, d'une longueur de 5 périodes;

  2. Calculer la position LongStop de la ligne longue et la position ShortStop de la ligne courte pour le canal sur la base de MAvg et d'un pourcentage prédéfini;

  3. Calculer la valeur MT de l'indicateur OTT de stop loss du canal et le prix du canal OTT en fonction de la direction longue/courte;

  4. Générer des signaux de négociation lorsque le prix dépasse le OTT.

Le processus ci-dessus permet de suivre en temps réel les changements de tendance des prix, générant des signaux de négociation.

Les avantages de la stratégie

Les avantages de cette stratégie sont les suivants:

  1. La structure de canal de la moyenne mobile double capte efficacement les tendances des prix;
  2. L'indicateur OTT détermine le canal de rupture des pertes pour contrôler les risques;
  3. Une structure de canal adaptative répond rapidement aux variations de prix;
  4. Adaptation flexible des paramètres pour différents produits et délais.

Risques stratégiques

Il y a aussi des risques:

  1. Les moyennes mobiles doubles peuvent former des divergences entraînant de faux signaux;
  2. Les paramètres OTT peuvent être trop agressifs ou conservateurs;
  3. La stratégie repose uniquement sur des indicateurs techniques sans tenir compte des fondamentaux.

Les risques peuvent être pris en compte par l'optimisation des paramètres, l'intégration d'autres indicateurs et des filtres fondamentaux.

Directions d'optimisation

La stratégie peut être optimisée sous plusieurs aspects:

  1. Optimiser les paramètres des moyennes mobiles pour les produits et les délais appropriés;
  2. Optimiser les paramètres de largeur de canal en équilibrant la sensibilité et la stabilité;
  3. Ajouter des filtres basés sur le volume des transactions;
  4. Mettez les filtres de direction basés sur les fondamentaux.

Résumé

En résumé, il s'agit d'une stratégie de suivi de tendance basée sur un canal de moyenne mobile double et un indicateur OTT. L'idée principale est de construire un canal adaptatif et de générer des signaux lorsque les prix se détériorent.


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


Plus de