목차
지표(Indicators), 전략(Strategies) 기본
지표, 전략 차트에 표시하기
- 먼저 지표나 전략을 사용하기 위해서는 차트에서 지표, 측정지표 & 전략 클릭합니다.
- 지표 또는 전략에서 하나를 클릭하면 차트에 로드됩니다.
- 지표에서 클릭하게 되면 현재 차트에 해당 지표가 추가되게 됩니다. 클릭한 것들이 모두 표시되게 됩니다.
- 전략에서 클릭하게 되면 아래와 같이 전략 테스터 결과가 나오게 됩니다.
- 지표에서 클릭하게 되면 현재 차트에 해당 지표가 추가되게 됩니다. 클릭한 것들이 모두 표시되게 됩니다.
- 참고 : 로드된 지표나 전략을 제거하기
- 우측 목록에서 오브젝트 트리 및 데이터 윈도우를 클릭한 뒤 X 표시를 누르면 해당 지표나 전략이 차트에서 지워지게 됩니다.
지표, 전략 설정 변경하기
- 해당 지표나 전략의 이름을 더블클릭하게 되면 지표, 전략 설정을 변경할 수 있는 창으로 이동하게 됩니다.
- 차트에 있는 지표나 전략 이름을 더블 클릭해도 되고, 우측 목록의 오브젝트 트리 및 데이터 윈도우에서 해당 지표나 전략의 이름을 더블 클릭해도 됩니다.
대표적인 지표, 전략 Pine Script 코드보고 학습하기
- 대표적인 Pine Script 지표, 전략
- TradingView 자체적으로 내장된 전략 코드를 보고 학습할 수 도 있습니다. 다양한 기본 전략들이 소개되고 있으며, 이를 보고 코드를 분석해 보면서 학습이 가능합니다.
- 커뮤니티 스크립트에서 여러 사용자들이 작성한 코드들을 분석하면서 학습도 가능합니다. 다만 이 코드들은 다양한 전략들이 섞여있는 경우가 많아, 코드가 어려울 수 있습니다.
- TradingView 자체적으로 내장된 전략 코드를 보고 학습할 수 도 있습니다. 다양한 기본 전략들이 소개되고 있으며, 이를 보고 코드를 분석해 보면서 학습이 가능합니다.
- 로드한 지표, 차트 Pine Script코드 살펴보기
- 차트에 로드하고 나면 해당 지표나 전략 이름 위에 마우스를 놓게 될 경우 다음과 같이 { }가 있는 것을 확인할 수 있습니다.
- 이는 소스 코드를 의미하는 것으로 클릭하여 안에 코드들을 자세히 확인이 가능합니다.
- 해당 소스 코드는 읽기 전용으로 만약 코드를 편집하고 싶다면 작업 복사본 만들기를 클릭하거나, 해당 이름 옆에 자물쇠버튼을 클릭하면 복사본 생성이 가능합니다.
- 차트에 로드하고 나면 해당 지표나 전략 이름 위에 마우스를 놓게 될 경우 다음과 같이 { }가 있는 것을 확인할 수 있습니다.
Pine Script로 작성할 수 있는 스크립트 종류
- Indicators : RSI, MACD와 같은 지표를 생성가능합니다.
- Strategies : 거래 주문을 발생하는 논리를 포함할 수 있고, 백테스트나 포워드 테스트가 가능합니다.
- Libraries : 다른 스크립트에서 재사용할 수 있는 자주 사용되는 기능을 패키지 하기 위해 사용하는 것입니다.
지표(indicators) vs 전략(strategies)
- Indicators 는 RSI, MACD와 같은 단순한 지표를 의미하고 Strategies는 거래 주문을 발생하는 논리를 포함할 수 있고, 백테스트나 포워드 테스트가 가능합니다.
- 간단하게 말하면 둘의 가장 큰 차이점은 백테스팅이 가능한가입니다. 똑같이 계산과정이 들어가고 차트에 표시하지만, 백테스팅이 가능하면 Strategies이고 백테스팅이 불가능하다면 Indicators입니다. 이 백테스팅 여부로 인하여 시간차이가 존재할 수도 있습니다.
- Startegies의 경우 strategy.*()과 같은 시뮬레이션 거래 주문을 브로커 에뮬레이터(broker emulator)로 전송하고 백테스팅이 진행되기 때문에, 시간이 더 소요될 수 있습니다.
- Indicators는 단순히 계산만 하기 때문에 리소스를 덜 사용하고 더 빠르게 실행됩니다.
- 적절하게 선택해서 사용하는 것이 중요합니다.
- Pine Editor에서 열기를 누르면 다음과 같이 indicator를 선택할지 strategy를 선택할지 정할 수 있습니다. 원하는 것을 선택하고 코드를 작성하면 됩니다.
- 백테스팅으로 인하여 둘은 약간의 코드 스타일의 차이가 존재할 수 있습니다. 이를 생각하고 코드에서 indicator인지 strategy인지 먼저 확인하고 코드를 살펴보면 처음에 학습할 때 도움이 될 수 있습니다.
- 또한 지표와 전략은 실시간 차트에서 작동방식이 다릅니다. 이는 아래 Pine Script 실행 과정을 참고해 주시길 바랍니다.
Pine Script 예시 (MACD indicator)
- 편집기 오른쪽 오른쪽 상단에 있는 열기를 누른 뒤 New indicator 클릭하여 새로운 스크립트를 생성합니다. 그 후 아래와 같이 스크립트를 작성합니다.
-
//@version=5 indicator("MACD #1") fast = 12 slow = 26 fastMA = ta.ema(close, fast) slowMA = ta.ema(close, slow) macd = fastMA - slowMA signal = ta.ema(macd, 9) plot(macd, color = color.blue) plot(signal, color = color.orange)
- 참고 : 앞으로 Pine Script 코드들을 작성할때 파이썬 코드는 아니지만 Pine Script라는 코드 표시가 없기 때문에 Python으로 표시하도록 하겠습니다.
- 코드에 대한 간단한 설명
-
더보기
- //@version=5
- 컴파일러에게 스크립트가 Pine Script 버전 5를 사용할 것임을 알려주는 컴파일러 주석입니다.
- indicator("MACD #1")
- 차트에서 표시될 스크립트의 이름입니다.
- fast = 12 / slow = 26
- fast / slow라는 정수형 변수를 선언합니다.
- fastMA = ta.ema(close, fast) / slowMA = ta.ema(close, slow) /
- ta는 "Technical Analysis" 의 줄임말로 Pine Script에서는 다양한 기술적 분석 도구와 함수들을 ta 접두사를 사용하여 제공하고 있습니다.
- macd = fastMA - slowMA
- 위에서 계산한 두 값의 차이를 구합니다.
- signal = ta.ema(macd, 9)
- fastMA나 slowMA 처럼 ta를 이용하여 ema를 계산합니다.
- plot(macd, color = color.blue) / plot(signal, color = color.orange)
- 색을 지정해서 선을 그리게 됩니다.
- //@version=5
-
-
- 저장을 클릭하고 원하는 이름으로 저장해 줍니다.
- 그 후에 이제 위에서 했던 것처럼 지표, 전략 추가에 들어가서 내 스크립트에 들어가 보면 방금 추가한 지표가 추가된 것을 확인할 수 있습니다.
- 참고 : 위처럼 직접 원리를 알고 macd를 계산할 수도 있지만, 찾아보면 직접 구현되어 있는 함수들이 많이 존재합니다. 따라서 아래처럼 코드를 간단하게 작성할 수 있습니다.
-
//@version=5 indicator("MACD #2") fastInput = input(12, "Fast length") slowInput = input(26, "Slow length") [macdLine, signalLine, histLine] = ta.macd(close, fastInput, slowInput, 9) plot(macdLine, color = color.blue) plot(signalLine, color = color.orange)
-
Pine Script 실행 과정
- Pine Script는 한 번 실행되고 중단되는 다른 프로그래밍 언어와는 다릅니다. Pine Script의 런타임 환경에서 스크립트는 보이지 않는 루프와 같은 환경에서 실행되며, 사용자가 보고 있는 차트의 각 막대(bar)마다 왼쪽에서 오른쪽으로 한 번씩 실행됩니다.
- 이를 꼭 생각해서 코드를 이해하고 작성해야 어려움이 없을 것입니다.
- 또한 백테스팅(과거 데이터)과 실시간 거래에서도 차이가 존재합니다.
- 백테스팅(과거 데이터)에서는 위에서 말한 바와 같이 현재 차트의 time에 대해서 각 bar마다 스크립트가 실행되게 됩니다.
- 반면 실시간 거래에서는 가격이나 거래량의 변화가 감지될 때마다 스크립트가 실행되게 됩니다. 또한 해당 실시간 막대가 종료될 때 마지막으로 한번 더 실행됩니다. 이는 실시간 데이터에 대응하여 스크립트가 동적으로 작동하게 하며, 최신 시장 상황에 즉각적으로 반응할 수 있도록 합니다.
- 따라서 스크립트가 과거 bar에서 실행될 때는 close라는 변수는 해당 막대의 종가 값을 의미하지만, 실시간 bar에서는 스크립트가 실행될 때는 close는 bar가 종료될 때까지 현재 가격을 의미하게 됩니다. (즉, 실시간 차트에서는 스크립트가 실행될 때마다 close가 의미하는 것은 현재 가격을 의미하는 것입니다.)
- 또한 close와 마찬가지로 high나 low의 경우도 실시간 막대에서는 하나의 막대에서 가격이 계속 변화하기 때문에 값이 계속 변화할 수 있습니다. (과거 데이터처럼 정적인 값이 아닙니다.)
- 하지만 여기서 중요하게 알고 넘어가야 할 것이 있습니다. 이는 실시간 막대에서 지표(Indicator)와 전략(strategy)의 작동방식에도 차이가 존재한다는 것입니다.
- 지표(Indicator)의 경우 현재 가격이나 거래량이 변화될 때마다 계속해서 스크립트가 실행되게 됩니다.
- 즉 위에서 설명한 실시간 bar에 대한 설명은 지표(Indicator)에 대한 설명입니다.
- 전략(strategy)의 경우 실시간 막대가 마감될 때 한 번만 실행되게 됩니다.
- 그러나 전략의 경우에도 calc_on_every_tick=true로 설정하게 된다면 지표처럼 실시간 막대가 업데이트 될때마다 실행되도록 전략의 동작을 수정할 수 있습니다.
- 따라서 단순히 막대가 마감될때마다 실행되게 하고 싶다면 calc_on_every_tick을 False로 하고 그게 아니라 지표처럼 실시간으로 막대의 가격이나 거래량이 변화할 때마다 스크립트가 실행되게 하고 싶다면 calc_on_every_tick을 True로 설정하면 됩니다.
- 하지만 calc_on_evry_tick=true을 하더라도 indicator처럼 plot의 경우도 실시간 데이터에 따라서 자동으로 변화하지 않습니다.
- 지표(Indicator)의 경우 현재 가격이나 거래량이 변화될 때마다 계속해서 스크립트가 실행되게 됩니다.
- 추가적으로 실시간 막대에서 기억해야할 사항이 있습니다.
- 스크립트는 실시간 막대가 열릴때 실행된 후 업데이트당(가격이나 거래량이 변화할 때) 한 번씩 실행됩니다.
- 매번 실시간으로 업데이트(가격이나 거래량이 변화할 때) 하기 전에 변수들은 롤백됩니다.
- 롤백이란 변수등이 저장된 상태를 초기화하는 것입니다.
- 이것은 스크립트가 실시간 막대에서 항상 깨끗한 상태에서 계산을 수행할 수 있도록 하기 위함입니다.
- 변수는 실시간 bar 한개에서는 계속 롤백하고 업데이트 하다가 마지막에 완료되고 다음봉으로 넘어갈 때 한 번씩 커밋됩니다.
- 뒤에서 설명하겠지만, 이 설명은 var에 대한 것입니다. varip의 경우는 실시간으로 업데이트될때 변수들이 롤백되지 않고 계속해서 커밋, 즉 값이 계속 업데이트되게 됩니다.
- 스크립트에서 종목과 시간을 선택하는 방법
- 보고있는 차트의 symbol(즉, 종목)이 변화하거나, timeframe(시간기준봉)이 변화한 경우에 차트의 전체 막대 세트에서 스크립트가 실행되게 됩니다.
- 즉, 보고 있는 차트 종목과 시간기준에 따라 스크립트가 실행되게 됩니다.
- 따라서 내가 만약 5분 봉에서 비트코인에 따른 백테스팅을 진행하고 싶다면, 차트를 비트코인 5분 봉으로 변경해 주면 됩니다.
'Algorithm Trading > Pine Script v5 기본' 카테고리의 다른 글
Pine Script v5 기본 개념 - 2 (Strategies) (1) | 2024.01.05 |
---|---|
Pine Script v5 기본 개념 - 1 (Alerts) (1) | 2023.12.26 |
Pine Script v5 기본 문법 - 3 (Qualifiers, Types, Tuple) (0) | 2023.12.26 |
Pine Script v5 기본 문법 - 2 (조건문, 반복문) (0) | 2023.12.25 |
Pine Script v5 기본 문법 - 1 (스크립트 기본, 연산자, 변수선언) (0) | 2023.12.24 |