리소스 로딩... 로딩...

ATR 평균 탈출 전략

저자:차오장, 날짜: 2024-05-17 10:22:11
태그:ATRSMA

img

전반적인 설명

이 전략은 주로 두 가지 지표인 ATR (평균 진범) 및 SMA (단순 이동 평균) 를 사용하여 시장의 통합 및 브레이크오웃을 결정하고 그에 따라 거래를 수행합니다. 전략의 주요 아이디어는: 가격이 상부 또는 하부 ATR 채널을 통과하면 브레이크오웃으로 간주되고 포지션이 열립니다. 가격이 ATR 채널로 돌아 왔을 때 통합으로 간주되며 포지션이 종료됩니다. 동시에 전략은 리스크 제어 및 포지션 관리를 사용하여 각 거래의 위험과 포지션 크기를 제어합니다.

전략 원칙

  1. ATR 및 SMA 지표를 계산합니다. ATR은 시장의 변동성을 결정하는 데 사용되며 SMA는 시장의 평균 가격 수준을 결정하는 데 사용됩니다.
  2. ATR 및 SMA를 기반으로 상부와 하부 한도를 계산합니다. 상부 한도는 SMA + ATR * 곱셈자이며, 하부 한도는 SMA - ATR * 곱셈자이며, 곱셈자는 사용자 정의 곱셈자입니다.
  3. 시장이 통합 상태에 있는지 결정합니다. 최고 가격이 상단보다 낮고 최저 가격이 하단보다 높을 때 시장이 통합 상태에 있다고 간주됩니다.
  4. 시장에서 파업이 발생했는지 여부를 결정합니다. 가장 높은 가격이 상위 한계를 넘으면 상승 파업으로 간주됩니다. 가장 낮은 가격이 하위 한계를 넘으면 하락 파업으로 간주됩니다.
  5. 브레이크아웃 상황에 따라 포지션을 열고, 상향 브레이크아웃을 위한 긴 포지션과 하향 브레이크아웃을 위한 짧은 포지션을 열고,
  6. 스톱 로스 및 테이크 프로프트 조건에 따라 포지션을 닫습니다. 가격이 스톱 로스 가격 (SMA - ATR * 스톱_로스_퍼센티) 또는 테이크 프로프트 가격 (SMA + ATR * 테이크_프로프트_퍼센티) 에 도달하면 포지션을 닫습니다.
  7. 각 거래에 대한 위험 금액 (risk_per_trade) 을 사용자 정의 위험 비율 (risk_percentage) 을 기반으로 계산하고, 그 다음 ATR을 기반으로 포지션 크기를 (position_size) 계산합니다.

이점 분석

  1. 전략 논리는 명확하고 이해하기 쉽고 구현하기 쉽습니다.
  2. 시장 변동성을 결정하기 위해 ATR 지표를 사용하는 것은 전략이 다른 시장 조건에 적응할 수 있도록 합니다.
  3. 시장의 평균 가격 수준을 결정하기 위해 SMA 지표를 사용하는 것은 전략이 시장의 주요 추세를 추적 할 수 있습니다.
  4. 포지션을 열 때 시장의 통합 상태를 고려하면 불안정한 시장에서 빈번한 거래를 피하는 데 도움이됩니다.
  5. 스톱 로즈와 트레이프 로프의 사용은 각 거래의 위험을 효과적으로 제어합니다.
  6. 포지션 관리의 사용은 계좌 자금과 위험 비율에 따라 자동으로 포지션 크기를 조정할 수 있습니다.

위험 분석

  1. 이 전략은 불안정한 시장에서 잘 작동하지 않을 수 있습니다. 왜냐하면 빈번한 브레이크업과 통합은 포지션의 빈번한 개점과 폐쇄로 이어질 수 있기 때문에 거래 비용을 증가시킬 수 있습니다.
  2. 전략의 매개 변수 설정은 성능에 상당한 영향을 미칩니다. 다른 매개 변수가 완전히 다른 결과를 초래할 수 있으므로 세심한 디버깅과 매개 변수 최적화가 필요합니다.
  3. 전략의 스톱 로스 및 트레이프 설정은 충분히 유연하지 않을 수 있습니다. 고정 비율의 스톱 로스 및 트레이프는 다른 시장 조건에 적응 할 수 없습니다.
  4. 전략의 포지션 관리는 너무 단순할 수 있고 시장 추세와 변동성 등의 요인을 고려하지 않아 경우에 따라서는 과대 또는 과소 규모의 포지션으로 이어질 수 있습니다.

