Cette stratégie s'appelle la stratégie de trading du robot MACD. Elle détermine le moment de l'achat et de la vente sur le marché en calculant la relation entre la ligne rapide et la ligne lente de l'indicateur MACD, et adopte un stop loss pour contrôler les risques.
Cette stratégie est principalement développée sur la base de l'indicateur MACD. L'indicateur MACD se compose d'une ligne rapide et d'une ligne lente. La ligne rapide est une moyenne mobile à court terme et la ligne lente est une moyenne mobile à long terme.
Dans cette stratégie, la ligne rapide et la ligne lente sont calculées respectivement à l'aide de l'algorithme EMA, et les périodes peuvent être personnalisées.
Lors de la détermination du moment de l'achat, vérifiez non seulement la croix d'or des lignes rapides et lentes, mais aussi si la valeur absolue du MACD est supérieure à la ligne d'achat personnalisée.
Lors de la détermination du moment de la vente, il est nécessaire de respecter simultanément la limite entre les lignes rapides et les lignes lentes et la ligne de signal étant positive, puis un signal de vente est émis pour fermer la position.
La stratégie présente les avantages suivants:
La stratégie comporte également certains risques:
Ces risques peuvent être réduits en ajustant les paramètres de manière appropriée, en combinant d'autres indicateurs, etc.
La stratégie peut être optimisée dans les directions suivantes:
Dans l'ensemble, il s'agit d'une stratégie de suivi de tendance avec une grande fiabilité. En jugeant la tendance à travers l'indicateur MACD et en contrôlant les risques avec un stop loss, des rendements d'investissement stables peuvent être obtenus.
/*backtest start: 2022-12-11 00:00:00 end: 2023-12-17 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(shorttitle = "GBPUSD MACD", title = "GBPUSD MACD") fastMA = input(title="Fast moving average", defval = 12, minval = 7) slowMA = input(title="Slow moving average", defval = 26, minval = 7) lastColor = yellow [currMacd,_,_] = macd(close[0], fastMA, slowMA, 9) [prevMacd,_,_] = macd(close[1], fastMA, slowMA, 9) plotColor = currMacd > 0 ? currMacd > prevMacd ? lime : green : currMacd < prevMacd ? maroon : red plot(currMacd, style = histogram, color = plotColor, linewidth = 3) plot(0, title = "Zero line", linewidth = 1, color = gray) //MACD // Getting inputs fast_length = input(title="Fast Length", defval=12) slow_length = input(title="Slow Length", defval=26) src = input(title="Source", defval=close) signal_length = input(title="Signal Smoothing", minval = 1, maxval = 50, defval =9) sma_source = input(title="Simple MA(Oscillator)", type=bool, defval=false) sma_signal = input(title="Simple MA(Signal Line)", type=bool, defval=false) // Plot colors col_grow_above = #26A69A col_grow_below = #FFCDD2 col_fall_above = #B2DFDB col_fall_below = #EF5350 col_macd = #0094ff col_signal = #ff6a00 // Calculating fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length) slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length) hist = macd - signal //plot(hist, title="Histogram", style=columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 ) plot(macd, title="MACD", color=col_macd, transp=0) plot(signal, title="Signal", color=col_signal, transp=0) ///END OF MACD //Long and Close Long Lines linebuy = input(title="Enter Long", type=float, defval=-0.00045) linesell = input(title="Close Long", type=float, defval=0.0001) //Plot Long and Close Long Lines plot(linebuy,color=green),plot(linesell,color=red) //Stop Loss Input sl_inp = input(0.05, title='Stop Loss %', type=float)/100 //Order Conditions longCond = crossover(currMacd, linebuy) exitLong = crossover(currMacd, signal) and signal > 0 stop_level = strategy.position_avg_price * (1 - sl_inp) //Order Entries strategy.entry("long", strategy.long, when=longCond==true) strategy.close("long", when=exitLong==true) strategy.exit("Stop Loss", stop=stop_level)