더블 이동 평균 모멘텀 마팅게일 전략


생성 날짜: 2023-12-25 17:01:28 마지막으로 수정됨: 2023-12-25 17:01:28
복사: 0 클릭수: 564
avatar of ChaoZhang ChaoZhang
1
집중하다
1623
수행원

더블 이동 평균 모멘텀 마팅게일 전략

개요

이 전략은 세 가지 다른 기술 지표를 결합하여 쌍평선 시스템을 사용하여 거래 신호를 생성하고 K 선의 색상과 개체를 추가 필터링 조건으로 사용하여 비교적 안정적이고 효과적인 단선 거래 전략을 구축합니다.

전략 원칙

전체 전략은 KC 통로 안에 있는 부린 띠를 압축 및 확장 단계로 인식하기 위해 부린 띠와 KC 통로를 조합하여 사용한다. 구체적으로, 부린 띠는 KC 통로 안에 있을 때 압축으로 간주되고, 부린 띠가 KC 통로를 뚫을 때 확장으로 간주된다. 압축은 변동이 심화되고 트렌드 반전이 일어날 가능성을 나타냅니다. 이 경우 선형 회귀를 주요 거래 신호 지표로 사용합니다.

만약 선형 회귀 히스토그램이 긍정적이면 (→ 상승세를 나타냅니다), 그리고 이 바가 빨간색 K선 (→ 이 바가 마이너스를 나타냅니다), 그리고 K선 개체가 지난 30개의 K선 개체들의 평균보다 13 더 크면, 이러한 조합 신호는 더 많이 이루어집니다; 반대로 선형 회귀 히스토그램이 부정적이면, 이 바가 초록색 K선이고, 개체도 더 크면, 비어집니다.

이 전략은 시장의 단계에 대한 판단을 돕기 위해 동시에 압축과 확장의 배경이 시각화됩니다.

전략적 강점 분석

  • 여러 지표를 조합하여 가짜 신호를 효과적으로 필터링할 수 있습니다.
  • 압축은 전략의 효과를 높일 수 있는 역점을 나타냅니다.
  • 엔티티 필터링은 작은 파장의 가짜 돌파구에 의해 오도되는 것을 방지할 수 있다.
  • 변수 최적화를 통해 더 나은 결과를 얻을 수 있습니다.

전략적 위험 분석

  • 선형 회귀는 잘못된 신호를 내보이며 손실을 초래할 수 있습니다.
  • 브린 벨트와 KC 채널은 압축의 효과가 좋지 않다고 판단합니다.
  • 필터링 조건이 너무 까다롭기 때문에 더 좋은 입구를 놓칠 수 있습니다.
  • 철수할 확률이 높고, 어느 정도의 견딜 수 있는 능력이 필요합니다.

지표 매개 변수를 조정하거나, 필터링 조건을 최적화하는 등의 방법으로 위험을 줄일 수 있다.

전략 최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 다양한 변수 조합과 길이를 시도해 최적의 변수를 찾아보세요.
  2. 최적의 필터링 수준을 찾기 위해 필터링 조건을 증가 또는 감소
  3. 최적의 변수를 자동으로 찾아내는 기계학습 방법
  4. 특정 품종에서 테스트 효과, 다른 품종에 따라 변수를 조정
  5. 단편적 손실을 통제하기 위한 손실을 막는 전략을 강화

요약하다

이 전략은 여러 지표를 통합하여 압축 기회를 식별하면서 필터링 조건을 증가시켜 보다 견고한 고효율 단선 전략을 형성한다. 매개 변수 및 필터링 조건을 최적화함으로써 더 나은 효과를 얻을 수 있다. 그리고 이 전략의 프레임워크는 유연하며, 다른 품종에서 사용하기 쉽게 조정할 수 있으며, 추가 테스트 및 최적화를 할 가치가 있다.

전략 소스 코드
/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2017

//@version=2
strategy(shorttitle = "Squeeze str 1.0", title="Noro's Squeeze Momentum Strategy v1.0", overlay = false, 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")
length = input(20, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = true
usecolor = input(true, defval = true, title = "Use color of candle")
usebody = input(true, defval = true, title = "Use EMA Body")
needbg = input(false, defval = false, title = "Show trend background")
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")

// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn  = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz  = (sqzOn == false) and (sqzOff == false)

val = linreg(source  -  avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)

bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : gray 

trend = val > 0 ? 1 : val < 0 ? -1 : 0

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//EMA Body
body = abs(close - open)
emabody = ema(body, 30) / 3

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = trend == 1 and (bar == -1 or usecolor == false) and (body > emabody or usebody == false)
dn = trend == -1 and (bar == 1 or usecolor == false) and (body > emabody or usebody == false)

if up
    strategy.entry("Long", strategy.long)

if dn
    strategy.entry("Short", strategy.short)