
La Dynamic Moving Average Crossover Combo Strategy est une stratégie de trading composite qui intègre plusieurs indicateurs techniques et une détection des phases du marché. Elle calcule dynamiquement la volatilité du marché en fonction de la distance et de la volatilité des prix par rapport aux moyennes mobiles à long terme.
L’indicateur ATR est utilisé pour calculer la volatilité quotidienne du marché au cours des 14 derniers jours. La volatilité moyenne est ensuite obtenue en filtrant la moyenne mobile simple sur 100 jours.
Si la distance est supérieure à 1,5 fois la volatilité moyenne, et que la direction est claire, on considère qu’il s’agit d’une tendance. Si la volatilité actuelle est supérieure à 1,5 fois la volatilité moyenne, on considère qu’il s’agit d’une situation de choc.
Les EMA rapides ont une période de 10 jours et les SMA lentes une période de 30 jours. Lorsque les EMA rapides traversent les SMA lentes, un signal d’achat est produit.
Calculer les paramètres 12, 26 et 9 du MACD. Un signal d’achat est généré lorsque la colonne MACD devient positive.
Si la largeur de la chaîne est inférieure à sa propre SMA de 20 jours, elle est considérée comme une période de correction.
Période d’oscillation: croisement rapide ou correction de la colonne MACD et clôture dans les bandes de Bollinger.
Période de tendance: croisement de ligne rapide ou MACD de la colonne de changement d’entrée régulière
La période d’élaboration: les lignes se croisent lentement et les prix de clôture sont plus élevés que ceux des bandes inférieures.
Si les conditions suivantes sont remplies, la position est nulle: le MACD est négatif sur deux lignes K consécutives et le cours de clôture est en baisse pendant deux jours consécutifs.
La période de choc: lorsque le StockRSI entre dans la zone de survente.
La période de rassemblement: lorsque les prix sont inférieurs à ceux de la Upper Band.
Il s’agit d’une stratégie de négociation intelligente qui combine des jugements sur les conditions du marché et présente les avantages suivants:
La mise en place d’un système d’exploitation qui réduit l’intervention subjective
Il s’agit d’une stratégie d’adaptation plus adaptée aux conditions du marché.
Une combinaison de plusieurs indicateurs pour une plus grande certitude des signaux.
Les bandes de Bollinger sont automatiquement stoppées pour réduire le risque.
Les conditions de l’opération ont été définies et les signaux ont été filtrés.
Le but de ce jeu est de faire de l’argent en utilisant des machines à sous et des machines à sous.
Les principaux risques sont les suivants:
Une mauvaise configuration des paramètres peut entraîner l’échec de la stratégie.
Les événements imprévus ont provoqué une défaillance du modèle. Il est recommandé de mettre à jour la logique stratégique en temps opportun.
Il est recommandé de choisir un courtier à frais de transaction bas.
La combinaison de plusieurs indicateurs augmente la complexité de la stratégie. Il est recommandé de choisir un indicateur central.
L’optimisation peut se poursuivre à partir des dimensions suivantes:
Optimiser les critères de jugement du marché et améliorer la précision.
Ajout d’un module d’apprentissage automatique permettant l’adaptation des paramètres.
Le traitement de texte est utilisé pour évaluer le risque d’un événement majeur.
Le retour sur investissement multi-marchés pour trouver la meilleure combinaison.
La stratégie de trailing stop a été ajoutée.
La stratégie de la combinaison croisée des moyennes mobiles est une stratégie de trading intelligente multi-indicateurs. Elle est capable de combiner des paramètres d’ajustement de l’environnement du marché pour réaliser des transactions systématisées conditionnelles.
/*backtest
start: 2024-01-28 00:00:00
end: 2024-02-04 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true)
// Volatility
volatility = ta.atr(14)
avg_volatility_sma = ta.sma(volatility, 100)
avg_volatility = na(avg_volatility_sma) ? 0 : avg_volatility_sma
// Market Phase detection
long_term_ma = ta.sma(close, 200)
distance_from_long_term_ma = close - long_term_ma
var bool isTrending = math.abs(distance_from_long_term_ma) > 1.5 * avg_volatility and not na(distance_from_long_term_ma)
var bool isVolatile = volatility > 1.5 * avg_volatility
// EMA/MA Crossover
fast_length = 10
slow_length = 30
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.sma(close, slow_length)
crossover_signal = ta.crossover(fast_ma, slow_ma)
// MACD
[macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9)
macd_signal = crossover_signal or (macdHistogram > 0)
// Bollinger Bands
source = close
basis = ta.sma(source, 20)
upper = basis + 2 * ta.stdev(source, 20)
lower = basis - 2 * ta.stdev(source, 20)
isConsolidating = (upper - lower) < ta.sma(upper - lower, 20)
// StockRSI
length = 14
K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length))
D = ta.sma(K, 3)
overbought = 75
oversold = 25
var float potential_SL = na
var float potential_TP = na
var bool buy_condition = na
var bool sell_condition = na
// Buy and Sell Control Variables
var bool hasBought = false
var bool hasSold = true
// Previous values tracking
prev_macdHistogram = macdHistogram[1]
prev_close = close[1]
// Modify sell_condition with the new criteria
if isVolatile
buy_condition := not hasBought and crossover_signal or macd_signal and (close > lower) and (close < upper)
sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
potential_SL := close - 0.5 * volatility
potential_TP := close + volatility
if isTrending
buy_condition := not hasBought and crossover_signal or macd_signal
sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
potential_SL := close - volatility
potential_TP := close + 2 * volatility
if isConsolidating
buy_condition := not hasBought and crossover_signal and (close > lower)
sell_condition := hasBought and (close < upper) and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
potential_SL := close - 0.5 * volatility
potential_TP := close + volatility
// Update the hasBought and hasSold flags
if buy_condition
hasBought := true
hasSold := false
if sell_condition
hasBought := false
hasSold := true
// Strategy Entry and Exit
if buy_condition
strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP)
strategy.exit("SELL_TS", from_entry="BUY", trail_price=close, trail_offset=close * 0.05)
if sell_condition
strategy.close("BUY")
// Visualization
plotshape(series=buy_condition, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=sell_condition, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)
plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1)
plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr)
plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr)
bgcolor(isVolatile ? color.new(color.purple, 90) : isTrending ? color.new(color.blue, 90) : isConsolidating ? color.new(color.orange, 90) : na)