이동 평균 채널 브레이크업 전략

저자:차오장, 날짜: 2023-12-12 17:38:19
태그:

img

전반적인 설명

이것은 이동 평균 및 범위 채널을 기반으로 한 이동 평균 채널 브레이크 아웃 전략입니다. 상위/하위 채널 라인과 이동 평균 라인을 사용하여 거래 신호의 브레이크 아웃을 결정합니다.

전략 논리

이 전략의 핵심 논리는 다음과 같습니다.

  1. 중간선으로 특정 기간의 이동평균선을 설정합니다.

  2. 상위와 하위 채널 라인을 설정 중계 라인을 특정 비율로 곱하여. 상위 라인은 중계 라인 * (100% + 미리 설정된 비율). 하위 라인은 중계 라인 * (100% - 미리 설정된 비율).

  3. 가격이 상위선을 넘어서면, 단축하고, 가격이 하위선을 넘어서면, 장기화합니다.

  4. 해당 상위/하위 라인에서 주문 가격을 설정합니다.

  5. 가격이 중간선으로 돌아오면 포지션을 닫습니다.

따라서 이동평균 채널의 브레이크아웃을 기반으로 거래됩니다.

이점 분석

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

  1. 단순하고 명확한 개념, 이해하기 쉽고 실행하기 쉽습니다.

  2. 다양한 시장 조건에 맞는 조정 가능한 매개 변수

  3. 중간선과 채널 범위는 시장 소음을 필터하고 트렌드를 파악할 수 있습니다.

  4. 제한 주문 통제 위험

  5. 가격이 중간선으로 돌아왔을 때 손실을 줄이세요.

위험 분석

또한 몇 가지 위험이 있습니다.

  1. 부적절한 매개 변수 설정으로 인해 거래가 과잉/불충분할 수 있습니다.

  2. 거짓 탈출과 스톱 로드의 확률이 높습니다.

  3. 시장의 큰 변동에 따라 중간 및 채널 라인의 실패.

  4. 중간선에서 밀려나서 조기 출구

해결책:

  1. MA 기간과 채널 비율과 같은 매개 변수를 최적화합니다.

  2. 부피와 같은 다른 지표를 추가하여 거짓 파장을 피합니다.

  3. 수동 개입을 늘려

  4. 더 긴 MA 기간과 더 넓은 채널 범위를 사용하십시오.

최적화

이 전략은 다음과 같은 측면에서 개선될 수 있습니다.

  1. 손실을 제한하기 위해 트레일링 스톱과 같은 스톱 손실 방법을 추가합니다.

  2. 잘못된 신호를 줄이기 위해 MACD와 같은 필터링 지표를 추가합니다.

  3. 자동 매개 변수 최적화

  4. 브레이크오웃을 넘어서 더 많은 오픈 포지션 기준을 추가합니다.

  5. 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()

더 많은