가격 채널 브레이크 전략

저자:차오장, 날짜: 2024-01-16 14:22:57
태그:

img

이 전략은 프라이스 채널 브레이크아웃 전략 (Price Channel Breakout Strategy) 이라고 불린다. 이 전략의 주요 아이디어는 가격 채널을 사용하여 시장 추세와 방향을 결정하고 가격이 채널을 벗어날 때 포지션을 설정하는 것입니다. 먼저 가격 채널 범위를 그리고 두 개의 연속적인 빨간색 또는 녹색 K 라인이 있는지 판단합니다. 마지막 K 라인이 채널 너비의 절반을 뚫고 채널 밖에서 닫으면 구매 또는 판매 신호를 생성합니다.

전략 논리

이 전략은 가격 채널의 상부 및 하부 레일을 결정하기 위해 가장 높고 가장 낮은 () 함수를 사용하여 과거의 특정 기간 동안 가장 높은 것과 가장 낮은 () 함수를 계산합니다. 채널의 중간점은 상부 및 하부 레일의 평균으로 정의됩니다. 다음 K-라인 몸 크기를 계산하고 SMA를 사용하여 매끄럽게하여 마지막 K-라인 몸의 절반이 평균 몸보다 크는지 여부를 결정합니다. 또한 마지막 두 K-라인이 같은 방향으로 있는지 판단합니다. 두 개의 연속적 인 빨간색 또는 녹색. 이러한 조건이 충족되면 구매 / 판매 신호를 생성하고 가격이 채널 방향으로 다시 떨어지면 포지션을 닫습니다.

이점 분석

이것은 전체 트렌드를 판단하기 위해 가격 채널을 사용하는 브레이크아웃 전략입니다. 다음과 같은 장점이 있습니다.

  1. 전체 트렌드 방향을 결정하기 위해 가격 채널을 사용하면 시장 소음을 효과적으로 필터 할 수 있습니다.

  2. 2개의 K선들이 연속적으로 같은 방향으로 채널을 뚫는 것은 더 강한 추진력과 더 높은 성공률을 나타냅니다.

  3. 평균 몸의 절반보다 큰 K-라인 몸을 판단하면 거짓 파업에 의해 오해를 피할 수 있습니다.

  4. 전략 논리는 간단하고 쉽게 구현할 수 있습니다.

  5. 채널 기간, 거래 제품, 거래 시간 등과 같은 사용자 정의 가능한 매개 변수로 인해 매우 적응력이 있습니다.

위험 분석

이 전략은 또한 몇 가지 잠재적인 위험을 가지고 있습니다.

  1. 여전히 실패한 탈출 가능성이 있어 손실로 이어질 수 있습니다.

  2. 가격 채널은 시장의 격렬한 변동으로 실패할 수 있습니다.

  3. 스톱 로스 메커니즘이 없으면 손실을 효과적으로 제어할 수 없습니다.

  4. 간단한 거래 규칙에는 과도한 적합성 위험이 있습니다.

  5. 더 복잡한 시장 환경에 적응할 수 없습니다.

이에 대응하는 해결책은 다음과 같습니다.

  1. 탈출 성공률을 높이기 위해 매개 변수를 최적화해

  2. 시장의 불안을 피하기 위해 변동성 지수를 추가합니다.

  3. 이동 스톱 손실을 추가합니다.

  4. 과잉 융합을 확인하기 위해 복잡성 테스트를 수행합니다.

  5. 적응력을 높이기 위해 머신러닝 모델을 늘려

최적화 방향

주요 최적화 방향은 다음과 같습니다.

  1. 더 나은 위험을 제어하기 위해 스톱 손실 메커니즘을 추가하십시오. ATR에 기반한 가격 리트레이싱 스톱 손실 또는 모바일 스톱 손실을 설정하십시오.

  2. 채널 기간, 브레이크아웃 임계 등과 같은 매개 변수를 최적화합니다. 유전 알고리즘, 그리드 검색 등을 통해 최적 매개 변수를 찾습니다.

  3. 브레이크오웃의 확실성을 높이기 위해 필터링 조건을 추가합니다. 예를 들어 브레이크오웃을 확인하기 위해 거래량을 결합하십시오.

  4. 더 많은 데이터를 활용하여 예측 능력과 적응력을 향상시키기 위해 LSTM와 같은 기계 학습 모델을 추가합니다.

  5. 포트폴리오 최적화를 수행하고, 오르토고날리티를 달성하고 유사성을 줄이기 위해 다양한 유형의 브레이크아웃 전략을 결합합니다.

결론

결론적으로, 이것은 트렌드를 결정하고 브레이크 아웃 신호를 발견하기 위해 가격 채널을 기반으로 한 양적 전략입니다. 트렌드를 판단하고 브레이크 아웃을 확인하는 장점이 있지만 잘못된 브레이크 아웃의 특정 위험도 있습니다. 위험을 줄이기 위해 매개 변수 최적화, 스톱 로스, 필터 등을 추가하여 전략을 개선 할 수 있습니다. 한편, 기계 학습 모델을 도입하면 예측 능력을 더욱 향상시킬 수 있습니다. 전반적으로 이것은 연구하고 개선할 가치가있는 유망한 양적 전략 접근법입니다.


/*backtest
start: 2023-12-16 00:00:00
end: 2024-01-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Price Channel Strategy v1.0", shorttitle = "Price Channel str 1.0", 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")
pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel")
showcl = input(true, defval = true, title = "Show center-line")
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")
src = close

//Price channel
lasthigh = highest(src, pch)
lastlow = lowest(src, pch)
center = (lasthigh + lastlow) / 2
col = showcl ? blue : na
plot(center, color = col, linewidth = 2)

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
rbars = sma(bar, 2) == -1
gbars = sma(bar, 2) == 1

//Signals
body = abs(close - open)
abody = sma(body, 10)
up = rbars and close > center and body > abody / 2
dn = gbars and close < center and body > abody / 2
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2

//Trading
if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    
if exit
    strategy.close_all()

더 많은