전체 암호화 스윙 ALMA 크로스 MACD 양적 전략

저자:차오장, 날짜: 2023-12-05 10:24:34
태그:

img

전반적인 설명

이 전략은 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 년부터 채택되었으며 여러 황소 및 곰 전환 주기를 포함합니다. 전략은 여전히 기간에 걸쳐 잘 수행됩니다. 이것은 전략이 시장의 선형성과 비 선형성 특성에 모두 적응한다는 것을 증명합니다.

위험 분석

이 전략은 다음과 같은 위험을 가지고 있습니다.

  1. 이중 이동 평균 자체는 단기적 기회들을 놓칠 수 있는 지연 효과를 가지고 있습니다.
  2. MACD 히스토그램이 0이면 전략은 신호를 생성하지 않습니다.
  3. 이윤을 취하고 손실을 중지 비율은 미리 설정, 실제 시장에서 벗어날 수 있습니다

해결책:

  1. 짧은 기간에 대한 감수성을 향상시키기 위해 이동 평균 주기를 적절히 단축하십시오.
  2. 히스토그램 변동이 더 자주되도록 MACD 매개 변수를 최적화하십시오.
  3. 이윤을 취하고 손실을 멈추는 설정을 동적으로 조정합니다.

최적화 방향

이 전략은 다음 측면에서도 최적화 될 수 있습니다.

  1. 더 나은 평형 효과를 찾기 위해 이동 평균의 다른 유형을 시도
  2. 이동 평균 및 MACD의 매개 변수를 최적화하여 다른 제품과 주기에 맞게
  3. 필터 신호에 거래량 변화와 같은 추가 조건을 추가합니다.
  4. 더 나은 적응성을 위해 실시간으로 수익을 취하고 손실을 중지 비율을 조정

결론

이 전략은 이동평균의 트렌드 판단과 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')

더 많은