Les ressources ont été chargées... Je charge...

Stratégie de moyenne mobile cinq fois plus forte

Auteur:ChaoZhang est là., Date: 2024-05-23 18h14 et 35 min
Les étiquettes:Le taux d'intérêtLa WMASMATMAVARLa WWMAZLEMATSF

img

Résumé

La stratégie des moyennes mobiles cinq fois plus fortes est une stratégie de trading basée sur plusieurs moyennes mobiles. Cette stratégie utilise 5 moyennes mobiles de différentes périodes et types pour identifier les fortes tendances sur le marché. Les 3 premières moyennes mobiles sont les composantes principales de la stratégie, principalement utilisées pour l'identification des tendances et la génération de signaux, tandis que les 4ème et 5ème moyennes mobiles sont principalement utilisées pour le jugement auxiliaire et l'analyse visuelle.

En examinant de manière exhaustive les tendances et les relations de position relatives des moyennes mobiles de différents délais et types, cette stratégie permet de déterminer avec précision la direction et la force de la tendance actuelle du marché et d'ajuster en temps opportun les positions en fonction des changements de tendance, de manière à obtenir une bonne rentabilité.

Principe de stratégie

Cette stratégie utilise 5 moyennes mobiles de différents délais et types, à savoir:

  1. Moyenne mobile de niveau 1: affichage personnalisable, étiquette, source de données, échéancier, longueur, largeur de ligne, couleur et type.
  2. Moyenne mobile de niveau 2: affichage personnalisable, étiquette, source de données, échéancier, longueur, largeur de ligne, couleur et type.
  3. Moyenne mobile de niveau 3: affichage personnalisable, étiquette, source de données, délai, longueur, largeur de ligne, couleur et type.
  4. Moyenne mobile de niveau 4: principalement utilisée pour le jugement auxiliaire, l'affichage personnalisable, l'étiquette, la source de données, la période, la longueur, la largeur de ligne et la couleur.
  5. Moyenne mobile de niveau 5: principalement utilisée pour le jugement auxiliaire, l'affichage personnalisable, l'étiquette, la source de données, la période, la longueur, la largeur de ligne et la couleur.

Les types de ces 5 moyennes mobiles peuvent être réglés de manière flexible, notamment SMA, EMA, WMA, TMA, VAR, WWMA, ZLEMA, TSF et 8 autres types.

L'idée de base de cette stratégie est de déterminer la direction et la force de la tendance en utilisant plusieurs confirmations de tendance des moyennes mobiles de différents délais et types:

  • Lorsque le prix de clôture est supérieur aux moyennes mobiles des niveaux 1, 2 et 3, optez pour un long;
  • Lorsque le prix de clôture est inférieur aux moyennes mobiles des niveaux 1, 2 et 3, passer à la vente à découvert;
  • Lors de la détention d'une position longue, si le prix de clôture tombe en dessous des moyennes mobiles des niveaux 1 et 2, la position longue est fermée;
  • Lors de la détention d'une position courte, si le prix de clôture dépasse les moyennes mobiles des niveaux 1 et 2, la position courte est fermée.

En outre, cette stratégie affichera la couleur des chandeliers en fonction de la position actuelle:

  • Lorsque vous maintenez une position longue, le chandelier est vert;
  • Lorsque vous maintenez une position courte, le chandelier est rouge;
  • Dans d'autres cas, le chandelier est gris.

Les avantages de la stratégie

  1. Cette stratégie utilise une combinaison de plusieurs moyennes mobiles à moyen et à long terme pour déterminer les tendances, avec une forte capacité de reconnaissance des tendances, qui peut saisir efficacement les principales tendances du marché.
  2. Les paramètres de cette stratégie peuvent être fixés de manière flexible, y compris le type, le délai, la durée des moyennes mobiles, etc., qui peuvent être optimisés en fonction des différentes caractéristiques du marché et des préférences des investisseurs.
  3. Adaptabilité à de multiples marchés. Ce jugement des tendances est principalement basé sur le mouvement des prix lui-même, avec une forte adaptabilité aux marchés, et peut être utilisé sur de multiples marchés tels que les actions, les contrats à terme, les changes, les crypto-monnaies, etc.
  4. La logique de base de cette stratégie est simple et claire, facile à comprendre et à mettre en œuvre, sans nécessiter de modèles mathématiques trop complexes.

