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 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.
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
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
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)