Cette stratégie utilise les signaux de rupture de prix et le mécanisme d'arrêt de perte oscillant pour la gestion des risques. Il va long lorsque le prix dépasse la résistance et court lorsque le prix dépasse le support. Dans le même temps, des arrêts d'arrêt de perte oscillant et de prise de profit sont appliqués pour un meilleur contrôle des risques.
La stratégie repose sur les points clés suivants:
Utilisation de MA pour déterminer la direction de la tendance: les MA rapides et lents sont tracés, les MA rapides qui traversent au-dessus de la tendance de la MA lente indiquent une tendance haussière, tandis que les MA rapides qui traversent au-dessous des signaux indiquent une tendance baissière.
Lorsque le prix grimpe et dépasse le sommet récent, il est considéré comme franchissant le niveau de résistance, en allant long.
Lorsque le prix chute et dépasse le niveau le plus bas récent, il est considéré comme brisant le niveau de support, en short.
Après l'entrée, la ligne de stop loss est définie et s'ajuste en fonction des fluctuations de prix, formant un mécanisme de stop loss oscillant.
Arrêtez la perte et prenez la sortie de profit.
En particulier, il utilise la moyenne des prix élevés et bas comme source, trace des EMA rapides et lents pour déterminer les tendances. Lorsque l'EMA rapide dépasse l'EMA lente et qu'un signal de rupture de résistance émerge, il va long. Lorsque l'EMA rapide tombe en dessous de l'EMA lente et qu'une rupture de support apparaît, il court. Après l'entrée, le prix le plus bas dans certaines périodes est défini comme la ligne de stop loss, s'ajuste à mesure que le prix augmente.
Les avantages de cette stratégie sont les suivants:
Rentabilité constante: suivre les tendances peut générer des gains stables sur les tendances à long terme.
L'arrêt oscillant et l'arrêt protecteur réduisent rapidement les pertes.
Les signaux de résistance long et de soutien court sont fiables.
Les indications et les signaux sont simples et faciles à suivre.
Adaptable au marché, fonctionne bien sur différents produits et conditions de marché.
Quelques risques à noter pour cette stratégie:
Risque d'échec de la rupture. Le prix peut avoir un rebond ou un retrait après la rupture initiale, déclenchant un stop loss.
Le risque d'optimisation des paramètres. Un mauvais réglage des paramètres conduit à trop ou trop peu de signaux. L'optimisation nécessite de la prudence.
Dans des conditions extrêmes, les EMA peuvent cesser de fonctionner ou être en retard par rapport au prix.
Risque d'inversion de tendance: la détention d'une position contre tendance entraîne des pertes accumulées lorsque la tendance s'inverse.
Un réglage approprié des paramètres, une grande perte d'arrêt, le strict respect des règles peuvent atténuer largement les risques ci-dessus.
La stratégie peut être encore améliorée par les aspects suivants:
Optimisation des délais, ajustement des périodes de calcul des MAs et des tendances des prix, recherche des meilleures combinaisons.
Optimisation de l'adaptabilité, réglage des paramètres pour différents produits.
Optimisation de la perte d'arrêt. Testez des méthodes d'arrêt de perte plus avancées comme l'arrêt de trail, l'arrêt Chandelier.
Prenez l'optimisation des profits. Adoptez des sorties adaptatives ou exponentielles pour une meilleure récompense.
Ajoutez des filtres pour éviter les fausses fuites.
Améliorer les signaux d'entrée, combiner plus d'indicateurs ou de modèles pour confirmer les entrées.
Il s'agit d'une stratégie de rupture efficace avec un bon contrôle des risques, un modèle de profit stable et un flux logique simple.
/*backtest start: 2023-12-03 00:00:00 end: 2023-12-10 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © EduardoMattje //@version=4 strategy("Reversal closing price", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, initial_capital=10000) src = input(hl2, "Price source") order_direction = input("Both", "Order direction", options=["Both", "Long", "Short"]) // EMA calculation and plot ema_long_period = input(80, "EMA long period") ema_short_period = input(8, "EMA short period") ema_long = ema(src, ema_long_period) ema_short = ema(src, ema_short_period) ema_bull = ema_short > ema_long ema_bear = ema_short < ema_long plot(ema_long, "EMA long", ema_bull ? color.green : color.red, 3) plot(ema_short, "EMA short", ema_bull ? color.green : color.red, 3) // Settings risk_reward_ratio = input(2.0, "Risk to reward ratio", minval=1.0, step=0.1) stop_lookback = input(3, "Stoploss candle lookback", minval=1) ema_cross_stop = input(true, "Close if EMA crosses in oposite direction") allow_retracing = input(true, "Allow price retracing") // RCP calculation rcp_bull = low[0] < low[1] and low[0] < low[2] and close[0] > close[1] rcp_bear = high[0] > high[1] and high[0] > high[2] and close[0] < close[1] // Order placement in_market = strategy.position_size != 0 long_condition = rcp_bull and ema_bull and not in_market and order_direction != "Short" short_condition = rcp_bear and ema_bear and not in_market and order_direction != "Long" bought = strategy.position_size[0] > strategy.position_size[1] and strategy.position_size[1] == 0 sold = strategy.position_size[0] < strategy.position_size[1] and strategy.position_size[1] == 0 closed = not in_market and in_market[1] long_position = strategy.position_size > 0 short_position = strategy.position_size < 0 buy_price = high + syminfo.mintick sell_price = low - syminfo.mintick if long_condition strategy.entry("Long", true, stop=buy_price) if short_condition strategy.entry("Short", false, stop=sell_price) if allow_retracing better_price_long = barssince(closed) > barssince(long_condition) and barssince(long_condition) >= 1 and not in_market and ema_bull and buy_price < valuewhen(long_condition, buy_price, 0) and buy_price[0] < buy_price[1] if better_price_long strategy.cancel("Long") strategy.entry("Long", true, stop=buy_price) better_price_short = barssince(closed) > barssince(short_condition) and barssince(short_condition) >= 1 and not in_market and ema_bear and sell_price > valuewhen(short_condition, sell_price, 0) and sell_price[0] > sell_price[1] if better_price_short strategy.cancel("Short") strategy.entry("Short", false, stop=sell_price) // Stoploss orders stop_price = long_position ? valuewhen(bought, lowest(stop_lookback)[1] - syminfo.mintick, 0) : short_position ? valuewhen(sold, highest(3)[1] + syminfo.mintick, 0) : na stop_comment = "Stoploss triggered" strategy.close("Long", low <= stop_price, stop_comment) strategy.close("Short", high >= stop_price, stop_comment) plot(stop_price, "Stop price", color.red, 2, plot.style_linebr) // EMA cross close orders if ema_cross_stop if long_position and ema_bear strategy.close("Long", comment=stop_comment) if short_position and ema_bull strategy.close("Short", comment=stop_comment) // Take profit orders stop_ticks = abs(strategy.position_avg_price - stop_price) take_profit_price = long_position ? valuewhen(bought, strategy.position_avg_price + stop_ticks * risk_reward_ratio, 0) : short_position ? valuewhen(sold, strategy.position_avg_price - (stop_ticks * risk_reward_ratio), 0) : na target_comment = "Take profit" strategy.close("Long", high >= take_profit_price, target_comment) strategy.close("Short", low <= take_profit_price, target_comment) plot(take_profit_price, "Target price", color.green, 2, plot.style_linebr)