Risques stratégiques

  1. Cette stratégie fonctionne généralement sur les marchés à plage et peut entraîner plus de transactions à faible perte, ce qui entraîne une diminution du bénéfice net.
  2. Risque d'optimisation des paramètres. Cette stratégie utilise de nombreux paramètres. Si un backtesting suffisant des données historiques et une optimisation des paramètres ne sont pas effectués, cela peut entraîner de plus grands retards dans les futures transactions en direct.
  3. Risque d'inversion de tendance. Cette stratégie est principalement adaptée aux marchés en tendance. Une fois que la tendance du marché s'inverse, cette stratégie peut continuer à négocier dans la direction de la tendance initiale, causant des pertes.

Pour réduire les risques susmentionnés, les améliorations suivantes peuvent être envisagées:

  1. Ajoutez la détection de marché limitée à la plage et la logique de jugement pour réduire le nombre de transactions sur les marchés non tendance.
  2. Effectuer suffisamment de tests d'optimisation des paramètres sur cette stratégie pour trouver une combinaison optimale de paramètres robuste.
  3. En même temps, d'autres indicateurs ou signaux peuvent être utilisés pour confirmer les renversements de tendance et ajuster les positions en temps opportun.

Directions d'optimisation de la stratégie

  1. Introduire davantage d'indicateurs de confirmation de tendance, tels que le MACD, le DMI, etc., pour améliorer la précision du jugement de tendance.
  2. Pour les marchés à plage, envisagez d'introduire une logique d'exploitation qui puisse s'adapter aux marchés à plage, tels que le trading de réseau.
  3. Pour les différentes caractéristiques du marché, optimiser les paramètres de la stratégie séparément pour améliorer l'adaptabilité.
  4. Considérez de combiner cette stratégie avec d'autres stratégies, telles qu'une combinaison de stratégie de tendance + stratégie de plage, stratégie de tendance + stratégie de contre-tendance, etc., afin d'améliorer la robustesse de la stratégie.

Résumé

La stratégie de moyenne mobile cinq fois forte est une stratégie de trading basée sur plusieurs confirmations de tendance. En considérant de manière exhaustive les tendances et les relations de position relatives des moyennes mobiles de différents délais et types, elle peut déterminer relativement avec précision la direction et la force de la tendance actuelle du marché et ajuster en temps opportun les positions en fonction des changements de tendance. La logique de la stratégie est simple et claire, les paramètres sont flexibles et ajustables, et elle est adaptable à plusieurs marchés. Cependant, elle fonctionne généralement sur les marchés d'entrée de gamme, et il existe certains risques d'optimisation des paramètres et de renversement de tendance.


