![[백테스팅 도구] [트레이딩뷰] 가짜 전략 확인 - security() 함수 barmerge.lookahead_on](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
트레이딩뷰에서 제공하는 전략 이용 시, 가짜 전략 확인 필요
트레이딩뷰 전략테스터는 쉽게 투자 전략에 대해 백테스팅을 할 수 있을 뿐만 아니라, 트레이딩뷰 자체적으로 제작하거나 사용자가 제작한 전략을 제공하기 때문에 다양한 전략을 테스트해 볼 수 있습니다. 하지만, 제공되는 전략 중에 백테스팅 시에는 높은 수익률을 산출 하지만 실제 실시간으로 적용 시에는 수익이 발생되지 않은 가짜 전략이 존재합니다.
그중에서 대표적인 이유 중 하나는 security() 함수에서 barmerge.lookahead_on 옵션이 적용된 경우입니다.
자세한 트레이딩뷰와 파인 스크립트 관련 정보는 아래 WikiDocs에 있는 온라인북 참고 바랍니다.
[도서] : 트레이딩뷰 파인 스크립트 개발 : 기술적 지표, 신호, 전략, 백테스팅
트레이딩뷰 파인 스크립트 개발: 기술적 지표, 신호, 전략, 백테스팅
이 책는 트레이딩뷰(TradingView) 플랫폼에서 사용되는 프로그래밍 언어인 파인 스크립트(Pine Script)를 배우고 숙달하기 위한 궁극적인 가이드입니다. 이 포괄적인 …
wikidocs.net
5) 리페인팅 방지
[TOC] 파인 스크립트에서의 리페인팅 개념과 트레이딩 전략에 미치는 영향, 그리고 더 신뢰할 수 있는 결과를 얻기 위해 리페인팅을 방지하는 방법을 살펴볼 것입니다. ## …
wikidocs.net
파인스크립트 security() 함수 - barmerge.lookahead_on 모드
security() 함수는 현재 차트에서 설정된 심볼이 아닌 다른 심볼이나 다른 타임 프레임의 데이터를 가져옵니다.
request.security(symbol, timeframe, expression, gaps, lookahead,
ignore_invalid_symbol, currency)
→ <type of `expression`>
인자는 아래와 같습니다.
- symbol (simple string) 데이터를 요청할 심볼입니다.
- timeframe (simple string) 요청된 데이터의 타임프레임입니다.
- expression (variable, function, array or matrix of series int/float/bool/string/color, or a tuple of these) 해당 타임프레임에서 요청할 값 종류 (예를 들어 종가의 경우 "close")입니다.
- gaps (input barmerge_gaps) barmerge.gaps_on을 사용하면 함수의 콘텍스트에서 처음 사용할 수 있을 때만 현재 차트 표시줄에 값이 나타납니다. 그렇지 않으면 na가 반환됩니다(따라서 "갭"이 발생함). barmerge.gaps_off를 사용하면 na값을 피하면서, 반환된 최신 알려진 값으로 간격이 채워집니다. 기본값은 barmerge.gaps_off입니다.
- lookahead (input barmerge_lookahead) 히스토리 바에서, 타임프레임 내부 데이터를 리턴합니다.
- 쓸 수 있는 값: barmerge.lookahead_on, barmerge.lookahead_off입니다.
- `close [1]` 에서처럼 `expression` 아규먼트를 상쇄하지 않고, 차트보다 더 높은 타임프레임에서 barmerge.lookahead_on를 쓰게 되면 스크립트에서 나중에 리크가 일어날 수 있습니다.
- 예를 들어 차트가 1시간 봉으로 설정하고, 현재 시간이 오후 1시인데 security(syminfo.tickerid, "1D", close, lookahred=barmerge.lookahead_on) 요청하면, 리턴 값이 금일 종가인 밤 12시의 값을 리턴합니다.
- 이는 현재 콘텍스트에서의 실제 `close` 프라이스가 알려지기 앞서 그 값을 리턴하게 되기 때문입니다. 유저 매뉴얼에 나와 있는 리페인팅 설명에 따라 이는 잘못된 결과를 내게 됩니다.
- Pine Script™ v3부터 디폴트는 barmerge.lookahead_off입니다. v1 및 v2에서 디폴트는 barmerge.lookahead_on입니다.
- ignore_invalid_symbol (input bool) 지정된 심볼을 찾을 수 없는 경우 함수의 동작을 결정합니다.
- currency (simple string) 통화 단위 (open, high, low, close 등)입니다.
//@version=5
indicator("Simple `request.security()` calls")
// Returns 1D close of the current symbol.
forecast_close = request.security("AAPL", "1H", close)
plot(dailyClose)
current_close = request.security("AAPL", "1D", close, barmerge.gaps_off, barmerge.lookahead_on))
plot(aaplClose)
if current_close < current_close
strategy.entry("BUY", ...)
위 코드는 1 시간 봉의 종가가 그날의 종가보다 낮으면 매수하는 전략이 됩니다. 실질적으로는 말도 안 되는 전략이며, 실시간에서는 동작이 이상하게 발생될 수 있습니다.
가짜 수익률 사례
여기에서는 하이킨 아시(Heikin Ashi) 기법과 지수 이동평균(EMA)을 조합한 기법인 Heikin Ashi Double EMA Strategy [Krypt] 전략에 사례를 보여 드리도록 하겠습니다. 백테스트는 솔라나(SOLUSDT@Binance) 5분 봉으로 하도록 하겠습니다. 기간은 2022년 11월 7일부터 12월 16일까지 입니다.
![Heikin Ashi Double EMA Strategy [Krypt] 전략 - 백테스트 조건](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)

