
Cette stratégie est un système de confirmation de trading multi-signaux qui combine la théorie de l’inversion de tendance de Granville avec l’indicateur MACD. L’idée centrale de la stratégie est de juger d’un potentiel renversement de tendance par la relation du prix à la ligne de parité et d’assurer la fiabilité de la transaction à l’aide de la vérification multi-signaux de l’indicateur MACD. Cette méthode permet non seulement d’identifier efficacement le point de départ d’une tendance, mais réduit également le risque de faux signaux grâce à un mécanisme de confirmation multiple.
Le processus de mise en œuvre de la stratégie se divise en quatre étapes clés:
Le paramètre de stop-loss est réglé sur la base de l’amplitude de la ligne K inversée, en utilisant une méthode d’ajustement dynamique. Le paramètre de stop-loss est réglé sur le point le plus bas de la ligne K inversée et le paramètre de stop-loss est réglé sur 1,618 fois l’amplitude de la ligne K inversée, ce qui est conforme au principe d’expansion de Fibonacci.
La stratégie a été construite en combinant la théorie classique de l’analyse technique et les méthodes modernes de négociation quantitative, pour construire un système de négociation relativement complet. Le mécanisme de confirmation de signaux multiples offre une meilleure fiabilité de la négociation, et la méthode de gestion dynamique des risques rend la stratégie bien adaptée. Bien qu’il existe certains problèmes de retard, la stratégie a une bonne valeur pratique et un bon potentiel de développement grâce à une optimisation continue et à un ajustement des paramètres.
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Granville + MACD Strategy", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// ■ Parameter Settings
emaPeriod = input.int(20, "EMA Period for Granville", minval=1)
fastLen = input.int(12, "MACD Fast Period", minval=1)
slowLen = input.int(26, "MACD Slow Period", minval=1)
signalLen = input.int(9, "MACD Signal Period", minval=1)
// ■ Calculate EMA (for Granville reversal detection)
ema_val = ta.ema(close, emaPeriod)
// ■ Granville Reversal Detection (e.g., price crosses above EMA from below)
granvilleReversal = ta.crossover(close, ema_val)
// ■ Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, fastLen, slowLen, signalLen)
// ■ State management variables (to manage state transitions)
var bool granvilleDone = false // Reversal bar confirmed flag
var float granvilleLow = na // Low of the reversal bar (used for SL)
var float granvilleRange = na // Range of the reversal bar (used for TP calculation)
var bool macdGC_done = false // First MACD Golden Cross confirmed
var int goldenCrossBar = na // Bar index of the first MACD Golden Cross
var float initialMacdHigh = na // MACD value at the Golden Cross (used for break detection)
var bool breakoutDone = false // MACD line breaks the initial Golden Cross MACD value
// ■ (1) Granville Reversal Detection
if granvilleReversal
granvilleDone := true
granvilleLow := low // Low of the reversal bar (SL)
granvilleRange := high - low // Range of the reversal bar (used for TP calculation)
// Reset MACD-related states
macdGC_done := false
breakoutDone := false
initialMacdHigh := na
goldenCrossBar := na
// ■ (2) MACD Golden Cross (first signal) detection
if granvilleDone and (not macdGC_done) and ta.crossover(macdLine, signalLine)
macdGC_done := true
goldenCrossBar := bar_index
initialMacdHigh:= macdLine
// ■ (3) Check if MACD line breaks the initial MACD value at the Golden Cross
if macdGC_done and (not breakoutDone) and (macdLine > initialMacdHigh)
breakoutDone := true
// ■ (4) When MACD retests and crosses above the signal line again, it's the entry timing
// ※ Check for a crossover after the first Golden Cross bar
entryCondition = granvilleDone and macdGC_done and breakoutDone and (bar_index > goldenCrossBar) and ta.crossover(macdLine, signalLine)
// ■ TP and SL settings at entry
if entryCondition
entryPrice = close
tpPrice = entryPrice + granvilleRange * 1.618
slPrice = granvilleLow
strategy.entry("Long", strategy.long)
strategy.exit("Exit Long", from_entry="Long", stop=slPrice, limit=tpPrice)
// Reset states after entry (for the next entry)
granvilleDone := false
macdGC_done := false
breakoutDone := false
initialMacdHigh := na
goldenCrossBar := na
// ■ Plotting (for reference)
// Display the EMA on the price chart (with fixed title)
plot(ema_val, color=color.orange, title="EMA (20)")
// Plot MACD and Signal in a separate window (with fixed titles)
plot(macdLine, color=color.blue, title="MACD")
plot(signalLine, color=color.red, title="Signal")