
La stratégie est un système de négociation intégré qui combine plusieurs indicateurs techniques et l’émotion du marché. Le cœur de la stratégie utilise des signaux croisés de moyennes mobiles à court et à long terme (SMA) et une combinaison avec l’indicateur MACD pour confirmer la direction de la tendance. En outre, la stratégie intègre l’indicateur de l’émotion du marché RSI, ainsi qu’un système de reconnaissance des formes du graphique, y compris l’identification des formes de double sommet / double pied et de tête et d’épaule.
La stratégie est basée sur les éléments suivants:
Les conditions d’achat doivent être remplies: être au moment de la transaction cible, porter un SMA à court terme sur un SMA à long terme et que l’indicateur MACD affiche un signal à plusieurs têtes. Les conditions de vente doivent être remplies: le prix a atteint le point de résistance majeur et l’indicateur MACD affiche un signal de tête vide.
Il s’agit d’une stratégie de négociation globale qui, grâce à la combinaison de plusieurs indicateurs techniques et de l’humeur du marché, établit un système de négociation relativement complet. L’avantage de la stratégie réside dans la reconnaissance de signaux multidimensionnels et un mécanisme de gestion du risque parfait, mais il existe également des problèmes tels que la sensibilité des paramètres et l’exactitude de la reconnaissance de la forme.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("XAUUSD SMA with MACD & Market Sentiment + Chart Patterns", overlay=true)
// Input parameters for moving averages
shortSMA_length = input.int(10, title="Short SMA Length", minval=1)
longSMA_length = input.int(30, title="Long SMA Length", minval=1)
// MACD settings
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
// Lookback period for identifying major resistance (swing highs)
resistance_lookback = input.int(20, title="Resistance Lookback Period", tooltip="Lookback period for identifying major resistance")
// Calculate significant resistance (local swing highs over the lookback period)
major_resistance = ta.highest(close, resistance_lookback)
// Calculate SMAs
shortSMA = ta.sma(close, shortSMA_length)
longSMA = ta.sma(close, longSMA_length)
// RSI for market sentiment
rsiLength = input.int(14, title="RSI Length", minval=1)
rsiOverbought = input.int(70, title="RSI Overbought Level", minval=50, maxval=100)
rsiOversold = input.int(30, title="RSI Oversold Level", minval=0, maxval=50)
rsi = ta.rsi(close, rsiLength)
// Time filtering: only trade during New York session (12:00 PM - 9:00 PM UTC)
isNewYorkSession = true
// Define buy condition based on SMA, MACD, and New York session
buyCondition = isNewYorkSession and ta.crossover(shortSMA, longSMA) and macdLine > signalLine
// Define sell condition: only sell if price is at or above the identified major resistance during New York session
sellCondition = isNewYorkSession and close >= major_resistance and macdLine < signalLine
// Define sentiment-based exit conditions
closeEarlyCondition = strategy.position_size < 0 and rsi > rsiOverbought // Close losing trade early if RSI is overbought
holdWinningCondition = strategy.position_size > 0 and rsi < rsiOversold // Hold winning trade if RSI is oversold
// ------ Chart Patterns ------ //
// Double Top/Bottom Pattern Detection
doubleTop = ta.highest(close, 50) == close[25] and ta.highest(close, 50) == close[0] // Approximate double top: two peaks
doubleBottom = ta.lowest(close, 50) == close[25] and ta.lowest(close, 50) == close[0] // Approximate double bottom: two troughs
// Head and Shoulders Pattern Detection
shoulder1 = ta.highest(close, 20)[40]
head = ta.highest(close, 20)[20]
shoulder2 = ta.highest(close, 20)[0]
isHeadAndShoulders = shoulder1 < head and shoulder2 < head and shoulder1 == shoulder2
// Pattern-based signals
patternBuyCondition = isNewYorkSession and doubleBottom and rsi < rsiOversold // Buy at double bottom in oversold conditions
patternSellCondition = isNewYorkSession and (doubleTop or isHeadAndShoulders) and rsi > rsiOverbought // Sell at double top or head & shoulders in overbought conditions
// Execute strategy: Enter long position when buy conditions are met
if (buyCondition or patternBuyCondition)
strategy.entry("Buy", strategy.long)
// Close the position when the sell condition is met (price at resistance or pattern sell)
if (sellCondition or patternSellCondition and not holdWinningCondition)
strategy.close("Buy")
// Close losing trades early if sentiment is against us
if (closeEarlyCondition)
strategy.close("Buy")
// Visual cues for buy and sell signals
plotshape(series=buyCondition or patternBuyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=sellCondition or patternSellCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
// ------ Alerts for Patterns ------ //
// Add alert for pattern-based buy condition
alertcondition(patternBuyCondition, title="Pattern Buy Signal Activated", message="Double Bottom or Pattern Buy signal activated: Conditions met.")
// Add alert for pattern-based sell condition
alertcondition(patternSellCondition, title="Pattern Sell Signal Activated", message="Double Top or Head & Shoulders detected. Sell signal triggered.")
// Existing alerts for SMA/MACD-based conditions
alertcondition(buyCondition, title="Buy Signal Activated", message="Buy signal activated: Short SMA has crossed above Long SMA and MACD is bullish.")
alertcondition(sellCondition, title="Sell at Major Resistance", message="Sell triggered at major resistance level.")
alertcondition(closeEarlyCondition, title="Close Losing Trade Early", message="Sentiment is against your position, close trade.")
alertcondition(holdWinningCondition, title="Hold Winning Trade", message="RSI indicates oversold conditions, holding winning trade.")