파인스크립트 기초

파인(Pine)스크립트란 트레이딩뷰 플랫폼상에서 실행가능한 스크립트이며 코딩하기 위해 Pine에디터를 제공하고 있습니다.
종류로는 지표와 전략 스크립트가 있으며 지표는 차트의 보조지수로 활용하고 전략은 백테스팅이 가능합니다.

이번 장에서는 파인에디터를 이용하여 파인스크립트 개발에 필요한 기초적인 내용에 대해 다루어 보기로 합니다.

지표스크립트 작성방법

아래의 차트에서 Pine에디터 탭을 클릭합니다.

그러면 Pine에디터 상에 아래와 같이 미리 준비된 템플릿 코드가 나타납니다.
[Pine스크립트]
1//@version=3
2study("내 스크립트")
3plot(close)

설명
  • 첫째줄은 Pine스크립트의 버젼을 나타내고 둘째줄은 지표 선언이며 괄호내는 타이틀을 나타냅니다.
  • 지표 스크립트 작성시는 study함수를 사용하며 전략 스크립트를 작성할 경우는 strategy함수로 선언합니다.
  • 세째줄에서 close는 캔들의 종가를 의미하며 plot는 캔들의 종가를 차트상에 그릴때 사용합니다.
그리고 아래의 [차트에 넣기]를 클릭하면 빨간 박스내에 종가를 이은 차트가 나타납니다.
(빨간 박스내의 왼쪽 상단 "내 스크립트"는 타이틀을 의미합니다)

다음에는 간단하게 이동 평균선을 이용한 차트를 그려 보겠습니다.
아래의 차트에서 [새로▲]를 클릭하여 [빈 지표 스크립트]를 선택합니다.


그러면 방금전과 같이 미리 준비된 템플릿 코드가 나타납니다. 기존의 코드를 삭제하고 아래의 코드를 붙여쓰기 한 후 [차트에 넣기]를 실행해 봅니다.
[Pine스크립트]
1//version=3
2study("이동평균선그리기",overlay=true)
3ma = sma(close,21)
4plot(ma)

설명
  • 첫째줄과 둘째줄은 이전 설명과 동일하지만 다른점이 있다면 study함수에 [overlay]라는 속성이 추가되어 있습니다.
  • [overlay=true]은 BTC원화 차트위에 이동평균선을 겹치게 표시(오버레이)하는 속성입니다.
  • 셋째줄은 sma라는 이동평균선을 나타내는 내장함수로써 두개의 파라메터인 캔들의 종가를 나타내는close와 날짜를 의미하는 21을 설정하여 ma라는 변수에 저장하고 있습니다.
  • 즉 21일간의 캔들종가의 이동평균선을 의미합니다.
  • 넷째줄 plot는 이동평균선을 차트상에 그릴때 사용합니다.
차트상에 이동평균선이 눈에 잘 띄지 않기 때문에 굵기를 바꾸어 보겠습니다.
일단 방금 추가한 지표를 삭제하기 위해 아래의 차트에서 ×버튼을 클릭합니다.

다시 Pine에디터에서 아래와 같이 plot함수에 [color]와[linewidth]라는 속성을 추가하여 다시 [차트에 넣기]를 클릭합니다. (※[color]속성에는 red를 지정하고 [linewidth]속성에는 굵기를 3으로 지정합니다)
[Pine스크립트]
1//version=3
2study("이동평균선그리기",overlay=true)
3plot(ma, color=red, linewidth=3)
4plot(ma)
그럼 아래와 같이 굵고 빨간색의 이동평균선이 나타나는걸 확인 할 수 있습나다.

그 다음 [저장]버튼을 클릭하여 지표 스크립트를 저장합니다.

아래와 같이 [열기]버튼을 클릭하면 스크립트 리스트에 [이동평균선그리기]가 추가되어 있는걸 확인할 수 있습니다.

전략스크립트 작성방법

다음은 전략스크립트 작성방법에 대해 알아 보겠습니다.
아래의 Pine에디터에서 [새로▲]를 클릭하여 [빈 전략 스크립트]를 선택합니다.


그러면 아래와 같이 미리 준비된 전략 스크립트의 템플릿이 나타난것을 확인할 수 있습니다.

[Pine스크립트]
 1//@version=3
 2strategy("내 전략", overlay=true)
 3
 4longCondition = crossover(sma(close, 14), sma(close, 28))
 5if (longCondition)
 6    strategy.entry("My Long Entry Id", strategy.long)
 7
 8shortCondition = crossunder(sma(close, 14), sma(close, 28))
 9if (shortCondition)
10    strategy.entry("My Short Entry Id", strategy.short)

