트렌드 브레이크아웃-롱 섀도우 전략


생성 날짜: 2023-11-15 16:43:17 마지막으로 수정됨: 2023-11-15 16:43:17
복사: 2 클릭수: 665
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

트렌드 브레이크아웃-롱 섀도우 전략

이 전략은 K 선의 양 그림자 길이의 비율을 계산하여 현재 트렌드 방향을 판단하고, 평균 실제 파장 ATR과 함께 트렌드 식별을 수행하고, 돌파구에서 역으로 포지션을 개시하고, 스톱 로드 스톱을 설정하고, 단기 트렌드를 캡처한다.

전략 원칙

이 전략은 주로 K 선의 양 그림자 길이의 비율을 계산하여 현재 트렌드 방향을 판단합니다. 양 선의 길이가 너무 길으면 하향 트렌드로 판단하고, 양 선의 길이가 너무 길면 상승 트렌드로 판단합니다.

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

  1. K선 아래의 그림자 길이를 계산한다: close-low
  2. K 선의 상단 그림자 길이를 계산한다: high-open ((최고 가격 - 오픈 가격)
  3. 그림자와 그림자의 최대값을 그림자의 길이가 됩니다.
  4. K선 개체 길이를 계산한다: high-low (최고 가격-최저 가격)
  5. 그림자 길이와 실체 길이의 비율을 계산한다
  6. 비율이 0.5 이상이고 아래 그림자가 위 그림자보다 크면, 하향 경향으로 판단하고, 여러 단골 진출을 설정합니다
  7. 비율이 0.5보다 크며 상조가 하조보다 크면 상승 추세로 판단하고 공백으로 설정합니다.
  8. 진입시 K선 개체 길이가 0.75배의 ATR 평균 실제 파도보다 크는지 동시에 판단하여 무효 돌파구를 피하십시오.
  9. 진입 후 중지 손실을 설정하고, 중지 손실을 진입 가격으로 곱하고, 중지 손실을 진입 가격으로 곱하고, 수익 손실 비율이 2:1입니다.

이 전략의 기본 거래 논리는 트렌드 브레이크 포인트를 식별하여 역으로 포지션을 개시하고 스톱 손실 스톱을 설정한 후 수익을 최적화하는 것입니다.

전략적 이점

  1. 태양과 그림자의 비율을 사용하여 트렌드 방향을 판단하고, 구별이 높습니다.
  2. ATR 지표와 결합하여 효과적인 돌파 판단을 하고, 잘못된 신호를 피한다.
  3. 위험 통제에 도움이 되는 Stop Loss Stop setting
  4. 양적 거래 기준에 맞게 2:1의 수익/손실 비율을 달성
  5. 높은 변동성을 가진 주식 거래에 적용되는 단선 거래
  6. 전략의 논리는 간단하고 명확하며, 구현을 이해하기 쉽습니다.

전략적 위험

  1. 주가가 급격하게 변동할 때, 정지 손실이 뚫려 손실이 확대될 수 있습니다.
  2. 효과는 파라미터를 설정하는 것과 밀접하게 관련되어 있으며, 파라미터를 최적화해야 합니다.
  3. 트렌드가 변하면 손실이 발생할 수 있습니다.
  4. 동시적으로 중지 및 중지 범위를 확장하면 손실 확률이 증가합니다.
  5. () 에 따르면,

합리적인 손실, 최적화 파라미터, 적시에 손실을 막아 위험을 제어할 수 있다.

전략 최적화

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

  1. 햇빛과 그림자 비율을 최적화하여 최적의 값을 찾습니다.
  2. ATR 변수를 최적화하여 K 선의 길이를 가장 잘 결정합니다.
  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)