이 전략은 MACD 지표의 긴 및 짧은 신호와 결합하여 이중 ALMA 이동 평균 라인의 황금 십자 및 죽은 십자 신호를 기반으로 자동 긴 및 짧은 포지션을 달성합니다. 이 전략은 4 시간 이상의 시간 프레임에 적합하며 테스트 데이터는 2017 년부터 현재까지의 BNB/USDT이며 수수료율은 0.03%로 설정됩니다.
이 전략은 이중 이동 평균을 만들기 위해 ALMA에서 구성된 빠르고 느린 선을 사용합니다. 빠른 라인의 길이는 20이고 느린 라인은 40이며 둘 다 0.9의 오프셋과 5의 표준편차를 채택합니다. 빠른 라인이 느린 라인을 넘을 때 긴 신호가 생성됩니다. 빠른 라인이 느린 라인 아래에 넘을 때 짧은 신호가 생성됩니다.
동시에 전략은 MACD 지표의 히스토그램 신호를 통합합니다. MACD 히스토그램이 긍정적 인 경우 (올림), 긴 신호가 유효합니다. MACD 히스토그램이 부정적 인 경우 (하락), 짧은 신호가 유효합니다.
이 전략은 또한 수익을 취하고 손실을 멈추는 조건을 설정합니다. 긴 이익은 2 배이고 손실을 멈추는 것은 0.2 배입니다; 짧은 이익은 0.05 배이고 손실을 멈추는 것은 1 배입니다.
이 전략은 이중 이동 평균의 트렌드 판단과 MACD 지표의 에너지 판단을 결합하여 잘못된 신호를 효과적으로 필터하고 진입의 정확도를 향상시킬 수 있습니다. 이윤을 최대화하고 큰 손실을 피하기 위해 수익을 취하고 손실을 중지하는 설정은 합리적입니다.
백테스트 데이터는 2017 년부터 채택되었으며 여러 황소 및 곰 전환 주기를 포함합니다. 전략은 여전히 기간에 걸쳐 잘 수행됩니다. 이것은 전략이 시장의 선형성과 비 선형성 특성에 모두 적응한다는 것을 증명합니다.
이 전략은 다음과 같은 위험을 가지고 있습니다.
해결책:
이 전략은 다음 측면에서도 최적화 될 수 있습니다.
이 전략은 이동평균의 트렌드 판단과 MACD의 보조 판단을 성공적으로 결합하고 합리적인 취익과 스톱 손실을 설정하여 다양한 시장 조건에서 안정적인 수익을 얻을 수 있습니다. 매개 변수 설정의 지속적인 최적화, 추가 필터링 조건 추가 등으로 전략의 안정성과 수익성이 더욱 향상 될 수 있습니다.
/*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')