설명
  • 첫째줄은 Pine스크립트의 버젼을 나타내고 둘째줄은 전략 선언이며 괄호내는 타이틀을 나타냅니다.
  • 전략 스크립트 작성시는 strategy함수를 사용하며 지표 스크립트를 작성할 경우는 study함수로 선언합니다.
  • 네째줄에서 crossover함수내의 파라메터로 첫번째 sma(close, 14)이고 두번째가 sma(close, 28)입니다.
  • 즉 14일 캔들종가의 이동평균선이 28일 캔들종가의 이동평균선을 위로 크로스되었을떄 longCondition변수에 true를 저장합니다.
  • 반대로 위로 크로스 안되었을 경우에는 false를 저장합니다.
  • 다섯번째줄은 longCondition변수가true인경우(14일 이평이 28일 이평을 위로 크로스) 여섯번째줄을 실행합니다.
  • 여섯번째줄의 strategy.entry함수는 매수 또는 매도할때 사용하는 오더 명령어입니다.
  • 첫번째 파라메터 "My Long Entry Id"는 차트상에 표시되는 문자이며 두번째 strategy.long는 매수를 의미합니다.
  • 8에서 10번째줄은 4에서 6번째줄의 반대의 의미입니다.
[차트에 넣기]를 클릭하면 아래와 같이 매수 지점과 매도 지점이 표시되고 백테스팅 결과도 함께 확인할 수 있습니다.

마지막으로 [저장]버튼을 클릭하여 "내 전략"이라는 이름으로 차트를 저장합니다.

참고로 14일 이동평균선과 28일 이동평균선을 위에서 배운 plot함수를 이용하여 차트에 표시하여 보겠습니다.
아래와 같이 14일 이동평균선은 파란색 28일 이동평균선은 빨간색으로 코드를 수정하여 저장버튼을 클릭합니다.
[Pine스크립트]
 1//@version=3
 2strategy("내 전략", overlay=true)
 3
 4sma14 = sma(close, 14)
 5sma28 = sma(close, 28)
 6plot(sma14, color=blue, linewidth=3)
 7plot(sma28, color=red, linewidth=3)
 8
 9longCondition = crossover(sma14, sma28)
10if (longCondition)
11    strategy.entry("My Long Entry Id", strategy.long)
12
13shortCondition = crossunder(sma14, sma28)
14if (shortCondition)
15    strategy.entry("My Short Entry Id", strategy.short)

얼러트 설정방법

얼러트를 설정하기 위해서는 아래의 alertcondition 내장함수를 사용합니다.
[Pine스크립트]

alertcondition(condition, title, message)

설명
  • 첫번째 파라메터인 condition은 true 또는 false 지정이 가능합니다.
  • true 를 지정한경우는 얼러트를 실행하며 false 인경우는 얼러트를 실행하지 않습니다.
  • 두번째 파라메터인 title 은 얼러트의 타이틀을 지정합니다.
  • 세번째 파라메터인 message 는 얼러트 실행시 표시하는 메시지를 지정합니다.
그럼 위의 전략 스크립트를 활용하여 얼러트를 설정하여 보겠습니다.
[Pine스크립트]
 1//@version=3
 2study("이평선 얼러트실행", overlay=true)
 3
 4sma14 = sma(close, 14)
 5sma28 = sma(close, 28)
 6plot(sma14, color=blue, linewidth=3)
 7plot(sma28, color=red, linewidth=3)
 8
 9longCondition = crossover(sma14, sma28)
10alertcondition(longCondition, title = "Buy", message = "Buy Message!")
11
12shortCondition = crossunder(sma14, sma28)
13alertcondition(shortCondition, title = "Sell", message = "Sell Message!")

위에서 변경된 코드를 살펴보면 두번째, 열번째,열세번째줄입니다.

설명
  • 두번째줄을 보면 strategy 에서 study 함수로 변경되어 있습니다.
  • 여기서 중요한건 alertcondition 함수는 strategy 함수와 함께 사용할 수 없다는 점입니다.
  • 그렇기때문에 반드시 얼러트를 사용하기 위해서는 study 함수로 선언을 해야 합니다.
  • 열번째 longCondition 변수가 true 인 경우 얼러트를 실행하기 위해 첫번째 파라메터에 longCondition을 지정합니다.
  • 즉 14일 이평이 28일 이평을 위로 크로스한 경우에 얼러트를 실행합니다.(매수신호를 나타냄)
  • 두번째 파라메터인 타이틀은 "Buy" 을 지정하고 세번째에는 "Buy Message!"를 지정합니다.
  • 열세번째는 반대로 shortCondition 변수가 true 인 경우 얼러트를 실행하기 위해 첫번째 파라메터에 shortCondition을 지정합니다.
  • 즉 14일 이평이 28일 이평을 아래로 크로스한 경우에 얼러트를 실행합니다.(매도신호를 나타냄)
  • 두번째 파라메터인 타이틀은 "Sell" 을 지정하고 세번째에는 "Sell Message!"를 지정합니다.

위의 코드를 저장한 후 [차트에 넣기]를 실행하면 아래의 차트에 추가되는걸 확인할 수 있습니다.
(※저장시 스크립트이름은 “얼러트 설정"로 지정)

그 다음은 매수 또는 매도 얼러트를 실행하기위해 얼러트를 추가합니다.

매수용 얼러트를 추가
매도용 얼러트를 추가

여기까지 Pine스크립트를 사용하기 위한 기초적인 내용에 대해 다루어 보았습니다.
보다 더 상세한 내용을 공부하고 싶으신 분은 아래의 사이트를 참조해 주세요.