/*backtest
start: 2023-05-17 00:00:00
end: 2024-05-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Quintuple Strong Moving Average Strategy","QuisMa", overlay=true, margin_long=100, margin_short=100)

// 1
mav1_show = input.bool(true, 'Show Plot', group='Level 1 ', inline='mav1_0')
mav1_label = input.bool(true, 'Show Label', group='Level 1 ', inline='mav1_0')
mav1_source = input.source(close, '', group='Level 1 ', inline='mav1_1')
mav1_timeframe = input.timeframe('5', '', group='Level 1 ', inline='mav1_1')
mav1_length = input.int(50, 'Length', group='Level 1 ', inline='mav1_3')
mav1_size = input.int(2000, 'Size', minval=1, group='Level 1 ', inline='mav1_3')
mav1_width = input.int(2, '', minval=0, group='Level 1 ', inline='mav1_2')
mav1_color = input.color(color.new(#ffd000, 0), '', group='Level 1 ', inline='mav1_2')
mav1_type = input.string(title='Moving Average Type 1', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF'])

// 2
mav2_show = input.bool(true, 'Show Plot', group='Level 2', inline='mav2_0')
mav2_label = input.bool(true, 'Show Label', group='Level 2', inline='mav2_0')
mav2_source = input.source(close, '', group='Level 2', inline='mav2_1')
mav2_timeframe = input.timeframe('30', '', group='Level 2', inline='mav2_1')
mav2_length = input.int(50, 'Length', group='Level 2', inline='mav2_3')
mav2_size = input.int(2000, 'Size', minval=1, group='Level 2', inline='mav2_3')
mav2_width = input.int(2, '', minval=0, group='Level 2', inline='mav2_2')
mav2_color = input.color(color.new(#ffd000, 0), '', group='Level 2', inline='mav2_2')
mav2_type = input.string(title='Moving Average Type 2', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF'])

// 3
mav3_show = input.bool(true, 'Show Plot', group='Level 3', inline='mav3_0')
mav3_label = input.bool(true, 'Show Label', group='Level 3', inline='mav3_0')
mav3_source = input.source(close, '', group='Level 3', inline='mav3_1')
mav3_timeframe = input.timeframe('60', '', group='Level 3', inline='mav3_1')
mav3_length = input.int(50, 'Length', group='Level 3', inline='mav3_3')
mav3_size = input.int(2000, 'Size', minval=1, group='Level 3', inline='mav3_3')
mav3_width = input.int(2, '', minval=0, group='Level 3', inline='mav3_2')
mav3_color = input.color(color.new(#ffd000, 0), '', group='Level 3', inline='mav3_2')
mav3_type = input.string(title='Moving Average Type 3', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF'])

// 4
mav4_show = input.bool(true, 'Show Plot', group='Level 4', inline='mav4_0')
mav4_label = input.bool(true, 'Show Label', group='Level 4', inline='mav4_0')
mav4_source = input.source(close, '', group='Level 4', inline='mav4_1')
mav4_timeframe = input.timeframe('480', '', group='Level 4', inline='mav4_1')
mav4_length = input.int(50, 'Length', group='Level 4', inline='mav4_3')
mav4_size = input.int(2000, 'Size', minval=1, group='Level 4', inline='mav4_3')
mav4_width = input.int(2, '', minval=0, group='Level 4', inline='mav4_2')
mav4_color = input.color(color.new(#ffd000, 0), '', group='Level 4', inline='mav4_2')
mav4_type = input.string(title='Moving Average Type 4', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF'])

// 5
mav5_show = input.bool(true, 'Show Plot', group='Level 5', inline='mav5_0')
mav5_label = input.bool(true, 'Show Label', group='Level 5', inline='mav5_0')
mav5_source = input.source(close, '', group='Level 5', inline='mav5_1')
mav5_timeframe = input.timeframe('720', '', group='Level 5', inline='mav5_1')
mav5_length = input.int(50, 'Length', group='Level 5', inline='mav5_3')
mav5_size = input.int(2000, 'Size', minval=1, group='Level 5', inline='mav5_3')
mav5_width = input.int(2, '', minval=0, group='Level 5', inline='mav5_2')
mav5_color = input.color(color.new(#ffd000, 0), '', group='Level 5', inline='mav5_2')
mav5_type = input.string(title='Moving Average Type 5', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF'])


// FUNCTIONS {{{
candle_size_ms = time - time[1]  // milliseconds of a candle

timetostring(tms) =>
    d_ = math.floor(tms / 86400)
    h_ = math.floor((tms - d_ * 86400) / 3600)
    m_ = math.floor((tms - d_ * 86400 - h_ * 3600) / 60)
    s_ = math.floor(tms - d_ * 86400 - h_ * 3600 - m_ * 60)
    ret = d_ > 0 ? str.tostring(d_) + ' D ' : ''
    ret += (h_ > 0 ? str.tostring(h_) + ' H ' : '')
    ret += (m_ > 0 ? str.tostring(m_) + ' m ' : '')
    if d_ == 0
        ret += (s_ > 0 ? str.tostring(s_) + ' s ' : '')
        ret
    ret

tftostring(tf) =>
    tfa = str.split(tf, '')
    tfalast = array.get(tfa, array.size(tfa) - 1)
    tfalastIsNum = na(str.tonumber(tfalast)) ? false : true
    txt = tfalastIsNum ? timetostring(str.tonumber(tf) * 60) : tf
    txt

htfLabel(htfy, tf, col) =>
    txt = tftostring(tf)
    htftxt = 'ᐊ ' + txt
    htftip = 'HTF  [ ' + txt + ' ] ' + str.tostring(htfy, '#.##')
    label.new(x=time + candle_size_ms * 2, y=htfy, xloc=xloc.bar_time, yloc=yloc.price, color=color.new(color.black, 100), textcolor=col, style=label.style_label_left, size=size.normal, text=htftxt, tooltip=htftip)

// Moving Averages Functions {{{
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 = math.sum(vud1, 9)
    vDD = math.sum(vdd1, 9)
    vCMO = nz((vUD - vDD) / (vUD + vDD))
    VAR = 0.0
    VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1])
    VAR

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

Zlema_Func(src, length) =>
    zxLag = length / 2 == math.round(length / 2) ? length / 2 : (length - 1) / 2
    zxEMAData = src + src - src[zxLag]
    ZLEMA = ta.ema(zxEMAData, length)
    ZLEMA

Tsf_Func(src, length) =>
    lrc = ta.linreg(src, length, 0)
    lrc1 = ta.linreg(src, length, 1)
    lrs = lrc - lrc1
    TSF = ta.linreg(src, length, 0) + lrs
    TSF

getMA(src, length, mav_type) =>
    ma = 0.0
    if mav_type == 'SMA'
        ma := ta.sma(src, length)
    if mav_type == 'EMA'
        ma := ta.ema(src, length)
    if mav_type == 'WMA'
        ma := ta.wma(src, length)
    if mav_type == 'TMA'
        ma := ta.sma(ta.sma(src, math.ceil(length / 2)), math.floor(length / 2) + 1)
    if mav_type == 'VAR'
        ma := Var_Func(src, length)
    if mav_type == 'WWMA'
        ma := Wwma_Func(src, length)
    if mav_type == 'ZLEMA'
        ma := Zlema_Func(src, length)
    if mav_type == 'TSF'
        ma := Tsf_Func(src, length)
    ma

mav1 = request.security(syminfo.tickerid, mav1_timeframe, getMA(mav1_source, mav1_length, mav1_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
plot(mav1_show ? mav1 : na, 'mav 1', color=mav1_color, linewidth=mav1_width, show_last=mav1_size)
var label mav1lbl = na
label.delete(mav1lbl)
mav1lbl := mav1_label ? htfLabel(mav1, mav1_timeframe, mav1_color) : na

mav2 = request.security(syminfo.tickerid, mav2_timeframe, getMA(mav2_source, mav2_length, mav2_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
plot(mav2_show ? mav2 : na, 'mav 2', color=mav2_color, linewidth=mav2_width, show_last=mav2_size)
var label mav2lbl = na
label.delete(mav2lbl)
mav2lbl := mav2_label ? htfLabel(mav2, mav2_timeframe, mav2_color) : na

mav3 = request.security(syminfo.tickerid, mav3_timeframe, getMA(mav3_source, mav3_length, mav3_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
plot(mav3_show ? mav3 : na, 'mav 3', color=mav3_color, linewidth=mav3_width, show_last=mav3_size)
var label mav3lbl = na
label.delete(mav3lbl)
mav3lbl := mav3_label ? htfLabel(mav3, mav3_timeframe, mav3_color) : na

mav4 = request.security(syminfo.tickerid, mav4_timeframe, getMA(mav4_source, mav4_length, mav4_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
plot(mav4_show ? mav4 : na, 'mav 4', color=mav4_color, linewidth=mav4_width, show_last=mav4_size)
var label mav4lbl = na
label.delete(mav4lbl)
mav4lbl := mav4_label ? htfLabel(mav4, mav4_timeframe, mav4_color) : na

mav5 = request.security(syminfo.tickerid, mav5_timeframe, getMA(mav5_source, mav5_length, mav5_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
plot(mav5_show ? mav5 : na, 'mav 5', color=mav5_color, linewidth=mav5_width, show_last=mav5_size)
var label mav5lbl = na
label.delete(mav5lbl)
mav5lbl := mav5_label ? htfLabel(mav5, mav5_timeframe, mav5_color) : na

// Alış ve Satış Koşulları
alisKosulu = close > mav1 and close > mav2 and close > mav3
satisKosulu = close < mav1 and close < mav2 and close < mav3

// Alış ve Satış Sinyalleri
if (alisKosulu and not satisKosulu)
    strategy.entry("Alış", strategy.long)
if (satisKosulu and not alisKosulu)
    strategy.entry("Satış", strategy.short)

// Pozisyonları Kapatma Koşulları
if (strategy.opentrades > 0)
    if (close < mav1 and close < mav2 and strategy.position_size > 0)
        strategy.close("Alış")
    if (close > mav1 and close > mav2 and strategy.position_size < 0)
        strategy.close("Satış")

// Mum Rengi Ayarlama
longKosul = strategy.opentrades > 0 and strategy.position_size > 0
shortKosul = strategy.opentrades > 0 and strategy.position_size < 0

barcolor(longKosul ? color.green : shortKosul ? color.red : color.gray)


Relationnée

Plus de