Cette stratégie est un système de swing trading basé sur des indicateurs techniques qui combine plusieurs signaux, y compris les croisements moyens mobiles, les conditions de surachat / survente du RSI et les niveaux de stop-loss / take-profit basés sur l'ATR. Le mécanisme de base repose sur la capture des tendances du marché via des croisements EMA à court terme et SMA à long terme, confirmés par des signaux RSI, avec des niveaux de stop-loss et de take-profit dynamiques définis à l'aide de l'ATR. La stratégie prend en charge les directions de trading longues et courtes et permet une activation / désactivation flexible de l'une ou l'autre direction.
La stratégie utilise une approche à plusieurs niveaux en termes d'indicateurs techniques:
La stratégie construit un système de trading relativement complet grâce à la combinaison de plusieurs indicateurs techniques. Ses atouts résident dans la fiabilité de la confirmation du signal et la gestion complète des risques, bien que l'impact de l'environnement du marché sur les performances de la stratégie nécessite une attention.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-10 08:00:00 period: 1d basePeriod: 1d 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/ // © CryptoRonin84 //@version=5 strategy("Swing Trading Strategy with On/Off Long and Short", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Input for turning Long and Short trades ON/OFF enable_long = input.bool(true, title="Enable Long Trades") enable_short = input.bool(true, title="Enable Short Trades") // Input parameters for strategy sma_short_length = input.int(20, title="Short EMA Length", minval=1) sma_long_length = input.int(50, title="Long SMA Length", minval=1) sl_percentage = input.float(1.5, title="Stop Loss (%)", step=0.1, minval=0.1) tp_percentage = input.float(3, title="Take Profit (%)", step=0.1, minval=0.1) risk_per_trade = input.float(1, title="Risk Per Trade (%)", step=0.1, minval=0.1) capital = input.float(10000, title="Initial Capital", step=100) // Input for date range for backtesting start_date = input(timestamp("2020-01-01 00:00"), title="Backtest Start Date") end_date = input(timestamp("2024-12-31 23:59"), title="Backtest End Date") inDateRange = true // Moving averages sma_short = ta.ema(close, sma_short_length) sma_long = ta.sma(close, sma_long_length) // RSI setup rsi = ta.rsi(close, 14) rsi_overbought = 70 rsi_oversold = 30 // ATR for volatility-based stop-loss calculation atr = ta.atr(14) stop_loss_level_long = strategy.position_avg_price - (1.5 * atr) stop_loss_level_short = strategy.position_avg_price + (1.5 * atr) take_profit_level_long = strategy.position_avg_price + (3 * atr) take_profit_level_short = strategy.position_avg_price - (3 * atr) // Position sizing based on risk per trade risk_amount = capital * (risk_per_trade / 100) position_size = risk_amount / (close * sl_percentage / 100) // Long and Short conditions long_condition = ta.crossover(sma_short, sma_long) and rsi < rsi_overbought short_condition = ta.crossunder(sma_short, sma_long) and rsi > rsi_oversold // Execute long trades if (long_condition and inDateRange and enable_long) strategy.entry("Long", strategy.long, qty=position_size) strategy.exit("Take Profit/Stop Loss", "Long", stop=stop_loss_level_long, limit=take_profit_level_long) // Execute short trades if (short_condition and inDateRange and enable_short) strategy.entry("Short", strategy.short, qty=position_size) strategy.exit("Take Profit/Stop Loss", "Short", stop=stop_loss_level_short, limit=take_profit_level_short) // Plot moving averages plot(sma_short, title="Short EMA", color=color.blue) plot(sma_long, title="Long SMA", color=color.red) // Plot RSI on separate chart hline(rsi_overbought, "Overbought", color=color.red) hline(rsi_oversold, "Oversold", color=color.green) plot(rsi, title="RSI", color=color.purple) // Plot signals on chart plotshape(series=long_condition and enable_long, title="Long Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=short_condition and enable_short, title="Short Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") // Background color for backtest range bgcolor(inDateRange ? na : color.red, transp=90)