이 전략은 주로 트렌드 반전으로부터 이익을 얻기 위해 이중 이동 평균을 구매 및 판매 신호로 사용합니다. 단기 이동 평균이 장기 이동 평균보다 높을 때 길게 이동하고 단기 이동 평균이 장기 이동 평균보다 낮을 때 짧게 이동합니다. 일반적인 트레일링 스톱 손실 전략에 속합니다.
전략은 먼저 두 개의 이동 평균을 설정합니다. 한 가지 짧은 기간 20 일 MA와 한 가지 장기 60 일 MA. 두 가지 MA 사이의 교차 상황을 판단하여 진입을 결정합니다.
구체적으로, 단기 MA가 장기 MA를 넘으면 상승 추세를 나타냅니다. 그래서 길게 가십시오. 단기 MA가 장기 MA를 넘으면 하락 추세를 나타냅니다. 그래서 짧게 가십시오.
긴 또는 짧은 후에 손실을 멈추는 방법은 최대 이익을 잠금하기 위해 가장 높은 가격과 가장 낮은 가격에 기반한 후속 중지입니다.
이 규범의 주요 논리는 다음과 같습니다.
이 전략의 장점은 다음과 같습니다.
또한 몇 가지 위험이 있습니다.
위험을 해결하기 위해:
이 전략은 다음 영역에서 더 이상 최적화 될 수 있습니다.
여러 조건으로 입력하기 위해 RSI 같은 다른 필터를 추가하여 잘못된 브레이크를 피합니다.
가장 좋은 매개 변수 믹스를 찾기 위해 MA 기간을 최적화합니다. 추가적으로 앞으로 걸어 다른 기간을 테스트 할 수 있습니다.
최적의 범위를 찾기 위해 백테스트 계산을 통해 스톱 손실 범위를 최적화합니다. 또한 동적 스톱 손실을 사용할 수 있습니다.
거래 빈도를 줄이기 위해 스톱 로스 출구 후 재입구 논리를 설정합니다.
트렌드가 명확하지 않을 때 트렌드 지표와 결합하여 거래를 중단합니다.
시장 조건에 따라 포지션 크기와 동적 스톱 로스를 추가합니다.
요약하자면, 이중 MA 역전 전략은 전체적으로 간단하고 실용적이며, 이중 MA 크로스오버를 통해 트렌드 전환점을 식별합니다. 그러나 매개 변수 조정, 스톱 로스 최적화 및 전략 효과를 극대화하기 위해 필터를 추가해야하는 위험이 있습니다. 세심한 최적화와 규율적인 위험 관리로 안정적인 수익을 창출하는 스윙 거래 전략이 될 수 있습니다.
/*backtest start: 2023-09-23 00:00:00 end: 2023-10-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Noro's Bands Scalper Strategy v1.4", shorttitle = "Scalper str 1.4", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %") needbe = input(true, defval = true, title = "Bands Entry") needct = input(false, defval = false, title = "Counter-trend entry") needdb = input(true, defval = true, title = "Double Body") len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period") needbb = input(true, defval = true, title = "Show Bands") needbg = input(true, defval = true, title = "Show Background") src = close //PriceChannel 1 lasthigh = highest(src, len) lastlow = lowest(src, len) center = (lasthigh + lastlow) / 2 //Distance dist = abs(src - center) distsma = sma(dist, len) hd = center + distsma ld = center - distsma hd2 = center + distsma * 2 ld2 = center - distsma * 2 //Trend trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1] //Lines colo = needbb == false ? na : black plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2") plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1") plot(center, color = colo, linewidth = 1, transp = 0, title = "center") plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1") plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2") //Background col = needbg == false ? na : trend == 1 ? lime : red bgcolor(col, transp = 80) //Body body = abs(close - open) smabody = needdb == false ? ema(body, 30) : ema(body, 30) * 2 candle = high - low //Signals bar = close > open ? 1 : close < open ? -1 : 0 up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0 dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0 up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0 dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0 if up7 == 1 or up8 == 1 strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na) if dn7 == 1 or dn8 == 1 strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)