최적화 방향

  1. 트렌드 필터링 조건을 추가하는 것을 고려하십시오. 예를 들어 트렌드가 상승할 때만 긴 포지션을 개설하고 트렌드가 하락할 때 짧은 포지션을 개설하여 불안정한 시장에서 빈번한 거래를 피하십시오.
  2. 더 유연한 스톱 로스 및 취리 방법, 예를 들어 ATR 또는 시장 변동성에 기반한 스톱 로스 및 취리 거리를 동적으로 조정하여 다른 시장 조건에 적응하는 방법을 고려하십시오.
  3. 더 복잡한 포지션 관리 방법을 사용하도록 고려하십시오. 예를 들어 시장 추세와 변동성에 따라 포지션 크기를 조정하여 위험을 제어하고 수익을 높입니다.
  4. 전략의 신뢰성과 안정성을 더욱 향상시키기 위해 거래량과 변동성과 같은 다른 필터링 조건을 추가하는 것을 고려하십시오.

요약

이 전략은 각 거래의 위험과 위치 크기를 제어하기 위해 위험 통제 및 위치 관리를 사용하여 가격 브레이크와 통합을 결정하여 두 가지 간단한 지표인 ATR 및 SMA를 사용하여 거래를 수행합니다. 전략 논리는 명확하고 이해하기 쉽고 구현하기 쉽지만, 불안정한 시장에서 낮은 성과, 전략 성과에 대한 매개 변수 설정의 중요한 영향, 유연하지 않은 스톱 로스 및 영리 설정 및 지나치게 간단한 위치 관리와 같은 실제 응용에서 전략의 신뢰성과 안정성을 향상시키기 위해 트렌드 필터링 조건을 추가하고, 더 유연한 스톱 로스 및 영리 방법을 사용하여, 더 복잡한 위치 관리 방법을 사용하여, 다른 필터링 조건을 추가하여 특정 상황에 따라 최적화 및 개선해야합니다.


/*backtest
start: 2024-05-09 00:00:00
end: 2024-05-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Consolidation Breakout Strategy", overlay=true)

// Input Parameters
length = input.int(20, "Length", minval=1)
multiplier = input.float(2.0, "Multiplier", minval=0.1, maxval=10.0)
risk_percentage = input.float(1.0, "Risk Percentage", minval=0.1, maxval=10.0)
stop_loss_percentage = input.float(1.0, "Stop Loss Percentage", minval=0.1, maxval=10.0)
take_profit_percentage = input.float(2.0, "Take Profit Percentage", minval=0.1, maxval=10.0)

// ATR calculation
atr_value = ta.atr(length)

// Average price calculation
average_price = ta.sma(close, length)

// Upper and lower bounds for consolidation detection
upper_bound = average_price + multiplier * atr_value
lower_bound = average_price - multiplier * atr_value

// Consolidation detection
is_consolidating = (high < upper_bound) and (low > lower_bound)

// Breakout detection
is_breakout_up = high > upper_bound
is_breakout_down = low < lower_bound

// Entry conditions
enter_long = is_breakout_up and not is_consolidating
enter_short = is_breakout_down and not is_consolidating

// Exit conditions
exit_long = low < (average_price - atr_value * stop_loss_percentage) or high > (average_price + atr_value * take_profit_percentage)
exit_short = high > (average_price + atr_value * stop_loss_percentage) or low < (average_price - atr_value * take_profit_percentage)

// Risk calculation
risk_per_trade = strategy.equity * (risk_percentage / 100)
position_size = risk_per_trade / atr_value

// Strategy
if (enter_long)
    strategy.entry("Long", strategy.long, qty=position_size)
if (enter_short)
    strategy.entry("Short", strategy.short, qty=position_size)

if (exit_long)
    strategy.close("Long")
if (exit_short)
    strategy.close("Short")


관련

더 많은