
Cette stratégie est basée sur les signaux de forfait doré des moyennes mobiles doubles ALMA, combinés avec les signaux de forfait à plusieurs points de l’indicateur MACD, permettant de faire automatiquement plus de blanchiment. La stratégie s’applique aux périodes de 4 heures et plus, les données de test sont BNB/USDT, la période est de 2017 à aujourd’hui, le frais de traitement est fixé à 0,03% .
La stratégie consiste à construire une moyenne mobile double avec une ligne rapide et une ligne lente ALMA. La longueur de la ligne rapide est de 20 et la longueur de la ligne lente est de 40, chacune utilisant un décalage de 0,9 et un écart standard de 5. Un signal de commutation est généré lorsque la ligne rapide traverse la ligne lente et un signal de commutation lorsque la ligne rapide traverse la ligne lente.
De même, la stratégie est combinée avec le signal de l’indicateur MACD. Le signal de la ligne droite est efficace uniquement lorsque l’indicateur MACD est positif (en hausse); le signal de la ligne droite est négatif (en baisse); le signal de la ligne droite est efficace uniquement lorsque l’indicateur MACD est négatif (en baisse).
Cette stratégie impose également des conditions d’arrêt-stop: faire un stop plus de 2 fois, c’est 0.2 fois le stop; faire un stop plus de 0.05 fois, c’est 1 fois le stop.
Cette stratégie, combinée à une analyse de la tendance des moyennes mobiles doubles et à une analyse de l’énergie de l’indicateur MACD, permet de filtrer efficacement les faux signaux et d’améliorer l’exactitude de l’entrée. Le paramètre de stop-loss est raisonnable et permet de maximiser le profit et d’éviter les pertes importantes.
Les données de retracement adoptées depuis 2017 incluent plusieurs virages haussiers et baissiers, ce qui prouve que la stratégie est adaptée aux caractéristiques linéaires et non linéaires du marché.
Le risque de cette stratégie est le suivant:
La solution est simple:
La stratégie peut également être optimisée dans les domaines suivants:
Cette stratégie, combinant avec succès les jugements de tendance des moyennes mobiles et les jugements auxiliaires du MACD, et en établissant des arrêts de perte raisonnables, permet d’obtenir des gains stables dans une variété de situations. La stabilité et la rentabilité de la stratégie peuvent être encore améliorées par des moyens tels que l’optimisation continue des paramètres et l’ajout de conditions de filtrage supplémentaires.
/*backtest
start: 2023-11-04 00:00:00
end: 2023-12-04 00:00:00
period: 1h
basePeriod: 15m
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/
// © exlux99
//@version=4
strategy(title = "Full Crypto Swing Strategy ALMA Cross", overlay = true, pyramiding=1,initial_capital = 1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.03)
//time condition
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2010, title = "From Year", minval = 1970)
//monday and session
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2031, title = "To Year", minval = 1970)
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate
UseHAcandles = input(false, title="Use Heikin Ashi Candles in Algo Calculations")
haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close
haOpen = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open
haHigh = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high
haLow = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low
//alma fast and slow
src = haClose
windowsize = input(title="Length Size Fast", type=input.integer, defval=20)
windowsize2 = input(title="Length Size Slow", type=input.integer, defval=40)
offset = input(title="Offset", type=input.float, defval=0.9, step=0.05)
sigma = input(title="Sigma", type=input.float, defval=5)
outfast=alma(src, windowsize, offset, sigma)
outslow=alma(src, windowsize2, offset, sigma)
//macd
fast_length = input(title="Fast Length", type=input.integer, defval=6)
slow_length = input(title="Slow Length", type=input.integer, defval=25)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
// Calculating
fast_ma = ema(src, fast_length)
slow_ma = ema(src, slow_length)
macd = fast_ma - slow_ma
signal = ema(macd, signal_length)
hist = macd - signal
long=crossover(outfast,outslow) and hist > hist[1] and time_cond
short=crossunder(outfast,outslow) and hist < hist[1] and time_cond
takeProfit_long=input(2.0, step=0.005)
stopLoss_long=input(0.2, step=0.005)
takeProfit_short=input(0.05, step=0.005)
stopLoss_short=input(1.0, step=0.005)
strategy.entry("long",1,when=long)
strategy.entry("short",0,when=short)
strategy.exit("short_tp/sl", "long", profit=close * takeProfit_long / syminfo.mintick, loss=close * stopLoss_long / syminfo.mintick, comment='LONG EXIT', alert_message = 'closeshort')
strategy.exit("short_tp/sl", "short", profit=close * takeProfit_short / syminfo.mintick, loss=close * stopLoss_short / syminfo.mintick, comment='SHORT EXIT', alert_message = 'closeshort')