Stratégie de trading stop chandelier à moyenne mobile exponentielle

EMA RSI SUPPORT RESISTANCE BREAKOUT
Date de création: 2025-02-25 11:11:35 Dernière modification: 2025-02-25 11:11:35
Copier: 8 Nombre de clics: 348
2
Suivre
319
Abonnés

Stratégie de trading stop chandelier à moyenne mobile exponentielle Stratégie de trading stop chandelier à moyenne mobile exponentielle

Aperçu

La stratégie d’arrêt de la baisse de la moyenne mobile est un système de négociation quantifié basé sur la confirmation de la forme de la baisse et de la tendance de la moyenne mobile. La stratégie est principalement basée sur l’identification de la forme de la baisse spécifique (c’est-à-dire le signal “arrêt de la baisse”) comme point d’entrée, en combinaison avec l’EMA (la moyenne mobile de l’indice) pour confirmer la tendance globale du marché et utiliser le support dynamique et le niveau de résistance pour identifier la rupture du marché.

Principe de stratégie

Le principe central de la stratégie est d’identifier les formes de baisse spécifiques du marché, qui représentent généralement la possibilité d’un retournement de marché à court terme. Le mécanisme de fonctionnement de la stratégie est le suivant:

  1. Détermination de la tendance: déterminer la tendance du marché en comparant la position relative de l’EMA20 et de l’EMA90. Déterminer la tendance à la hausse lorsque l’EMA20 est au-dessus de l’EMA90, et la tendance à la baisse lorsque l’EMA20 est en dessous de l’EMA90

  2. Le signal de l’arrêt de l’aérogare:

    • Les signaux d’arrêt de la baisse d’une tendance à la hausse sont nécessaires: la ligne d’ombre descendante doit être au moins 0,8 fois plus longue que l’entité, la ligne d’ombre montante doit être plus petite que l’entité et le prix de clôture doit être supérieur au prix d’ouverture (ligne solaire).
    • Les signaux d’arrêt de la chute de la tendance à la baisse sont nécessaires: la ligne de l’ombre supérieure doit être au moins 0,8 fois plus longue que la ligne de l’ombre inférieure et le prix de clôture doit être inférieur au prix d’ouverture.
  3. Détection de rupture: identification de la rupture du marché en comparant le prix de clôture actuel avec le niveau de support / résistance (calculé sur la base d’un prix minimum / maximum sur 30 cycles).

  4. Conditions d’entrée: Si un signal de rupture s’affiche alors que le marché est dans une tendance spécifique et qu’il n’y a pas de rupture, la stratégie s’engage selon les paramètres de risque prédéfinis (risque de 2,5% par transaction).

  5. Arrêt de perte: pour les positions multiples, arrêt de perte est fixé à 2,5% en dessous du prix d’entrée; pour les positions vides, arrêt de perte est fixé à 2,5% au-dessus du prix d’entrée.

  6. Conditions d’arrêt: Conditions combinées basées sur le pourcentage de profit et le rapport de rendement au risque. Le multichef exige au moins 7% de profit et un rapport de rendement au risque de pas moins de 3; le vacant exige au moins 6% de profit et un rapport de rendement au risque de pas moins de 3.

Avantages stratégiques

  1. Signaux d’entrée et de sortie clairs: fournissent des signaux de négociation clairs grâce à des tendances de hausse et de baisse spécifiques et à des courbes mobiles, réduisant ainsi l’impact émotionnel des jugements subjectifs.

  2. Mécanisme de confirmation de tendance intégrée: utilisation d’indicateurs EMA sur plusieurs périodes pour confirmer les tendances du marché et améliorer la fiabilité des signaux de négociation.

  3. Identification des supports et résistances dynamiques: les supports et résistances dynamiques calculés à l’aide de fenêtres déroulantes permettent aux stratégies de s’adapter aux différentes phases du marché.

  4. Gestion rigoureuse des risques: paramètres de risque prédéfinis (risque de 2,5% par transaction) et conditions d’arrêt basées sur le rapport risque/rendement, assurant la rationalité de la gestion des fonds.

  5. Critères de différenciation pour les transactions à plusieurs titres: définir des conditions d’entrée et des objectifs de profit différents pour les transactions à plusieurs titres et les titres vides, en s’adaptant aux caractéristiques asymétriques du marché.

  6. Calcul de position dynamique: la taille de position appropriée est calculée automatiquement en fonction de la distance d’arrêt pour assurer la cohérence du risque de chaque transaction.

