적응형 ATR 트렌드 브레이크 전략

저자:차오장, 날짜: 2023-10-31 15:58:46
태그:

img

전반적인 설명

이 전략은 ATR 지표에 기반한 트렌드 브레이크 아웃 전략이다. 주요 아이디어는 가격이 ATR의 특정 배수를 초과할 때 트렌드 브레이크 아웃 트레이드를 취하는 것입니다. 이 전략에는 트렌드 확인과 날짜 범위 내에서 트레이드를 제한하는 것도 포함됩니다.

원칙

이 전략은 가격 변동성을 측정하기 위해 ATR 지표를 사용합니다. ATR은 평균 진정한 범위를 나타냅니다. 이 전략의 길이 매개 변수는 ATR 기간을 계산하고 numATRs는 브레이크아웃의 ATR 곱셈을 나타냅니다.

가격이 ATR의 상위 numATRs 곱하기 위에 넘어가면, 긴 포지션을 취합니다. 가격이 ATR의 하위 numATRs 곱하기 아래에 넘어가면, 짧은 포지션을 취합니다.

또한, 전략은 긴 거래 또는 짧은 거래만을 제어하기 위해 needlong 및 needshort bool 변수를 포함합니다. 또한 지정된 날짜 내에서 거래를 제한하기 위해 날짜 범위를 설정합니다.

이 전략은 규모 변수를 사용하여 포지션 크기를 결정하고 계정 자금의 비율을 기준으로 주문 크기를 계산합니다.

장점

  • ATR을 사용하여 수동 수익/손실 설정 없이 시장 변동에 자동적으로 적응합니다.

  • 긴, 짧은 또는 긴/단만 선택할 수 있는 유연성

  • 중요한 이벤트에서 거래를 피하기 위해 날짜 범위를 설정할 수 있습니다.

  • 계정 자기자본 비율에 기초한 유연한 포지션 크기

위험 과 해결책

  • ATR은 가격 변동성만을 고려합니다. 큰 시장 변동 중에는 충분한 스톱 로스가 없을 수 있습니다. 다른 지표가 결합 될 수 있습니다.

  • 날짜 범위 제한은 전에 / 후에 좋은 설정이 없으면 기회를 놓칠 수 있습니다. 날짜 범위를 약간 확장 할 수 있습니다.

  • 주식 비중 규모는 단일 거래에서 큰 손실을 초래할 수 있습니다. 합리적인 비율이 필요합니다.

최적화 아이디어

  • 트렌드 필터를 위한 이동 평균을 추가하여 잘못된 브레이크 루즈를 줄이십시오.

  • 최적의 매개 변수를 찾기 위해 ATR 기간을 테스트합니다.

  • 다른 전략과 결합하여 강점을 활용하고 안정성을 향상시킵니다.

결론

이는 변동성에 적응하기 위해 ATR을 사용하는 전략을 따르는 이해 할 수있는 추세입니다. 매개 변수 최적화 및 다른 전략과 결합하면 성과와 안정성을 더욱 향상시킬 수 있습니다. 그러나 큰 단일 거래 손실을 피하고 큰 변동 중에 충분하지 않은 정지를 주목해야합니다.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Volty Strategy v1.0", shorttitle = "Volty 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
length = input(5)
numATRs = input(0.75)
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Indicator
atrs = sma(tr, length) * numATRs

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if (not na(close[length])) and needlong
    strategy.entry("L", strategy.long, lot, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needlong == false
    strategy.entry("L", strategy.long, 0, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needshort
    strategy.entry("S", strategy.short, lot, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needshort == false
    strategy.entry("S", strategy.short, 0, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

더 많은