1. secruity() 함수의 barmerge.lookahead_on 적용 경우 : +50,013.74% 수익
아래 실행 화면처럼 수익이 1달 조금 넘는 기간 동안 +50,013.74%나 됩니다. 승률이 71.64%로 엄청납니다.
![Heikin Ashi Double EMA Strategy [Krypt] 전략 - barmerge.lookahead_on](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
2. secruity() 함수의 barmerge.lookahead_off 경우 : -30.85% 손실
하지만, 실제로 lookahead_off를 실행하면 손실이 -30.85%나 발행됩니다.
![Heikin Ashi Double EMA Strategy [Krypt] 전략 - barmerge.lookahead_off](http://t1.daumcdn.net/tistory_admin/static/images/xBoxReplace_250.png)
이 이유는 아래 소스를 보시면,
ha_t = ticker.heikinashi(syminfo.tickerid)
ha_close = request.security(ha_t, res, logtransform ? math.log(close) : close,
barmerge.gaps_off, barmerge.lookahead_on)
mha_close = request.security(ha_t, res1, logtransform ? math.log(close) : close,
barmerge.gaps_off, barmerge.lookahead_on)
barmerge.lookahead_on으로 되어 있습니다.
이는 트레이딩뷰 리페인팅 현상인데 여기 링크 확인 부탁 드립니다.
트레이딩뷰 전략테스터 이용 시,
Repaint를 발생시키는 security() 함수의 barmerge.lookahead_on 기반 전략은 실제 적용 시 큰 손실을 가져올 수 있으니 유의해야 합니다.
'[백테스팅] 소개' 카테고리의 다른 글
암호화폐 백테스팅: 가상 자산 포트폴리오를 강화하는 방법 (0) | 2023.03.17 |
---|---|
주식 투자 전략과 백테스팅: 당신의 포트폴리오를 높이기 위한 가이드 (0) | 2023.03.17 |
[백테스팅 도구] 파인 스크립트 기본 문법 (0) | 2022.11.25 |
[백테스팅 도구] 파인 스크립트로 작성하는 나만의 트레이딩뷰 전략테스터 (1) | 2022.11.24 |
[백테스팅 도구] 트레이딩뷰 전략테스터 (1) | 2022.11.04 |
댓글