Cette stratégie est un système de trading basé sur l'action des prix et les niveaux de support/résistance dynamiques, exécutant des transactions près des niveaux de prix clés lorsque des modèles de bougies spécifiques émergent. Le système utilise une méthode de calcul de support/résistance dynamique à 16 périodes, combinée à quatre modèles de bougies d'inversion classiques - Hammer, Shooting Star, Doji et Pin Bar pour capturer les renversements potentiels du marché.
Le noyau de la stratégie réside dans le calcul dynamique des niveaux de support et de résistance pour établir les limites du mouvement des prix. Lorsque le prix approche de ces niveaux clés, le système recherche des modèles de bougies spécifiques comme signaux d'inversion. Les conditions d'entrée nécessitent la formation de modèles à 1,8% (sensibilité par défaut) des niveaux de support/résistance. Le système implémente une règle de gestion de l'équité de 35% avec 16% de stop-loss et 9,5% de take-profit, contrôlant efficacement le risque à environ 5,6% du capital total par transaction.
Cette stratégie de trading basée sur l'action des prix offre aux traders une approche de trading systématique en combinant des niveaux de support/résistance dynamiques avec des modèles d'inversion classiques.
/*backtest start: 2024-11-26 00:00:00 end: 2024-12-03 00:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © felipemiransan //@version=5 strategy("Price Action Strategy", overlay=true) // Settings length = input.int(16, title="Support and Resistance Length") sensitivity = input.float(0.018, title="Sensitivity") // Stop Loss and Take Profit stop_loss_pct = input.float(16, title="Stop Loss percentage", minval=0.1) / 100 take_profit_pct = input.float(9.5, title="Take Profit percentage", minval=0.1) / 100 // Function to identify a Hammer isHammer() => body = close - open price_range = high - low lower_shadow = open - low upper_shadow = high - close body > 0 and lower_shadow > body * 2 and upper_shadow < body * 0.5 and price_range > 0 // Function to identify a Shooting Star isShootingStar() => body = open - close price_range = high - low lower_shadow = close - low upper_shadow = high - open body > 0 and upper_shadow > body * 2 and lower_shadow < body * 0.5 and price_range > 0 // Function to identify a Doji isDoji() => body = close - open price_range = high - low math.abs(body) < (price_range * 0.1) // Doji has a small body // Function to identify a Pin Bar isPinBar() => body = close - open price_range = high - low lower_shadow = open - low upper_shadow = high - close (upper_shadow > body * 2 and lower_shadow < body * 0.5) or (lower_shadow > body * 2 and upper_shadow < body * 0.5) // Support and resistance levels support = ta.lowest(low, length) resistance = ta.highest(high, length) // Entry criteria long_condition = (isHammer() or isDoji() or isPinBar()) and close <= support * (1 + sensitivity) short_condition = (isShootingStar() or isDoji() or isPinBar()) and close >= resistance * (1 - sensitivity) // Function to calculate stop loss and take profit (long) calculate_levels(position_size, avg_price, stop_loss_pct, take_profit_pct) => stop_loss_level = avg_price * (1 - stop_loss_pct) take_profit_level = avg_price * (1 + take_profit_pct) [stop_loss_level, take_profit_level] // Function to calculate stop loss and take profit (short) calculate_levels_short(position_size, avg_price, stop_loss_pct, take_profit_pct) => stop_loss_level = avg_price * (1 + stop_loss_pct) take_profit_level = avg_price * (1 - take_profit_pct) [stop_loss_level, take_profit_level] // Buy entry order with label if (long_condition and strategy.opentrades == 0) strategy.entry("Buy", strategy.long) pattern = isHammer() ? "Hammer" : isDoji() ? "Doji" : isPinBar() ? "Pin Bar" : "" label.new(x=bar_index, y=low, text=pattern, color=color.green, textcolor=color.black, size=size.small) // Sell entry order with label if (short_condition and strategy.opentrades == 0) strategy.entry("Sell", strategy.short) pattern = isShootingStar() ? "Shooting Star" : isDoji() ? "Doji" : isPinBar() ? "Pin Bar" : "" label.new(x=bar_index, y=high, text=pattern, color=color.red, textcolor=color.black, size=size.small) // Stop Loss and Take Profit management for open positions if (strategy.opentrades > 0) if (strategy.position_size > 0) // Long position avg_price_long = strategy.position_avg_price // Average price of long position [long_stop_level, long_take_profit_level] = calculate_levels(strategy.position_size, avg_price_long, stop_loss_pct, take_profit_pct) strategy.exit("Exit Long", from_entry="Buy", stop=long_stop_level, limit=long_take_profit_level) if (strategy.position_size < 0) // Short position avg_price_short = strategy.position_avg_price // Average price of short position [short_stop_level, short_take_profit_level] = calculate_levels_short(strategy.position_size, avg_price_short, stop_loss_pct, take_profit_pct) strategy.exit("Exit Short", from_entry="Sell", stop=short_stop_level, limit=short_take_profit_level) // Visualization of Support and Resistance Levels plot(support, title="Support", color=color.green, linewidth=2) plot(resistance, title="Resistance", color=color.red, linewidth=2)