모멘텀 브레이크업 전략의 추세

저자:차오장, 날짜: 2024-01-05 13:38:18
태그:

img

전반적인 설명

이 전략은 트렌드 다음 모멘텀 브레이크아웃 전략이라고 불린다. 현재 트렌드 방향을 결정하기 위해 슈퍼 트렌드 지표를 사용하여 모멘텀 브레이크아웃을 달성하기 위해 트렌드 다음 트레이딩을 위한 촛불 몸의 방향과 결합한다.

전략 논리

이 전략의 핵심은 현재 트렌드 방향을 판단하기 위해 슈퍼 트렌드 지표에 의존합니다. 슈퍼 트렌드 지표는 평균 진실 범위 (ATR) 를 기반으로 상부 및 하부 대역을 계산합니다. 가격이 상부 대역을 통과하면 상승 신호이며 가격이 하부 대역을 통과하면 하향 신호입니다.

슈퍼 트렌드 지표가 상승 추세를 결정할 때, 촛불이 빨간색 몸 (폐기 아래 오픈) 인 경우, 긴 거. 슈퍼 트렌드 지표가 하락 추세를 결정할 때, 촛불이 녹색 몸 (폐기 위 오픈) 인 경우, 짧은 거. 이것은 모멘텀 브레이크아웃 거래에 따라 추세를 달성합니다.

이점 분석

이 전략은 트렌드 판단과 모멘텀 특성을 결합하여 잘못된 브레이크오프를 효과적으로 필터링하고 거래 신호의 유효성을 향상시킵니다. 또한 트렌드 따라 거래하면 트렌드 반대 작전을 피하고 수익 확률을 크게 향상시킵니다.

주요 장점은 다음과 같이 요약됩니다.

  1. 트렌드 판단과 모멘텀 특성을 결합하여 잘못된 브레이크를 필터링합니다.
  2. 반 트렌드 거래를 피하기 위해 촛불 몸의 방향을 따르십시오
  3. 더 높은 수익성

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. 슈퍼 트렌드 지표의 매개 변수를 설정하는 방법에 대한 문제. 잘못된 매개 변수 설정은 잘못된 판단을 유발하고 잘못된 신호를 생성 할 수 있습니다.
  2. 촛불체 방향만 따지면 몸의 강도를 결정할 수 없고 손실 위험이 있을 수도 있습니다.
  3. 고정된 리스크/이익 비율은 동적으로 조정할 수 없고 단일 손실은 통제할 수 없습니다.

대책은 다음과 같습니다.

  1. 판단을 더 정확하게 하기 위해 슈퍼 트렌드 지표의 매개 변수를 최적화 합니다.
  2. 거래량과 현금 흐름과 같은 지표를 조합하여 촛불의 힘을 판단하십시오.
  3. 단일 손실을 제어하기 위해 동적 스톱 손실을 추가합니다.

최적화 방향

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

  1. 전략 성과를 향상시키기 위해 볼린저 밴드와 KDJ와 같은 신호 필터링을 위한 더 많은 기술적 지표를 결합하십시오.
  2. 기계 학습 알고리즘을 추가하여 매개 변수를 동적으로 최적화하고 슈퍼 트렌드 지표를 더 안정적으로 만듭니다.
  3. 손실이 커지기 전에 손실을 막기 위한 스톱 로스 메커니즘을 추가합니다.
  4. 퓨처스 같은 양방향 거래 기능을 가진 상품을 사용해서 긴 기회와 짧은 기회를 최대한 활용할 수 있습니다.

요약

일반적으로 이 전략은 중장기 및 단기 포지션에 매우 적합하다. 트렌드 판단과 브레이크오웃 모멘텀을 결합함으로써 소음을 효과적으로 필터링하고 승률을 향상시킬 수 있다. 동시에, 더 나은 전략 성능을 얻기 위해 매개 변수 최적화를 위한 여지가 있다.


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

//Noro
//2018

//@version=2
strategy("Noro's SuperTrend Strategy v1.0", shorttitle = "ST 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")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
cloud = input(25, defval = 25, minval = 5, maxval = 50, title = "cloud, % of ATR")
Factor = input(title = "Super Trend", defval = 3, minval = 1, maxval = 100)
ATR = input(title = "ATR", defval = 7, minval = 1,maxval = 100)
centr = input(true, defval = true, title = "need center of ATR?")
border = input(false, defval = false, title = "need border?")
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")

//Super Trend ATR 1
src = close
Up=hl2-(Factor*atr(ATR))
Dn=hl2+(Factor*atr(ATR))
TUp=close[1]>TUp[1]? max(Up,TUp[1]) : Up
TDown=close[1]<TDown[1]? min(Dn,TDown[1]) : Dn
Trend = close > TDown[1] ? 1: close< TUp[1]? -1: nz(Trend[1],1)
Tsl1 = Trend==1? TUp: TDown
Tsl2 = Trend==1? TDown: TUp
limit = (Tsl1 - Tsl2) / 100 * cloud
upcloud = Tsl1 - limit
dncloud = Tsl2 + limit

//Cloud
linecolor = Trend == 1 ? green : red
centercolor = centr == true ? blue : na
cloudcolor = Trend == 1 ? green : red
cline = (Tsl1 + Tsl2) / 2
P1 = plot(Tsl1, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend ATR-1")
P2 = plot(Tsl2, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend ATR-2")
P3 = plot(cline, color = centercolor , style = line , linewidth = 1,title = "SuperTrend Center")
P4 = plot(upcloud, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend Center+1")
P5 = plot(dncloud, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend Center-1")
fill(P1, P4, color = linecolor == red ? red : lime, transp = 50)
fill(P2, P5, color = linecolor == red ? red : lime, transp = 50)

//Signals
up = Trend == 1 and close < open //and low < cline 
dn = Trend == -1 and close > open //and high > cline

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
    strategy.entry("Long", strategy.long, needlong ? lot : 0)

if dn
    strategy.entry("Short", strategy.short, needshort ? lot : 0)


더 많은