이중 MA 트렌드 브레이크업 전략

저자:차오장, 날짜: 2024-01-08 16:43:38
태그:

img

전반적인 설명

듀얼 MA 트렌드 브레이크아웃 전략은 트렌드를 결정하고 엔트리 신호를 생성하기 위해 서로 다른 기간의 두 개의 이동 평균을 사용하는 양적 거래 전략이다. 주로 느린 MA를 통해 전체 트렌드 방향을 판단하고 엔트리 필터링을 위해 빠른 MA를 사용합니다. 더 큰 시간 프레임 트렌드의 방향이 일관되면 더 높은 승률과 수익성을 추구하기 위해 진입하는 반전 바를 선택합니다.

전략 논리

이 전략은 다음과 같은 주요 부분으로 구성됩니다.

추세 판단: 느린 MA로 정의 된 21 기간 MA를 계산합니다. 그 위치는 상대적으로 안정적이며 전체 트렌드 방향을 판단하는 데 사용할 수 있습니다. 가격이 MA 근처에 상승하면 상승 추세입니다. 가격이 MA 근처에 떨어지면 하락 추세입니다.

입력 필터링: 빠른 MA로 정의 된 5 기간 MA를 계산합니다. 가격이 느린 MA와 빠른 MA를 뚫었을 때만 거래 신호가 활성화됩니다. 이 디자인은 주로 잘못된 브레이크의 가능성을 더 잘 여는 것입니다.

촛불 필터링: 이 전략은 현재 촛불이 하향 시점일 때만 장기화되거나 현재 촛불이 상승 시점일 때 단축됩니다. 이는 진입을 위해 반전 바를 사용하는 것이 더 높은 성공률을 얻을 수 있다고 생각합니다. 또한 과잉 구매 또는 과잉 판매 지역에 진입하지 않도록 빠른 RSI 지표를 결합합니다.

피라미드 필터: 암호화폐 시장의 경우, 전략은 또한 중요한 하락 추세에서 과판 기회를 포착하기 위해 변동성 3배의 파업 조건을 포함합니다.

손실 중지: 전략은 이동 스톱 손실을 지원합니다. 포지션을 열면 설정된 비율에 따라 실시간으로 스톱 손실이 업데이트됩니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 이중 MA 디자인은 간단하고 실용적이며 이해하기 쉽고 마스터 할 수 있습니다.
  2. 빠른 MA와 느린 MA를 으로써 신뢰성 있는 트렌드 판단
  3. 반전 바 입력으로 거래 승률을 향상시킵니다.
  4. 전체적인 방법론은 보수적이고 안정적이며 모든 기간에 적합합니다.
  5. 스톱 로스를 리스크 제어로 옮기는 것을 지원합니다.
  6. 특히 암호화폐 시장의 특성을 고려하여 과도한 수익을 얻기 위해 과판 피라미딩 기회를 추가합니다.

위험 분석

이 전략은 또한 몇 가지 위험을 안고 있습니다.

  1. 범위에 묶인 이중 MA 기간 동안, 여러 개의 작은 승과 손실이 있을 것입니다.
  2. 반전 바 입력은 일부 시간 프레임에서 낮은 승률을 가질 수 있습니다.
  3. 암호화폐 시장은 높은 변동성을 가지고 있으며, 스톱 로스가 발생할 확률이 높습니다.
  4. 피라미드 매각 기회는 많지 않고 수익률도 높습니다.

이러한 위험을 해결하기 위해 다음과 같은 측면에서 최적화를 할 수 있습니다.

  1. 비효율적인 윙사 (wipssa) 를 피하기 위해 더 많은 입구 조건을 추가합니다.
  2. 시간 프레임을 조정하거나 필터링을 위한 다른 지표를 추가합니다.
  3. 중간에 가까운 추적을 위해 스톱 로스 알고리즘을 최적화합니다.
  4. 과판된 피라미드 전략의 실제 성과를 평가합니다.

최적화 방향

이 전략을 최적화하는 주요 측면은 다음과 같습니다.

  1. 매개 변수 최적화: 체계적인 역 테스트를 통해 최적의 빠른 및 느린 MA 기간 조합을 찾고 위험 조정 수익을 향상시킵니다.

  2. 패턴 인식: KDJ, MACD와 같은 다른 지표를 추가하여 더 신뢰할 수있는 반전 신호를 식별합니다.

  3. 손실 최적화 중지: 플로팅 또는 트레일링 스톱 로스 알고리즘을 개발하여 중단될 확률을 줄이십시오.

  4. 기계 학습: ML을 사용하여 자동으로 거래 규칙을 생성하기 위해 더 많은 역사 데이터를 수집하고 표시합니다.

  5. 위치 크기: 시장 조건에 따라 위치 크기를 동적으로 조정합니다.

결론

듀얼 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)

더 많은