Stratégie de négociation croisée de moyenne mobile triangulaire

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

img

Résumé

La stratégie de négociation croisée de la moyenne mobile triangulaire (TMA) est une stratégie d'analyse technique typique. Elle utilise trois lignes de moyenne mobile de différentes durées de temps pour capturer les tendances et mettre en œuvre un trading à faible risque. Lorsque la moyenne mobile à court terme traverse la moyenne mobile à moyen terme vers le haut et que la moyenne mobile à moyen terme est au-dessus de la moyenne mobile à long terme, un signal d'achat est généré. Lorsque la moyenne mobile à court terme traverse en dessous de la moyenne mobile à moyen terme vers le bas et que la moyenne mobile à moyen terme est en dessous de la moyenne mobile à long terme, un signal de vente est généré.

La logique de la stratégie

La stratégie TMA repose principalement sur trois lignes moyennes mobiles pour déterminer la direction de la tendance. La moyenne mobile à court terme répond sensiblement aux variations de prix; la moyenne mobile à moyen terme fournit un jugement plus clair de la tendance; la moyenne mobile à long terme filtre le bruit du marché et détermine la direction de la tendance à long terme.

Lorsque la moyenne mobile à court terme traverse la moyenne mobile à moyen terme vers le haut, cela indique que le prix a commencé à se détériorer. À ce moment-là, si la moyenne mobile à moyen terme est supérieure à la moyenne mobile à long terme, cela signifie que le marché actuel est en hausse. Par conséquent, un signal d'achat est généré ici.

Au contraire, lorsque la moyenne mobile à court terme dépasse la moyenne mobile à moyen terme à la baisse, cela indique que le prix a commencé à se détériorer. À ce moment-là, si la moyenne mobile à moyen terme est inférieure à la moyenne mobile à long terme, cela signifie que le marché actuel est en baisse.

Cette stratégie définit également des lignes de stop-loss et de take-profit. Après l'entrée d'un commerce, les prix de stop-loss et de take-profit seront calculés en fonction des paramètres en pourcentage. Si le prix touche l'une ou l'autre ligne, la position sera fermée.

Analyse des avantages

  • Utilisez trois moyennes mobiles ensemble pour améliorer la précision de jugement
  • Définir le stop-loss et le take-profit pour contrôler efficacement le risque par transaction
  • Paramètres de moyenne mobile personnalisables adaptés à différents produits
  • Sept options pour les types de moyennes mobiles, les types de stratégies diversifiées

Analyse des risques et solutions

  • Des signaux erronés lors de la consolidation de trois MAs

    Solution: régler correctement les paramètres MA pour éviter les signaux erronés

  • Pourcentage de stop-loss/take-profit trop agressif

    Solution: pourcentages de réglage fin; ne peuvent être ni trop grands ni trop petits

  • Réglage incorrect des paramètres conduisant à un nombre trop important ou trop faible de transactions

    Solution: tester différentes combinaisons de paramètres pour trouver le paramètre optimal

Directions d'optimisation

La stratégie de l'AMT peut être optimisée par les aspects suivants:

  • Testez différentes combinaisons de type et de longueur pour trouver l'optimum

    Tester différentes combinaisons de longueur ou de type de MA pour obtenir les meilleurs résultats

  • Ajout d'autres indicateurs techniques comme filtres de signaux

    Ajouter des indicateurs tels que KDJ, MACD, etc. pour une vérification multifactorielle

  • Sélectionner les paramètres en fonction des caractéristiques du produit

    Réduire les périodes d'autorisation de mise en marché pour les produits volatils; allonger les périodes d'autorisation de mise en marché pour les produits stables

  • Utiliser l'apprentissage automatique pour trouver les paramètres optimaux

    Paramètre automatique balayage pour localiser rapidement optimale

Conclusion

La stratégie TMA Crossover est une stratégie de suivi de tendance facile à utiliser. Elle utilise trois MA ensemble pour capturer les tendances et définit un stop-loss / take-profit pour contrôler les risques, permettant ainsi des profits stables. D'autres améliorations peuvent être obtenues grâce à l'optimisation des paramètres et à l'intégration d'indicateurs techniques supplémentaires. En conclusion, cette stratégie convient aux investisseurs qui recherchent des gains réguliers.


