Cette stratégie est basée sur les signaux de croix dorée et de croix morte des lignes moyennes mobiles doubles ALMA, combinés aux signaux longs et courts de l'indicateur MACD, pour obtenir des positions longues et courtes automatiques.
La stratégie utilise des lignes rapides et lentes construites à partir d'ALMA pour construire la double moyenne mobile. La longueur de la ligne rapide est de 20 et la longueur de la ligne lente est de 40, les deux adoptant un décalage de 0,9 et un écart type de 5.
Dans le même temps, la stratégie intègre le signal de l'histogramme de l'indicateur MACD. Seulement lorsque l'histogramme MACD est positif (en hausse), le signal long est valide; seulement lorsque l'histogramme MACD est négatif (en baisse), le signal court est valide.
La stratégie définit également les conditions de prise de profit et de stop-loss. Le long take profit est 2 fois et le stop loss est 0,2 fois; le short take profit est 0,05 fois et le stop loss est 1 fois.
La stratégie combine le jugement de tendance de la moyenne mobile double et le jugement d'énergie de l'indicateur MACD, qui peut filtrer efficacement les faux signaux et améliorer la précision de l'entrée.
Les données de backtest sont adoptées depuis 2017, couvrant plusieurs cycles de conversion de taureaux et d'ours.
La stratégie comporte les risques suivants:
Les solutions:
La stratégie peut également être optimisée dans les aspects suivants:
La stratégie combine avec succès le jugement de tendance des moyennes mobiles et le jugement auxiliaire du MACD, et fixe des bénéfices raisonnables et des arrêts de pertes, qui peuvent obtenir des rendements stables dans diverses conditions de marché.
/*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')