
이 전략은 쌍 ALMA 이동 평균의 황금 포크 시드포크 신호를 기반으로 MACD 지표의 다공개 신호와 결합하여 자동으로 다공개하는 것을 구현합니다. 전략은 4시간 이상 시간 주기에서 적용되며, 테스트 데이터는 BNB/USDT이며, 시간대는 2017년 현재로, 수료는 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')