이동평균선 범위 돌파 전략


생성 날짜: 2023-12-12 17:38:19 마지막으로 수정됨: 2023-12-12 17:38:19
복사: 0 클릭수: 715
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

이동평균선 범위 돌파 전략

개요

이 전략은 이동 평균에 기반한 간격 돌파 전략이다. 이는 일정 주기 이동 평균과 설정된 상하 궤도를 기준으로 가격 돌파를 판단하여 거래한다.

전략 원칙

이 전략의 핵심 원칙은 다음과 같습니다.

  1. 특정 주기 이동 평균을 설정하여 중축으로

  2. 중앙축 위아래 구간 범위는 중앙축을 곱하여 일정 비율로 얻는다. 상단선은 중앙축을 곱하여 ((100% + %를 설정), 하단선은 중앙축을 곱하여 ((100% - %를 설정) 한다.

  3. 가격이 상승하면 상선을 돌파할 때, 하락하면 하락할 때, 하락하면 하락할 때, 하락하면 하락할 때.

  4. 주문 가격은 상하의 상하의 선형 가격으로 설정된다.

  5. 가격이 중축으로 돌아왔을 때, 평행은 출발한다.

따라서, 이동 평균과 그 간격의 범위를 통해 가격의 돌파구를 포착하여 거래 전략을 구현합니다.

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 개념은 간단하고 명확하며, 이해하기 쉽고 구현하기 쉽습니다.

  2. 다른 시장 환경에 적응하기 위해 매개 변수를 조정할 수 있습니다.

  3. 중축과 간격 범위는 시장 소음을 효과적으로 필터링하여 트렌드를 잡을 수 있습니다.

  4. 제한 가격 주문을 통해 위험을 조절할 수 있습니다.

  5. 중축으로 돌아가는 동안 손실을 막고 과도한 손실을 피하십시오.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 부적절한 간격 변수 설정은 거래의 빈도나 부족으로 이어질 수 있다.

  2. 돌파는 가짜 돌파가 발생할 가능성이 높으며, 정지 손실이 발생할 수 있다.

  3. 상황이 급격하게 변동할 때, 중축선과 구간 범위는 유효하지 않습니다.

  4. 중축으로 돌아가는 동안 강제 중단으로 인해 조기 퇴출이 발생할 수 있습니다.

대응방법:

  1. 최적화 매개 변수, 적절한 이동 평균 주기 및 간격 비율을 선택하십시오.

  2. 다른 지표와 함께 가능한 한 가짜 돌파구를 피하십시오.

  3. 인간의 개입을 늘리세요.

  4. 이동 평균의 주기가 더 길게 설정되어 있고, 간격 범위는 적절히 확대된다.

최적화 방향

이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.

  1. 스톱로스 조건을 추가하여 스톱로스를 추적하고 과도한 손실을 방지하는 것

  2. MACD, KD 등과 같은 지표 필터를 추가하여 가짜 돌파구를 줄여줍니다.

  3. 자동 매개 변수 최적화 기능이 추가되어 시장 변화에 따라 매개 변수가 실시간으로 조정될 수 있습니다.

  4. 포지션 개설 조건을 늘리고, 단순히 돌파구에 의존하는 것을 피한다.

  5. 이동 평균 주기 및 간격 파라미터 설정을 최적화하십시오.

요약하다

이 전략은 전체적으로 비교적 실용적인 이동 평균 범위를 돌파하는 전략이다. 그것의 개념은 간단하고 이해하기 쉽고, 구현하기 쉬우며, 범위를 필터링하는 소음으로 트렌드가 더 뚜렷한 시장에서 더 효과적이다. 그러나 또한 몇 가지 위험이 있으며, 매개 변수 최적화와 다른 지표와 결합하여 사용에 주의를 기울여야 한다.

전략 소스 코드
/*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()