듀얼 MA 트렌드 브레이크아웃 전략은 트렌드를 결정하고 엔트리 신호를 생성하기 위해 서로 다른 기간의 두 개의 이동 평균을 사용하는 양적 거래 전략이다. 주로 느린 MA를 통해 전체 트렌드 방향을 판단하고 엔트리 필터링을 위해 빠른 MA를 사용합니다. 더 큰 시간 프레임 트렌드의 방향이 일관되면 더 높은 승률과 수익성을 추구하기 위해 진입하는 반전 바를 선택합니다.
이 전략은 다음과 같은 주요 부분으로 구성됩니다.
추세 판단: 느린 MA로 정의 된 21 기간 MA를 계산합니다. 그 위치는 상대적으로 안정적이며 전체 트렌드 방향을 판단하는 데 사용할 수 있습니다. 가격이 MA 근처에 상승하면 상승 추세입니다. 가격이 MA 근처에 떨어지면 하락 추세입니다.
입력 필터링: 빠른 MA로 정의 된 5 기간 MA를 계산합니다. 가격이 느린 MA와 빠른 MA를 뚫었을 때만 거래 신호가 활성화됩니다. 이 디자인은 주로 잘못된 브레이크의 가능성을 더 잘 여는 것입니다.
촛불 필터링: 이 전략은 현재 촛불이 하향 시점일 때만 장기화되거나 현재 촛불이 상승 시점일 때 단축됩니다. 이는 진입을 위해 반전 바를 사용하는 것이 더 높은 성공률을 얻을 수 있다고 생각합니다. 또한 과잉 구매 또는 과잉 판매 지역에 진입하지 않도록 빠른 RSI 지표를 결합합니다.
피라미드 필터: 암호화폐 시장의 경우, 전략은 또한 중요한 하락 추세에서 과판 기회를 포착하기 위해 변동성 3배의 파업 조건을 포함합니다.
손실 중지: 전략은 이동 스톱 손실을 지원합니다. 포지션을 열면 설정된 비율에 따라 실시간으로 스톱 손실이 업데이트됩니다.
이 전략의 장점은 다음과 같습니다.
이 전략은 또한 몇 가지 위험을 안고 있습니다.
이러한 위험을 해결하기 위해 다음과 같은 측면에서 최적화를 할 수 있습니다.
이 전략을 최적화하는 주요 측면은 다음과 같습니다.
매개 변수 최적화: 체계적인 역 테스트를 통해 최적의 빠른 및 느린 MA 기간 조합을 찾고 위험 조정 수익을 향상시킵니다.
패턴 인식: KDJ, MACD와 같은 다른 지표를 추가하여 더 신뢰할 수있는 반전 신호를 식별합니다.
손실 최적화 중지: 플로팅 또는 트레일링 스톱 로스 알고리즘을 개발하여 중단될 확률을 줄이십시오.
기계 학습: ML을 사용하여 자동으로 거래 규칙을 생성하기 위해 더 많은 역사 데이터를 수집하고 표시합니다.
위치 크기: 시장 조건에 따라 위치 크기를 동적으로 조정합니다.
듀얼 MA 트렌드 브레이크아웃 전략은 일반적으로 단순하고 실용적인 트렌드 다음 전략이다. 복잡한 머신 러닝 알고리즘과 비교하면 이 전략은 해석하고 마스터하는 것이 더 쉬우며 신뢰도가 높다. 매개 변수 조정, 기능 확장 및 ML 증강으로, 이 전략은 개선 가능성이 높으며 양적 거래의 훌륭한 출발점이다.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-07 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title = "Noro's Trend MAs Strategy v2.0 +CB", shorttitle = "Trend MAs str 2.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0) //Settings needlong = input(true, "long") needshort = input(true, "short") needstops = input(false, "stops") stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %") useohlc4 = input(false, defval = false, title = "Use OHLC4") usefastsma = input(true, "Use fast MA Filter") fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period") slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period") bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q") needbg = input(false, defval = false, title = "Need trend Background?") needarr = input(false, defval = false, title = "Need entry arrows?") needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)") src = useohlc4 == true ? ohlc4 : close //PriceChannel 1 lasthigh = highest(src, slowlen) lastlow = lowest(src, slowlen) center = (lasthigh + lastlow) / 2 //PriceChannel 2 lasthigh2 = highest(src, fastlen) lastlow2 = lowest(src, fastlen) center2 = (lasthigh2 + lastlow2) / 2 //Trend trend = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend[1] //Bars bar = close > open ? 1 : close < open ? -1 : 0 redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0 greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0 //Fast RSI fastup = rma(max(change(close), 0), 2) fastdown = rma(-min(change(close), 0), 2) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //CryptoBottom mac = sma(close, 10) len = abs(close - mac) sma = sma(len, 100) max = max(open, close) min = min(open, close) up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0 //Signals up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0 dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0 up2 = high < center and high < center2 and bar == -1 ? 1 : 0 dn2 = low > center and low > center2 and bar == 1 ? 0 : 0 //Lines plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA") plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2") //Arrows plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0) plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0) //Background col = needbg == false ? na : trend == 1 ? lime : red bgcolor(col, transp = 90) //Alerts alertcondition(up == 1, title='buy', message='Uptrend') alertcondition(dn == 1, title='sell', message='Downtrend') //Trading stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1] stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1] longCondition = up == 1 or (up2 == 1 and needex == true) or up3 == 1 if (longCondition) strategy.entry("Long", strategy.long, needlong == false ? 0 : na) strategy.exit("Stop Long", "Long", stop = stoplong) shortCondition = dn == 1 if (shortCondition) strategy.entry("Short", strategy.short, needshort == false ? 0 : na) strategy.exit("Stop Short", "Short", stop = stopshort)