가격 돌파 최고 및 최저 전략 추적


생성 날짜: 2023-12-22 12:59:43 마지막으로 수정됨: 2023-12-22 12:59:43
복사: 1 클릭수: 606
avatar of ChaoZhang ChaoZhang
1
집중하다
1623
수행원

가격 돌파 최고 및 최저 전략 추적

개요

브레이크 하이 로즈 전략은 가격이 K 라인을 뚫기 전의 최고점이나 최저점을 추적하는 트렌드 추적 전략이다. 그것은 이동 평균을 결합하여 트렌드 방향을 판단하고, 브레이크 포인트에서 진입한 다음 스톱로스를 설정하거나 스톱로스를 추적하여 수익을 잠금합니다.

전략 원칙

이 전략은 주로 다음과 같은 조건들을 고려하여 포지션을 개시하고 상장하기로 결정합니다:

  1. K선을 빨간색 또는 녹색으로 판단하여 K선을 상승하거나 하락하는 것을 결정합니다.
  2. 현재 K 선이 이전 K 선의 최고점과 최저점을 뚫고 있는지 판단합니다.
  3. 빠른 이동 평균과 느린 이동 평균을 사용하여 트렌드 방향을 판단합니다.
  4. 상위 K 라인이 상위 K 라인의 하위 K 라인의 하위 K 라인을 넘으면 더 많은 것을 하고, 하위 K 라인이 상위 K 라인의 하위 K 라인을 넘으면 더 많은 것을 하고
  5. 평점 조건은 스톱로스 또는 추적 스톱로스 트리거; 또한 역 K 라인이 나타나면 즉시 스톱로스를 설정할 수 있습니다.

이 전략은 동시에 제2의 반전 K선 판단과 결합하여 가짜 돌파를 필터링하여 돌파 신호의 신뢰성을 보장한다.

우위 분석

  • 전략적 지향이 명확하고, 돌파구 운영이 쉽게 관리됩니다.
  • 이중 이동 평균과 결합하면 큰 추세를 정확하게 판단할 수 있습니다.
  • 더 많은 수익을 확보하는 데 도움이 되는 ‘스트롭 트래킹’
  • 역 K선 메커니즘은 추격하는 것을 피하는 데 도움이 됩니다.

위험 분석

  • 파격 실패로 인해 초단계 운영 손실이 발생할 수 있습니다.
  • 위기 상황에서는 가짜 돌파구가 더 위험하다
  • 이중 이동 평균은 미지수로 판단이 잘못될 수 있습니다.

위험 관리 조치:

  1. 지수 또는 주력 대장표를 선택하여 개별 주식의 높은 위험을 피하십시오.
  2. 이동 평균 변수를 최적화하여 판단의 정확도를 향상시킵니다.
  3. 단편적 손실을 통제하기 위해 적절히 커진 스톱 라인

최적화 방향

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

  1. 다른 이동 평균 변수 조합을 테스트합니다.
  2. 테스트는 다른 지표와 결합하여 판단합니다.
  3. 포지션 개시 및 정지 지점을 최적화하는 매개 변수
  4. 양적인 필터링 규칙을 늘리고,
  5. 기계 학습 알고리즘과 결합하여 변수 적응 최적화

요약하다

파격 하위 전략은 전체적으로 더 성숙한 트렌드 추적 전략으로, 이동 평균 보조 판단 하에, 어느 정도의 트렌드를 잡을 수 있으며, 스톱 로드 및 추적 스톱 로드 메커니즘도 수익을 잠금하는 데 도움이됩니다. 지속적인 테스트 및 최적화를 통해, 이 전략의 매개 변수 설정과 효과를 더욱 우수하게 만들 수 있습니다.

전략 소스 코드
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Broken High/Low Strategy", overlay=true, initial_capital = 5000, default_qty_value = 25, pyramiding = 10, default_qty_type= strategy.percent_of_equity)

useEMAForStop = input.bool(false, 'Use trail stop EMA', group = 'Exit strategy')
trailStopMALength = input(8, 'Trail stop EMA length', group = 'Exit strategy')

fastMALength = input(5 , 'Fast MA length', group = 'Trend strength')
fastEMAEnabled = input.bool(false, 'Fast EMA enabled (default is SMA)', group = 'Trend strength')

