Cette stratégie vise à identifier les opportunités de recul potentiels sur le marché. Elle utilise un système de moyenne mobile double avec une moyenne mobile à long terme (MA1) et une moyenne mobile à court terme (MA2).
La stratégie utilise deux moyennes mobiles: MA1 (à plus long terme) et MA2 (à plus court terme). La logique est que si les prix reculent brièvement pour tester le support de la tendance à plus long terme, cela peut présenter une opportunité à long terme. Plus précisément, si le prix de clôture reste au-dessus du support à long terme (MA1), la tendance majeure reste intacte. Mais si le prix de clôture dépasse le MA à court terme (MA2) mais reste au-dessus du MA à long terme (MA1), cela signale une configuration de rebond de manuel.
Les avantages de cette stratégie sont les suivants:
Les risques à prendre en compte:
Certaines façons d'optimiser et d'atténuer les risques:
Quelques moyens pour améliorer la stratégie:
En résumé, il s'agit d'une stratégie de reversation de la moyenne simple. Il identifie les configurations de revers avec l'approche double MA et gère le risque avec des arrêts adaptatifs. La stratégie est facile à saisir et à mettre en œuvre avec un réglage flexible. Les prochaines étapes sont d'autres optimisations autour d'éléments tels que les paramètres MA, les stop-loss, les filtres pour rendre la stratégie plus robuste.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-22 00:00:00 period: 1d basePeriod: 1h 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/ // © ZenAndTheArtOfTrading / www.PineScriptMastery.com // @version=5 strategy("Simple Pullback Strategy", overlay=true, initial_capital=50000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, // 100% of balance invested on each trade commission_type=strategy.commission.cash_per_contract, commission_value=0.005) // Interactive Brokers rate // Get user input i_ma1 = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA") i_ma2 = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA") i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline") i_lowerClose = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2") i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups") i_endTime = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups") // Get indicator values ma1 = ta.sma(close, i_ma1) ma2 = ta.sma(close, i_ma2) // Check filter(s) f_dateFilter =true // Check buy/sell conditions var float buyPrice = 0 buyCondition = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter sellCondition = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1]) stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent // Enter positions if buyCondition strategy.entry(id="Long", direction=strategy.long) if buyCondition[1] buyPrice := open // Exit positions if sellCondition or stopCondition strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : "")) buyPrice := na // Draw pretty colors plot(buyPrice, color=color.lime, style=plot.style_linebr) plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1) plot(ma1, color=color.blue) plot(ma2, color=color.orange)