Risque stratégique

  1. Indicateur en retard: En tant qu’indicateur en retard, l’EMA peut fournir des signaux de retard dans un marché en évolution rapide, ce qui entraîne un mauvais timing d’entrée.

  2. Risque de fausse rupture: le marché peut être exposé à des fausses ruptures, ce qui entraîne la production de faux signaux. La solution consiste à introduire une confirmation de transaction ou à augmenter le cycle de confirmation de rupture.

  3. Défi d’ajustement de la sensibilité: les paramètres du signal d’arrêt de la faillite (par exemple, le rapport entre la ligne d’ombre et l’entité) doivent être ajustés en fonction des différents marchés et des cycles. Une sensibilité excessive peut entraîner une survente des transactions, tandis qu’une rigidité excessive peut entraîner une perte d’opportunité.

  4. Risque de transition de tendance: la stratégie peut générer une série de transactions perdantes pendant la transition de tendance. La solution consiste à augmenter le filtre de force de tendance ou à réduire la fréquence des transactions lorsque la tendance est incertaine.

  5. Inadaptabilité de l’arrêt fixe: l’utilisation du même pourcentage d’arrêt pour toutes les transactions (,5%) peut ne pas s’adapter aux différentes fluctuations du marché. L’utilisation d’un arrêt dynamique basé sur la volatilité peut être envisagée.

  6. Limitation des conditions de filtrage RSI: l’utilisation de filtrage RSI pour les transactions à tête nue peut entraîner une fréquence de négociation déséquilibrée. Il est envisageable d’introduire un mécanisme de filtrage similaire pour les transactions à plusieurs têtes ou d’optimiser les paramètres RSI actuels.

Orientation de l’optimisation de la stratégie

  1. Paramètres d’adaptation au taux d’oscillation: l’introduction d’indicateurs de taux d’oscillation (comme l’ATR) pour ajuster dynamiquement les exigences de ratio de ligne d’ombre et la distance de stop-loss du signal d’arrêt de la chute, permettant à la stratégie de mieux s’adapter aux différentes conditions du marché.

  2. Confirmation de plusieurs fuseaux horaires: confirmation de la tendance à la réintroduction de fuseaux horaires plus élevés (comme le graphique de 1 heure), amélioration de la fiabilité des signaux de transaction et réduction de l’effet des faux signaux.

  3. Optimisation du timing de l’entrée: optimisation du timing de l’entrée en ajoutant des conditions de filtrage supplémentaires (par exemple, indicateur de la force de la tendance, confirmation du volume de transactions) pour améliorer le taux de réussite des transactions.

  4. Système d’arrêt partiel: introduction d’un système d’arrêt par tranches, qui permet de déplacer les pertes au coût ou de bloquer une partie des bénéfices après avoir atteint un certain profit, afin de mieux équilibrer les risques et les rendements.

  5. Élargissement du cycle de rétroaction: un cycle de rétroaction plus complet est effectué dans différents cycles et conditions de marché pour vérifier la solidité et l’adaptabilité de la stratégie.

  6. Optimisation de l’apprentissage automatique: Optimiser automatiquement les paramètres de la stratégie à l’aide de méthodes d’apprentissage automatique pour trouver la combinaison de paramètres optimale pour un marché donné.

  7. Contrôle de la fréquence des transactions: introduction de restrictions de nombre de transactions ou de périodes de refroidissement afin d’éviter les transactions excessives dans des conditions de marché défavorables.

Résumer

La stratégie d’arrêt de la faillite de l’indice mobile est un système de négociation quantitative combinant l’analyse technique et la gestion des risques, qui génère des signaux de négociation en identifiant des formes de faillite spécifiques et en les associant à la confirmation de tendances. Le principal avantage de la stratégie réside dans des règles de négociation claires et un mécanisme de contrôle des risques rigoureux qui rendent les décisions de négociation plus systématiques et plus disciplinées. Cependant, comme toute stratégie d’analyse technique, elle est confrontée à des défis tels que le retard des indicateurs et l’adaptation aux changements de marché.

La stratégie a le potentiel d’obtenir des performances plus stables dans différents environnements de marché en introduisant des améliorations dans des directions telles que l’adaptation automatique des paramètres de volatilité, la confirmation et l’optimisation des délais d’entrée sur plusieurs périodes. En particulier, l’application de méthodes d’apprentissage automatique à l’optimisation des paramètres peut considérablement améliorer l’adaptabilité et la performance globale de la stratégie.