/*backtest
start: 2024-01-08 00:00:00
end: 2024-01-15 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Kozlod - 3 MA strategy with SL/PT", shorttitle="kozlod_3ma", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 5)

// 
// author: Kozlod
// date: 2018-03-25
// 

////////////
// INPUTS //
////////////

ma_type        = input(title = "MA Type",            defval = "SMA", options = ['SMA', 'EMA', 'WMA', 'VWMA', 'HMA', 'SMMA', 'DEMA'])
short_ma_len   = input(title = "Short MA Length",    defval = 5,     minval = 1)
short_ma_src   = input(title = "Short MA Source",    defval = close)
medium_ma_len  = input(title = "Medium MA Length",   defval = 20,    minval = 2)
medium_ma_src  = input(title = "Medium MA Source",   defval = close)
long_ma_len    = input(title = "Long MA Length",     defval = 100,   minval = 3)
long_ma_src    = input(title = "Long MA Source",     defval = close)

sl_lev_perc    = input(title = "SL Level % (0 - Off)", type = float,   defval = 0,  minval = 0, step = 0.01)
pt_lev_perc    = input(title = "PT Level % (0 - Off)", type = float,   defval = 0,  minval = 0, step = 0.01)

// Set initial values to 0
short_ma  = 0.0
long_ma   = 0.0
medium_ma = 0.0

// Simple Moving Average (SMA)
if ma_type == 'SMA' 
    short_ma  := sma(short_ma_src,  short_ma_len)
    medium_ma := sma(medium_ma_src, medium_ma_len)
    long_ma   := sma(long_ma_src,   long_ma_len)

// Exponential Moving Average (EMA)
if ma_type == 'EMA'
    short_ma  := ema(short_ma_src,  short_ma_len)
    medium_ma := ema(medium_ma_src, medium_ma_len)
    long_ma   := ema(long_ma_src,   long_ma_len)

// Weighted Moving Average (WMA)
if ma_type == 'WMA'
    short_ma  := wma(short_ma_src,  short_ma_len)
    medium_ma := wma(medium_ma_src, medium_ma_len)
    long_ma   := wma(long_ma_src,   long_ma_len)

// Hull Moving Average (HMA)
if ma_type == 'HMA'
    short_ma  := wma(2*wma(short_ma_src,  short_ma_len  / 2) - wma(short_ma_src,  short_ma_len),  round(sqrt(short_ma_len)))
    medium_ma := wma(2*wma(medium_ma_src, medium_ma_len / 2) - wma(medium_ma_src, medium_ma_len), round(sqrt(medium_ma_len)))
    long_ma   := wma(2*wma(long_ma_src,   long_ma_len   / 2) - wma(long_ma_src,   long_ma_len),   round(sqrt(long_ma_len)))

// Volume-weighted Moving Average (VWMA)
if ma_type == 'VWMA'
    short_ma  := vwma(short_ma_src,  short_ma_len)
    medium_ma := vwma(medium_ma_src, medium_ma_len)
    long_ma   := vwma(long_ma_src,   long_ma_len)

// Smoothed Moving Average (SMMA)    
if ma_type == 'SMMA'
    short_ma  := na(short_ma[1])  ? sma(short_ma_src, short_ma_len)   : (short_ma[1]  * (short_ma_len  - 1) + short_ma_src)  / short_ma_len
    medium_ma := na(medium_ma[1]) ? sma(medium_ma_src, medium_ma_len) : (medium_ma[1] * (medium_ma_len - 1) + medium_ma_src) / medium_ma_len
    long_ma   := na(long_ma[1])   ? sma(long_ma_src,  long_ma_len)    : (long_ma[1]   * (long_ma_len   - 1) + long_ma_src)   / long_ma_len

// Double Exponential Moving Average (DEMA)
if ma_type == 'DEMA'
    e1_short  = ema(short_ma_src , short_ma_len)
    e1_medium = ema(medium_ma_src, medium_ma_len)
    e1_long   = ema(long_ma_src,   long_ma_len)
    
    short_ma  := 2 * e1_short  - ema(e1_short,  short_ma_len)
    medium_ma := 2 * e1_medium - ema(e1_medium, medium_ma_len)
    long_ma   := 2 * e1_long   - ema(e1_long,   long_ma_len)

/////////////
// SIGNALS //
/////////////

long_signal  = crossover( short_ma, medium_ma) and medium_ma > long_ma
short_signal = crossunder(short_ma, medium_ma) and medium_ma < long_ma

// Calculate PT/SL levels 
// Initial values 
last_signal    = 0
prev_tr_price  = 0.0
pt_level       = 0.0
sl_level       = 0.0

// Calculate previous trade price
prev_tr_price := (long_signal[1] and nz(last_signal[2]) != 1) or (short_signal[1] and nz(last_signal[2]) != -1) ? open : nz(last_signal[1]) != 0 ? prev_tr_price[1] : na

// Calculate SL/PT levels 
pt_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 + pt_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 - pt_lev_perc / 100)  : na
sl_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 - sl_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 + sl_lev_perc / 100)  : na

// Calculate if price hit sl/pt 
long_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) ==  1 and close >= pt_level
long_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) ==  1 and close <= sl_level

short_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) ==  -1 and close <= pt_level
short_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) ==  -1 and close >= sl_level

// What is last active trade? 
last_signal := long_signal ? 1 : short_signal ? -1 : long_hit_pt or long_hit_sl or short_hit_pt or short_hit_sl ? 0 : nz(last_signal[1])

//////////////
// PLOTTING //
//////////////

// Plot MAs
plot(short_ma,  color = red,    linewidth = 2)
plot(medium_ma, color = green,  linewidth = 2)
plot(long_ma,   color = yellow, linewidth = 2)


// Plot Levels 
plotshape(prev_tr_price, style = shape.cross, color = gray, location  = location.absolute, size = size.small)


plotshape(sl_lev_perc > 0 ? sl_level : na, style = shape.cross, color = red,   location  = location.absolute, size = size.small)
plotshape(pt_lev_perc > 0 ? pt_level : na, style = shape.cross, color = green, location  = location.absolute, size = size.small)

//////////////
// STRATEGY //
//////////////

strategy.entry("long",  true,  when = long_signal)
strategy.entry("short", false, when = short_signal)

strategy.close("long",  when = long_hit_pt  or long_hit_sl)
strategy.close("short", when = short_hit_pt or short_hit_sl)

Plus de