트렌드 브레이크 - 긴 그림자 전략

저자:차오장, 날짜: 2023-11-15 16:43:17
태그:

img

이 전략은 상승/하락 그림자 길이의 비율을 계산하여 현재 트렌드 방향을 판단하고 ATR 지표로 트렌드를 식별합니다. 브레이크아웃 포인트에서 역 포지션을 열고 단기 트렌드를 포착하기 위해 손해를 멈추고 이익을 설정합니다.

전략 논리

이 전략은 주로 상승세/하락세 그림자 비율을 계산하여 현재 경향을 판단합니다. 긴 하락세가 하락세를 나타내고 긴 상승세가 상승세를 나타냅니다.

구체적인 논리는 다음과 같습니다.

  1. 하향 그림자를 계산합니다.
  2. 올림 그림자를 계산하세요: 높은 - 오픈
  3. 그림자 길이가 하향 및 상승 그림자의 최대입니다.
  4. 촛불 몸의 길이를 계산: 높은 - 낮은
  5. 그림자와 몸길이의 비율을 계산합니다.
  6. 비중이 0.5 이상, 하향 비중이 상승률보다 높으면 하향 추세와 긴 포지션을 판단합니다.
  7. 비율이 0.5 이상이고 상승률이 하락률보다 높으면 상승 추세와 단기 포지션을 판단합니다.
  8. 촛불 길이가 > 0.75 * ATR인 경우 브레이크오웃을 검증합니다.
  9. 엔트리 후 스톱 로스를 설정하고 2: 1 비율로 이윤을 취합니다.

위의 것은 기본 거래 논리입니다. 트렌드 검출을 통해 역방향 브레이크오프 포인트를 식별하고 스톱 로스/프로프트로 수익을 최적화합니다.

장점

  1. 그림자 비율은 트렌드를 정확하게 판단합니다.
  2. ATR은 잘못된 탈출 신호를 필터링합니다.
  3. 스톱 로스 및 취득은 위험을 관리합니다.
  4. 2: 1 위험/이익 비율은 양상 거래 표준을 충족합니다
  5. 고 변동성 주식 거래에 적합합니다.
  6. 단순하고 명확한 논리, 이해하기 쉬운

위험성

  1. 가격 변동은 스톱 손실을 발생시키고 손실을 증가시킬 수 있습니다.
  2. 성능은 파라미터 조정에 크게 의존합니다.
  3. 트렌드 반전은 손실로 이어질 수 있습니다.
  4. 스톱 로스/프로프트 취득을 확대하면 손실 확률이 증가할 수 있습니다.
  5. 실패한 탈출은 큰 손실로 이어질 수 있습니다.

합리적인 스톱 로스, 매개 변수 최적화 및 적시에 포지션 종료로 위험을 관리 할 수 있습니다.

강화

전략은 다음과 같은 방법으로 최적화 될 수 있습니다.

  1. 가장 좋은 값을 위해 그림자 비율 매개 변수를 최적화
  2. 가장 좋은 촛불 길이를 위해 ATR 매개 변수를 최적화
  3. 최적의 리스크/이익률을 위해 스톱 로스/이익률을 최적화
  4. 점진적인 위치 증가와 같은 위치 크기를 추가
  5. 수익 보호에 따라 후속 스톱 손실을 추가합니다.
  6. 필터 신호에 다른 표시기를 추가합니다.
  7. 백테스트 기간을 최적화하고 다른 시장 단계를 테스트

다면적 테스트와 최적화로 전략 성능을 극대화 할 수 있습니다.

전체적으로, 이 전략은 트렌드 식별 및 리스크 관리를 통해 단기 가격 변동으로부터 이익을 얻습니다. 최적화되면 양 거래에 대한 강력한 단기 브레이크아웃 전략이 될 수 있습니다.


/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ondrej17

//@version=4
strategy("longWickstrategy", overlay=true )
 
// Inputs
st_yr_inp = input(defval=2020, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
sltp_inp = input(defval=0.8, title='N - % offset for N*SL and (2N)*TP')/100
 
// Dates
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
canTrade = time >= start and time <= end
// Indicators Setup


 
// Strategy Calcuations
lowerWick = (open > close) ? close-low : open - low
upperWick = (open > close) ? high-open : high-close
wickLength = max(lowerWick,upperWick)
candleLength = high-low
wickToCandleRatio = wickLength / candleLength
entryFilterCandleLength = candleLength > 0.75*atr(48)


// Entries and Exits
 
longCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick > upperWick and canTrade and strategy.position_size == 0
shortCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick < upperWick and canTrade and strategy.position_size == 0

strategy.entry("pendingLong", strategy.long, limit=low+wickLength/2, when = longCondition)
strategy.entry("pendingShort", strategy.short, limit=high-wickLength/2, when = shortCondition)

longStop = strategy.position_size > 0 ? strategy.position_avg_price*(1-sltp_inp) : na
longTP = strategy.position_size > 0 ? strategy.position_avg_price*(1+2*sltp_inp) : na
shortStop = strategy.position_size < 0 ? strategy.position_avg_price*(1+sltp_inp) : na
shortTP = strategy.position_size < 0 ? strategy.position_avg_price*(1-2*sltp_inp) : na

strategy.exit("longSLTP","pendingLong", stop=longStop, limit = longTP)
strategy.exit("shortSLTP","pendingShort", stop=shortStop, limit = shortTP)  
 

plot(longStop, color=color.red, style=plot.style_linebr, linewidth=2)
plot(shortStop, color=color.red, style=plot.style_linebr, linewidth=2)
plot(longTP, color=color.green, style=plot.style_linebr, linewidth=2)
plot(shortTP, color=color.green, style=plot.style_linebr, linewidth=2)

plotLongCondition = longCondition ? high+abs(open-close) : na
plot(plotLongCondition, style=plot.style_circles, linewidth=4, color=color.green)
plotShortCondition = shortCondition ? high+abs(open-close) : na
plot(plotShortCondition, style=plot.style_circles, linewidth=4, color=color.red)



더 많은