브레이크아웃 회귀 전략

저자:차오장, 날짜: 2024-03-01 11:58:56
태그:

img

전반적인 설명

이것은 원유 선물 시장의 변동성을 활용하기 위해 고안된 체계적인 접근법입니다. 촛불의 평균 범위를 측정합니다. 빠른 이동 평균이 느린 것보다 높다면 촛불이 더 크다는 것을 의미합니다. 느린 이동 평균이 빠른 것보다 높다면 촛불이 더 작다는 것을 의미합니다.

이 원칙에 따라, 그것은 잠재적 인 긴 및 짧은 입구점을 식별합니다. 위치는 Exit after bars 입력으로 제어되는 일정 수의 촛불에서만 유지됩니다.

전략 논리

  1. 가장 최근 9개의 바의 가장 높은 폐쇄 가격을 브레이크아웃 기준으로 계산합니다.
  2. 가장 최근의 50 바의 최저 폐쇄 가격을 브레이크아웃 기준으로 계산합니다.
  3. 촛불 패턴이 팽창하거나 수축하는지 판단하기 위해 가장 최근의 5 바와 20 바의 평균 변동성을 비교하십시오.
  4. 긴 신호와 짧은 신호를 식별: 닫는 가장 높은 닫는 것과 촛불 수축과 같을 때, 길게 이동; 닫는 가장 낮은 닫는 것과 촛불 수축과 같을 때, 짧게 이동
  5. 브레이크오웃을 거쳐 일정한 바 수를 마친 후 닫기 위치: 조절 가능한 매개 변수

이점 분석

  1. 회귀 전략, 역사적 극단과 비교하여 방향을 판단
  2. 변동성과 결합하여 가짜 브레이크를 피하십시오.
  3. 일정한 수익에 출구 잠금 바의 일정한 수 및 유출을 피합니다

위험 분석

  1. 역사적인 극한은 시장 구조의 변화와 함께 변하고 신호는 실패 할 수 있습니다.
  2. 가짜 탈출은 함정에 갇히게 만듭니다.
  3. 부적절한 출구 간격은 더 큰 수익을 잃거나 손실을 증가시킬 수 있습니다.

최적화

  1. 극한 매개 변수들은 시장 통계로 최적화 될 수 있습니다.
  2. 진정한 파기 확률을 평가하기 위해 변동성 메트릭을 추가합니다.
  3. 백테스트 결과를 통해 출구 바의 수를 최적화

요약

이 전략은 변동성 전략에 속하는 단기 트렌드를 결정하기 위해 브레이크아웃과 회귀를 활용합니다. 매개 변수를 최적화하고 잘못된 브레이크아웃 확률을 결정하기 위해 변동성 메트릭을 추가함으로써 수익성을 높일 수 있습니다. 또한 빠른 출구 메커니즘은 일부 수익을 잠그고 위험을 효과적으로 제어합니다. 단기 거래에 보조 도구로 사용될 수 있으며 매개 변수 조정을 통해 장기 거래 신호를 생성 할 수 있습니다.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Celestial_Logic

//@version=5
strategy("Crudeoil Breakout strategy", overlay = true, initial_capital = 20000, default_qty_type = strategy.fixed, default_qty_value = 1)


highestCloseLookback = input(9 , title = 'Highest Close lookback')
lowestCloseLookback  = input(50, title = 'Lowest Close lookback'  ) 

exitAfter = input(10, title = 'Exit after bars')

hc = ta.highest(close,highestCloseLookback)
lc = ta.lowest(close,lowestCloseLookback)

rangeFilter = (ta.sma( (high - low), 5 ) > ta.sma((high-low), 20) ) // Candles getting bigger.

longCondition  = (close == hc ) and not rangeFilter
shortCondition = (close == lc ) and not rangeFilter
if  longCondition
    strategy.entry(id = 'long', direction = strategy.long) 
if shortCondition
    strategy.entry(id = 'short', direction = strategy.short)



var int longsince = 0 
var int shortsince = 0 

if strategy.position_size > 0 
    longsince += 1
else
    longsince := 0

if strategy.position_size < 0 
    shortsince += 1 
else 
    shortsince := 0

if longsince >= exitAfter 
    strategy.close(id = 'long', comment = 'long close')
if shortsince >= exitAfter
    strategy.close(id = 'short', comment = 'short close')



더 많은