모멘텀 찾기 전략


생성 날짜: 2024-01-25 12:34:59 마지막으로 수정됨: 2024-01-25 12:34:59
복사: 1 클릭수: 559
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

모멘텀 찾기 전략

개요

이 전략은 브린 띠, KC 채널, 그리고 라인 컬러와 같은 여러 지표들을 통해 시장의 압축과 풀림을 판단하고, 평행선의 방향과 결합하여 establishment 트렌드를 판단하고, 트렌드 방향이 전환될 때 동작한다.

전략 원칙

  1. 브린 띠. 브린 띠의 중간 궤도가 N일 종식 가격의 간단한 이동 평균, 상단 궤도가 중간 궤도 + KC 통로의 N일 실제 파장의 M배, 하단 궤도 중간 궤도-KC 통로의 N일 실제 파장의 M배를 계산한다.

  2. 계산 KC 통로 △ KC 통로의 중간 궤도는 N일 종식 가격의 간단한 이동 평균, 상단 궤도는 중간 궤도 + N일 실제 파장의 M배, 하단 궤도는 중간 궤도-N일 실제 파장의 M배 △

  3. 압축과 방출을 판단한다. KC 통로 상단 궤도보다 부린 띠 상단 궤도가 낮고 KC 통로 하단 궤도보다 부린 띠 하단 궤도가 높을 때 압축한다. KC 통로 상단 궤도보다 부린 띠 상단 궤도가 높고 KC 통로 하단 궤도보다 부린 띠 하단 궤도가 낮을 때 방출한다.

  4. Establishment 트렌드를 계산한다. N일 종료 가격 - N일 최고 가격과 최저 가격의 평균값을 입력하여, N일 선형 회귀를 계산한다. 그 값이 0보다 크면 Establishment 상승 트렌드를 나타내고, 0보다 작으면 Establishment 하락 트렌드를 나타낸다.

  5. 거래 신호 ≪Establishment이 상승할 때, 단선과 방출은 다중 신호; Establishment이 하락할 때, 단선과 압축은 공백 신호 ≫

전략적 이점

  1. 다중 지표 판단, 신호 정확도를 높인다. 부린 밴드, KC 채널 및 와이어를 결합하여 시장 움직임을 판단하고, 가짜 신호를 피한다.

  2. Establishment 추세를 판단하고, 추세에 따라 거래한다. Establishment 판단을 이용하여 주요 추세를 판단하고, 역동적인 조작을 피한다.

  3. 자동 중지, 위험 제어 . 가격이 중지 라인을 만지면 자동 평점 중지 .

전략적 위험

  1. 부린 띠와 KC 통로 파라미터가 잘못 설정되어 압축과 방출 판단에 오류가 발생할 수 있습니다.

  2. 이스타그램은 트렌드 판단에 뒤쳐져 있고, 트렌드 전환점을 놓칠 수도 있다.

  3. 갑작스러운 사건으로 인해 엄청난 손실이 발생하고, 손실을 막을 수 없으며, 손실의 위험이 있습니다.

최적화 방법: 브린 벨트 및 KC 통로 파라미터를 조정하고, ADX와 같은 지표 보조 판단을 적용합니다.

전략 최적화 방향

  1. KDJ, MACD 등등.

  2. 새로운 트렌드를 포착할 수 있도록 Establishment Average의 주기적 변수를 최적화한다.

  3. 거래량 지표에 추가하여 가짜 돌파구를 피하십시오. 예를 들어 에너지 유조 지표, 축적 / 분배 등.

  4. 다중 시간 주기 판단, 장선과 단선 신호를 구분한다. 을 피한다.

  5. AI 최적화 변수, 검색된 수록수, 검색된 최우수 변수 조합. overmatching.

요약하다

이 전략의 주요 아이디어는: 브린 띠를 사용하여 시장의 압축 및 방출을 결정; 설치 트렌드를 사용하여 주요 트렌드 방향을 결정; 압축 방출의 전환점에서 반설계 방향으로 작동. 전략의 장점은 신호의 정확성, 손실이 있으며, 가짜 신호를 피하는 것입니다. 전략의 최적화 방향은: 다중 지표 조합, 트렌드 판단 파라미터 최적화, 양 에너지 지표, 다중 시간 주기 판단, AI 우위를 추구하는 등이 있습니다.

전략 소스 코드
/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2017

//@version=2
strategy(shorttitle = "Squeeze str 1.1", title="Noro's Squeeze Momentum Strategy v1.1", 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")
lev = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage")
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
mode2 = input(true, defval = true, title = "Mode 2")
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(2018, defval = 2018, 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)

//Body
body = abs(close - open)
abody = sma(body, 10) / 3

//Indicator
bcol = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scol = noSqz ? blue : sqzOn ? black : gray 
plot(val, color=bcol, style=histogram, linewidth=4)
plot(0, color=scol, style=cross, linewidth=2)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = trend == 1 and (bar == -1 or usecolor == false) and (body > abody or usebody == false) and mode2 == false
dn1 = trend == -1 and (bar == 1 or usecolor == false) and (body > abody or usebody == false) and mode2 == false

up2 = trend == 1 and val < val[1] and mode2 
dn2 = trend == -1 and val > val[1] and mode2

exit = (strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price) and mode2

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * lev : lot[1]

if up1 or up2
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1 or dn2
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if exit
    strategy.close_all()