이것은 이동 평균 및 범위 채널을 기반으로 한 이동 평균 채널 브레이크 아웃 전략입니다. 상위/하위 채널 라인과 이동 평균 라인을 사용하여 거래 신호의 브레이크 아웃을 결정합니다.
이 전략의 핵심 논리는 다음과 같습니다.
중간선으로 특정 기간의 이동평균선을 설정합니다.
상위와 하위 채널 라인을 설정 중계 라인을 특정 비율로 곱하여. 상위 라인은 중계 라인 * (100% + 미리 설정된 비율). 하위 라인은 중계 라인 * (100% - 미리 설정된 비율).
가격이 상위선을 넘어서면, 단축하고, 가격이 하위선을 넘어서면, 장기화합니다.
해당 상위/하위 라인에서 주문 가격을 설정합니다.
가격이 중간선으로 돌아오면 포지션을 닫습니다.
따라서 이동평균 채널의 브레이크아웃을 기반으로 거래됩니다.
이 전략의 장점은 다음과 같습니다.
단순하고 명확한 개념, 이해하기 쉽고 실행하기 쉽습니다.
다양한 시장 조건에 맞는 조정 가능한 매개 변수
중간선과 채널 범위는 시장 소음을 필터하고 트렌드를 파악할 수 있습니다.
제한 주문 통제 위험
가격이 중간선으로 돌아왔을 때 손실을 줄이세요.
또한 몇 가지 위험이 있습니다.
부적절한 매개 변수 설정으로 인해 거래가 과잉/불충분할 수 있습니다.
거짓 탈출과 스톱 로드의 확률이 높습니다.
시장의 큰 변동에 따라 중간 및 채널 라인의 실패.
중간선에서 밀려나서 조기 출구
해결책:
MA 기간과 채널 비율과 같은 매개 변수를 최적화합니다.
부피와 같은 다른 지표를 추가하여 거짓 파장을 피합니다.
수동 개입을 늘려
더 긴 MA 기간과 더 넓은 채널 범위를 사용하십시오.
이 전략은 다음과 같은 측면에서 개선될 수 있습니다.
손실을 제한하기 위해 트레일링 스톱과 같은 스톱 손실 방법을 추가합니다.
잘못된 신호를 줄이기 위해 MACD와 같은 필터링 지표를 추가합니다.
자동 매개 변수 최적화
브레이크오웃을 넘어서 더 많은 오픈 포지션 기준을 추가합니다.
MA와 채널 매개 변수를 최적화해
결론적으로, 이것은 실용적인 MA 채널 브레이크아웃 전략이다. 그것은 사용하기 쉬운 간단한 논리를 가지고 있으며, 채널 범위는 소음을 필터 할 수 있습니다. 트렌딩 시장에서 잘 수행합니다. 그러나 위험이 존재하며 추가 필터와 함께 매개 변수는 실제 거래에 최적화되어야합니다. 전략은 특정 실용적이고 개발 가치가 있습니다.
/*backtest start: 2023-01-01 00:00:00 end: 2023-08-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Robot WhiteBox ShiftMA", shorttitle = "Robot WhiteBox ShiftMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %") per = input(3, title = "Length") src = input(ohlc4, title = "Source") shortlevel = input(10.0, title = "Short line (red)") longlevel = input(-5.0, title = "Long line (lime)") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //SMAs sma = sma(src, per) shortline = sma * ((100 + shortlevel) / 100) longline = sma * ((100 + longlevel) / 100) plot(shortline, linewidth = 2, color = red, title = "Short line") plot(sma, linewidth = 2, color = blue, title = "SMA line") plot(longline, linewidth = 2, color = lime, title = "Long line") //Trading size = strategy.position_size lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] if (not na(close[per])) and size == 0 and needlong strategy.entry("L", strategy.long, lot, limit = longline) if (not na(close[per])) and size == 0 and needshort strategy.entry("S", strategy.short, lot, limit = shortline) if (not na(close[per])) and size > 0 strategy.entry("Close", strategy.short, 0, limit = sma) if (not na(close[per])) and size < 0 strategy.entry("Close", strategy.long, 0, limit = sma) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all()