slowMALength = input(10, 'Slow MA length', group = 'Trend strength')
slowEMAEnabled = input.bool(false, 'Slow EMA enabled (default is SMA)', group = 'Trend strength')

ignoreSlowMA = input.bool(false, 'Use fast MA for trend ignoring slow MA', group = 'Trend strength')

useOpposingBarAsExit = input.bool(false, 'Using opposing bar as exit', group = 'Exit strategy')
secondEntryEnabled = input.bool(false, 'Second bar that eliminates opposing bar for entry', group = 'Trend strength')

longsEnabled = input.bool(true, 'Enable longs', group = 'Trade settings')
shortsEnabled = input.bool(true, 'Enable shorts', group = 'Trade settings')

fastMA = fastEMAEnabled ? ta.ema(close, fastMALength) : ta.sma(close, fastMALength)
slowMA = slowEMAEnabled ? ta.ema(close, slowMALength) : ta.sma(close, slowMALength)

FromMonth=input.int(defval=1,title="FromMonth",minval=1,maxval=12, group = 'Time filters')
FromDay=input.int(defval=1,title="FromDay",minval=1,maxval=31, group = 'Time filters')
FromYear=input.int(defval=1990,title="FromYear",minval=1900, group = 'Time filters')
ToMonth=input.int(defval=1,title="ToMonth",minval=1,maxval=12, group = 'Time filters')
ToDay=input.int(defval=1,title="ToDay",minval=1,maxval=31, group = 'Time filters')
ToYear=input.int(defval=9999,title="ToYear",minval=2017, group = 'Time filters')
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>time>=start and time<=finish?true:false
afterStartDate = time >= start and time<=finish?true:false
closeTradesEOD = input.bool(false, 'Close trades end of day', group = 'Time filters')

trailStopMA = ta.ema(close, trailStopMALength)

isGreenCandle = close > open
isRedCandle = close < open
isBrokenHigh = close > open[1]
isPriorCandleRed = close[1] < open[1]
isPriorPriorCandleRed = close[2] < open[2]
isPriorPriorCandleGreen = close[2] > open[2]
isPriorCandleGreen = close[1] > open[1]
isBrokenLow = close < open[1]

isPriorRedCandleBroken = isGreenCandle and isPriorCandleRed and isBrokenHigh
isPriorGreenCandleBroken = isRedCandle and isPriorCandleGreen and isBrokenLow

isPriorPriorRedCandleBroken = secondEntryEnabled and not isPriorRedCandleBroken and isGreenCandle and isPriorPriorCandleRed ? close > open[2] : false
isPriorPriorGreenCandleBroken = secondEntryEnabled and not isPriorGreenCandleBroken and isRedCandle and isPriorPriorCandleGreen ? close < open[2] : false

longOpenCondition = (isPriorRedCandleBroken or isPriorPriorRedCandleBroken) and afterStartDate and (ignoreSlowMA ? close > fastMA : fastMA > slowMA) and longsEnabled
longCloseCondition = useOpposingBarAsExit ? isRedCandle : ta.crossunder(close, fastMA)
longCloseCondition := useEMAForStop ? ta.crossunder(close, trailStopMA) : longCloseCondition

shortOpenCondition = (isPriorGreenCandleBroken or isPriorPriorGreenCandleBroken) and afterStartDate and (ignoreSlowMA ? close < fastMA : fastMA < slowMA) and shortsEnabled
shortCloseCondition = useOpposingBarAsExit ? isGreenCandle : ta.crossover(close, fastMA)
shortCloseCondition := useEMAForStop ? ta.crossover(close, trailStopMA) : shortCloseCondition

if (longOpenCondition)
    strategy.entry("Long Entry", strategy.long)

if (longCloseCondition)
    strategy.close('Long Entry', 'Long Exit')

if (shortOpenCondition)
    strategy.entry("Short Entry", strategy.long)

if (shortCloseCondition)
    strategy.close('Short Entry', 'Short Exit')

if (closeTradesEOD and hour >= 14 and minute >= 30)
    strategy.close_all("EOD")

plot(useEMAForStop ? trailStopMA : na, linewidth = 2, color = color.red)
plot(fastMA)
plot(ignoreSlowMA ? na : slowMA, linewidth = 4)