저자:차오장, 날짜: 2024-01-25 12:34:59
태그:

img

전반적인 설명

이 전략은 시장 압축 및 출시를 결정하기 위해 볼링거 밴드, KC 채널 및 촛불 색상과 같은 여러 지표를 사용하며 트렌드 전환이 발생할 때 거래를 수행하기 위해 이동 평균에 기반한 설립 트렌드 판단을 결합합니다.

전략 원칙

  1. 볼링거 밴드를 계산합니다. 볼링거 밴드의 중간 레일은 N 일 폐쇄 가격의 간단한 이동 평균, 상부 레일은 중간 레일 + M × KC 채널의 N 일 진정한 범위 변동성, 하부 레일은 중간 레일 - M × KC 채널의 N 일 진정한 범위 변동성입니다.

  2. KC 채널을 계산합니다. KC 채널의 중간 레일은 N-day 폐쇄 가격의 간단한 이동 평균이며, 상부 레일은 중간 레일 + M × N-day true range 변동성이며, 하부 레일은 중간 레일 - M × N-day true range 변동성입니다.

  3. 판사 압축 및 방출. 볼링거 밴드 상부 레일은 KC 채널 상부 레일 아래에 있고 볼링거 밴드 하부 레일은 KC 채널 하부 레일 위에있을 때 압축입니다. 볼링거 밴드 상부 레일은 KC 채널 상부 레일 위에 있고 볼링거 밴드 하부 레일은 KC 채널 하부 레일 아래에있을 때 방출됩니다.

  4. 설립 트렌드를 계산합니다. N 일간의 가장 높고 가장 낮은 가격의 N 일간의 종료 가격 평균을 입력으로 받아 N 일간의 선형 회귀를 계산하고, 그 값이 0보다 높으면 설립 상승 추세를 나타내고 0보다 작으면 설립 하락 추세를 나타냅니다.

  5. 트레이딩 신호: 이스텔리십이 상승할 때, 짧은 양 라인과 풀리는 것이 긴 신호이며, 이스텔리십이 하락할 때, 짧은 라인과 압축하는 것이 짧은 신호입니다.

전략적 장점

  1. 다중 지표 판단은 신호 정확성을 향상시킵니다. 시장 트렌드를 판단하기 위해 볼링거 밴드, KC 채널 및 촛불을 결합하면 잘못된 신호가 피할 수 있습니다.

  2. 설립 트렌드 판단, 트렌드에 따라 거래. 주요 트렌드를 결정하고 트렌드에 반대하는 거래를 피하기 위해 설립을 사용하십시오.

  3. 자동적인 스톱 로스 위험 조절. 가격이 스톱 로스 라인에 닿을 때 자동적으로 포지션을 닫아서 스톱 로스를 합니다.

전략 위험

  1. 부적절한 Bollinger Bands 및 KC 채널의 매개 변수 설정은 압축 및 방출에 대한 잘못된 판단을 초래할 수 있습니다.

  2. 기업체 추세 판단이 뒤떨어져, 추세 전환점을 놓칠 수도 있습니다.

  3. 갑작스러운 사건들은 막히지 않는 거대한 움직임을 일으켜 상당한 손실의 위험을 초래합니다.

최적화 방법: 볼링거 밴드 및 KC 채널 매개 변수를 조정하고, 판단에 도움이되는 ADX 및 기타 지표를 사용하십시오. 지연을 줄이기 위해 시간적으로 설정 이동 평균 주기를 업데이트하십시오. 중지 손실 라인을 설정 할 때 버퍼 영역을 추가하십시오.

전략 최적화 방향

  1. 더 많은 기술적 지표를 결합하여 포지션 개시 신호의 정확성을 향상시킵니다. 예를 들어 KDJ, MACD 등.

  2. 새로운 트렌드를 더 잘 포착하기 위해 설립 이동 평균의 사이클 매개 변수를 최적화하십시오.

  3. 가짜 브레이크오웃을 피하기 위해 거래량 지표를 추가합니다. 에너지 유동 지표, 축적 / 분배 등과 같이.

  4. 멀티 타임프레임 판단은 중장기 신호와 단기 신호를 구분합니다. 함정에 빠지지 않도록하십시오.

  5. 인공지능 최적화 매개 변수, 철저한 검색, 최적의 매개 변수 조합 검색

요약

이 전략의 주요 아이디어는: 시장의 압축 및 풀림을 결정하기 위해 볼링거 밴드를 사용하는 것; 주요 트렌드 방향을 결정하기 위해 보조 사용 설정 트렌드를 사용하는 것; 압축 및 풀리지의 전환점에 설정의 반대 방향으로 작동하는 것. 전략의 장점은 정확한 신호, 스톱 손실 및 잘못된 신호를 피하는 것입니다. 전략을 최적화하는 방향은: 멀티 지표 조합, 트렌드 판단 매개 변수 최적화, 모멘텀 지표 추가, 멀티 타임프레임 판단, 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()

더 많은