Code source de la stratégie
/*backtest
start: 2024-02-26 00:00:00
end: 2025-02-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("Advanced Candle Stop Strategy Backtest - Tuned v9 - Max Trades", overlay=true)

// --- EMA Variables ---
ema5_length = 5
ema20_length = 20
ema90_length = 90

ema5 = ta.ema(close, ema5_length)
ema20 = ta.ema(close, ema20_length)
ema90 = ta.ema(close, ema90_length)

// --- Support, Resistance, and Volume Calculation ---
lookback_support_resistance = 30
support_level = ta.lowest(low, lookback_support_resistance)
resistance_level = ta.highest(high, lookback_support_resistance)

// --- Volume Condition for Short (Removed) ---
avg_volume_lookback = 20
avg_volume = ta.sma(volume, avg_volume_lookback)

// --- RSI Condition for Short (Removed) ---
rsi_length = 14
rsi_overbought = 70
rsi = ta.rsi(close, rsi_length)


// --- Candle Stop Function ---
is_candle_stop(trend) =>
    body = math.abs(close - open)
    upper_shadow = high - math.max(open, close)
    lower_shadow = math.min(open, close) - low

    if trend == "up"
        lower_shadow >= 0.8 * body and upper_shadow < body and close > open // Shadow ratio reduced to 0.8 for longs
    else if trend == "down"
        upper_shadow >= 0.8 * body and lower_shadow < body and close < open // Shadow ratio reduced to 0.8 for shorts - EMA5 and Volume conditions removed
    else
        false

// --- Trend Determination (only 15m, no 1H confirmation) ---
trend = ema20 > ema90 ? "up" : ema20 < ema90 ? "down" : "neutral"
final_trend = trend  // حذف تأیید با تایم‌فریم 1H

// --- Breakout Detection ---
var bool breakout_detected = false
if final_trend == "up" and close > resistance_level
    breakout_detected := true
    alert("شکست صعودی تشخیص داده شد! منتظر پولبک 🚀", alert.freq_once_per_bar)
else if final_trend == "down" and close < support_level
    breakout_detected := true
    alert("شکست نزولی تشخیص داده شد! منتظر پولبک 📉", alert.freq_once_per_bar)

// --- Entry and Exit Conditions ---
var float position = 0.0
var float entry_price = 0.0
var float stop_loss_price = na
var bool take_profit_long = false  // Declare take_profit_long
var bool stop_loss_hit_long = false // Declare stop_loss_hit_long
var bool take_profit_short = false // Declare take_profit_short
var bool stop_loss_hit_short = false // Declare stop_loss_hit_short
risk_per_trade_percent = 2.5  // افزایش ریسک به 2.5٪ برای موقعیت‌های بیشتر


if not breakout_detected
    if position == 0 and is_candle_stop(final_trend)
        risk_amount_usd = strategy.initial_capital * (risk_per_trade_percent / 100)
        if final_trend == "up"
            stop_loss_price := close * 0.975 // Stop loss at 2.5% below entry for longs
            if (close - stop_loss_price) != 0
                position_size_usd = risk_amount_usd / (close - stop_loss_price)
                amount = position_size_usd / close
                strategy.entry("Long", strategy.long, qty=amount)
                position := amount
                entry_price := close
        else if final_trend == "down"
            stop_loss_price := close * 1.025 // Stop loss at 2.5% above entry for shorts
            if (stop_loss_price - close) != 0
                position_size_usd = risk_amount_usd / (stop_loss_price - close)
                amount = position_size_usd / close
                if rsi >= rsi_overbought // RSI condition for short entry - No Change, still using RSI but not enforcing it for now - Consider removing RSI condition as well for max trades
                    strategy.entry("Short", strategy.short, qty=amount)
                    position := amount
                    entry_price := close

if position > 0
    profit_percent_long = (close - entry_price) / entry_price * 100
    profit_percent_short = (entry_price - close) / entry_price * 100
    loss_percent_long = (entry_price - close) / entry_price * 100
    loss_percent_short = (close - entry_price) / entry_price * 100

    risk_reward_long = loss_percent_long != 0 ? profit_percent_long / loss_percent_long : (profit_percent_long != 0 ? 99999 : 0)
    risk_reward_short = loss_percent_short != 0 ? profit_percent_short / loss_percent_short : (profit_percent_short != 0 ? 99999 : 0)


    take_profit_long := profit_percent_long >= 7 and risk_reward_long >= 3
    stop_loss_hit_long := close <= stop_loss_price
    take_profit_short := profit_percent_short >= 6 and risk_reward_short >= 3 // Reduced Take Profit for Shorts to 6% - No Change
    stop_loss_hit_short := close >= stop_loss_price

    if (final_trend == "up" and (take_profit_long or stop_loss_hit_long)) or (final_trend == "down" and (take_profit_short or stop_loss_hit_short))
        if final_trend == "up"
            strategy.close("Long")
        else
            strategy.close("Short")
        position := 0
        entry_price := 0.0
        breakout_detected := false

// --- Plotting EMAs and Support/Resistance Levels ---
plot(ema5, color=color.blue, title="EMA5")
plot(ema20, color=color.red, title="EMA20")
plot(ema90, color=color.green, title="EMA90")
plot(resistance_level, color=color.orange, style=plot.style_line, title="Resistance")
plot(support_level, color=color.orange, style=plot.style_line, title="Support")