파인스크립트로 가장 기초적인 sma(단순이동평균), ema (가중이동평균)을 만들어 보도록 하겠습니다.
SMA(단순이동평균) - 단순 평균값을 계산하여 만든선입니다.
//@version=5
indicator("Thxbot script")
// sma20=ta.sma(close,20) //이평선은 파인스크립트 내장함수로 기본으로 제공합니다.
//아래는 기초학습을 위해 파인스크립트 사용자정의 함수로 만들어본 이평선 예제입니다.
sma_custom(src, length) =>
sum = 0.0
for i = 0 to length-1
sum := sum + src[i]
sma = sum / length
sma
sma20 = sma_custom(close, 20)
plot(sma20,color = color.red)
EMA(가중이동평균) - 최근 데이터에 더 큰 가중치를 부여하는 방식계산되는 이동평균
//@version=5
indicator("Thxbot script")
//ema20=ta.ema(close, 20) //파인스크립트에서 기본적으로 제공하는 ema 내장함수
ema_custom(src, length) =>
alpha = 2 / (length + 1)
ema = src
if na(ema[1])
ema := src
else
ema := alpha * src + (1 - alpha) * ema[1]
ema
ema20 = ema_custom(close, 20)
plot(ema20,color = color.blue)
"NaN"은 "Not a Number"의 약자로, 숫자로 정의되지 않은 값을 나타냅니다. 일반적으로 연산이 정의되지 않은 경우 이 값이 발생합니다.
예를 들어, 0을 0으로 나눌 때의 결과는 "정의되지 않음"으로 간주되고, 이러한 경우에 NaN 값이 반환됩니다.
또는 NaN값과 연산을 하는경우에도 NaN값을 리턴합니다
//@version=5
indicator("Thxbot script")
a=na +1 //na는 내장변수입니다.(NaN값)
plot(a)
결과 : 아무런 값도 출력되지 않습니다.
na함수
na 함수는 시계열 데이터에서 누락된 값이나 undefined 값이 있는지 확인하는 데 사용됩니다.
na는 Not Available의 약자입니다.
예제1:
//@version=5
indicator("Thxbot script")
x = na(close[1]) ? close : na
plot(x)
이 스크립트에서 na(close[1])는 이전 (1 기간 전)의 종가(close[1])가 누락되었는지 확인합니다. 만약 누락되었다면(na(close[1])가 참이라면), 현재 종가(close)를 x에 할당하고, 그렇지 않다면 na (즉, 누락된 값)를 x에 할당합니다.
따라서 이 스크립트는 이전 종가가 누락된 경우에만 현재 종가를 플롯하고, 그렇지 않은 경우에는 값을 플롯하지 않습니다.
예제2:
//@version=5
indicator("Thxbot script")
sma20 = ta.sma(close, 20) //파인스크립트 버전5이전에는 sma(close,20) 이렇게 작성
plot(na(sma20) ? na : sma20)
이 예제에서는 20기간의 단순 이동 평균(SMA)을 계산합니다. 그런 다음, na 함수를 사용하여 이동 평균이 유효한지 확인합니다. 만약 20기간의 데이터가 충분하지 않아 이동 평균을 계산할 수 없다면(na(sma20)가 참이라면), 그래프에 아무것도 플롯하지 않습니다(na). 그렇지 않다면, 이동 평균을 플롯합니다(sma20).
이렇게 na 함수를 사용하면 충분한 데이터가 없어 계산을 할 수 없는 초기 기간 동안에는 이동 평균을 플롯하지 않는 등, 누락된 데이터를 적절하게 처리할 수 있습니다.
nz함수
nz 함수는 "na" 함수와 유사한 역할을 하지만, 누락된 값을 다른 값으로 대체하는 기능을 가지고 있습니다.
nz 함수는 첫 번째 인수로 시계열 데이터를 받고, 선택적으로 두 번째 인수를 받아 시계열 데이터에 누락된 값이 있을 경우 이를 대체합니다.
이 스크립트는 현재 종가와 20기간 단순 이동평균(SMA) 간의 차이를 플롯합니다. 만약 이동평균이 유효하지 않다면(sma20가 na라면), 이동평균을 현재 종가(close)로 가정하고 계산합니다. 이렇게 nz 함수를 사용하면 누락된 값을 적절하게 처리하고, 연산을 계속할 수 있습니다.
파인스크립트에서 시리즈(series)는 시간에 따라 변화하는 값의 순서를 나타내는 데이터 유형입니다.
이는 주로 가격 데이터와 같은 시계열 데이터를 다루는 데 사용됩니다.
예를 들어, close, open, high, low와 같은 기본 제공 변수들은 모두 시리즈입니다.
시리즈는 일련의 값들을 나타내며, 각 값은 특정 시간에 해당합니다. 시리즈의 가장 최근 값은 현재 시간(즉, 현재 바)에 해당하며, 이전의 값들은 과거의 시간에 해당합니다.
시리즈를 사용하면 시간에 따른 데이터의 변화를 쉽게 처리할 수 있습니다. 예를 들어, 이동 평균을 계산하거나 과거의 가격을 현재 가격과 비교하는 등의 작업을 할 수 있습니다.
시리즈의 특정 값을 접근하려면 대괄호([])를 사용하고, 대괄호 안에 원하는 시간을 지정합니다. 0은 현재 바를, 1은 이전 바를, 2는 그 이전 바를 가리킵니다.
예를 들어, close[1]은 이전 바의 종가를 나타냅니다.
다음은 시리즈를 사용하는 간단한 파인스크립트 예제입니다
//@version=5
indicator("Thxbot script")
difference = close - close[1] // 현재 바의 종가와 이전 바의 종가의 차이를 계산합니다.
//difference = close[0] - close[1] // 위 소스와 현재 소스는 같은 결과값을 보여줍니다.
plot(difference) //계산한값을 그래프로 나타냅니다.
파인스크립트에서 조건문은 특정 조건이 참인지 거짓인지에 따라 다른 코드를 실행하는 데 사용됩니다. 조건문은 주로 if, else if, else 키워드를 사용하여 작성되며, 조건은 대개 비교 연산자나 논리 연산자를 사용하여 표현합니다.
if문
//@version=5
indicator("Thxbot script")
a=100
if a>=100
a := 200 //재할당이므로 (:=)를 사용
결과
200
if, else if
//@version=5
indicator("Thxbot script")
a=100
if a > 100
a := 200 //재할당이므로 (:=)를 사용
else if a <= 100
a := 50 //재할당이므로 (:=)를 사용
결과
50
if, else if, else
//@version=5
indicator("Thxbot script")
a=100
if a > 100
a := 200 //재할당이므로 (:=)를 사용
else if a < 100
a := 50 //재할당이므로 (:=)를 사용
else
a := 1000
plot(a)
결과
1000
아래는 트레이딩뷰에 스크립트를 넣고 결과 화면입니다. plot함수는 차후에 배우겠지만 간략하게 설명드리면 인자로 입력한 값을 차트에 그려주는 함수입니다.
조건에 따라 두 개의 다른 값을 선택할 수 있게 합니다.
condition ? result1(true) : result2(false)
condition이 참이면 result1실행, 거짓이면 result2실행
예)
age=26
whatAge=(age >21) ? "Up" : "Down"
결과 : "Up"
파인스크립트(Pine Script)는 TradingView에서 사용되는 프로그래밍 언어로, 주로 주식, 가상화폐, 외환 등의 거래 차트에 기술적 분석을 위한 사용자 정의 인디케이터와 전략을 작성하는 데 사용됩니다. 파인스크립트에서 변수(variables)는 값을 저장하고 참조하기 위한 메모리 공간을 가리키는 이름입니다. 변수를 사용하면 코드를 작성할 때 동일한 값에 대해 반복적으로 기입하는 대신 값을 한 번 할당하고 여러 번 참조할 수 있습니다.
파인스크립트(Pine Script)는 거래뷰(TradingView)의 독특한 프로그래밍 언어로, 사용자가 원하는 기술적 지표, 전략, 경고 및 시각적 도구를 작성하는 데 도움이 됩니다. 파인스크립트를 사용하면 금융 차트에 다양한 추가 기능을 적용할 수 있습니다. 이를 통해 트레이더와 투자자들이 시장 분석을 보다 효과적으로 수행할 수 있습니다.
파인스크립트의 주요 기능
1. 지표(Indicators): 거래뷰에서 기본으로 제공하는 지표 외에도, 사용자는 파인스크립트를 사용하여 새로운 지표를 생성할 수 있습니다. 이를 통해 트레이더들은 자신만의 독특한 지표를 만들어 시장 분석에 활용할 수 있습니다.
2. 전략(Strategies): 파인스크립트를 사용하여 전략을 작성할 수 있습니다. 이를 통해 트레이더들은 거래 전략을 자동화하고, 과거 데이터를 기반으로 전략의 성능을 평가할 수 있습니다. 전략은 엔트리(entry)와 익스잇(exit) 조건을 정의하며, 전략 테스터를 통해 성능을 확인할 수 있습니다.
3. 경고(Alerts): 사용자 지정 조건에 따라 경고를 설정할 수 있습니다. 이를 통해 트레이더들은 중요한 시장 상황 변화에 신속하게 대응할 수 있습니다.
4. 시각적 도구(Visual Tools): 파인스크립트를 사용하여 차트에 다양한 시각적 요소를 추가할 수 있습니다. 이를 통해 트레이더들은 차트를 보다 쉽게 이해할 수 있습니다.
파인스크립트 작성 방법
1. 스크립트 구조: 스크립트는 study() 또는 strategy() 함수로 시작합니다. 이 함수는 스크립트의 속성과 설정을 정의합니다. 그 다음, 스크립트는 변수, 함수, 계산식, 그리고 그래픽 요소를 포함할 수 있습니다.
2. 변수 선언: 변수는 시장 데이터를 저장하거나 계산 결과를 저장하는 데 사용됩니다. 변수를 선언하려면, 변수의 유형과 이름을 지정해야 합니다.
3. 함수 정의: 함수는 특정 작업을 수행하는 코드 블록입니다. 함수는 입력 값을 받아 처리한 후 결과를 반환합니다.
4. 계산식:계산식은 변수, 함수, 상수, 연산자 등을 조합하여 특정 값을 계산하는 표현식입니다. 계산식을 사용하여 지표 및 전략에서 필요한 수치를 도출하거나, 차트에 그리기 위한 좌표를 계산할 수 있습니다.
5. 출력 및 그래픽 요소: 결과값이나 계산식을 차트에 시각적으로 표현하기 위해, 파인스크립트에서는 다양한 그래픽 요소를 사용할 수 있습니다. 예를 들어, plot() 함수를 사용하여 선이나 점을 그릴 수 있고, hline()이나 vline() 함수를 사용하여 수평선이나 수직선을 그릴 수 있습니다. 또한, text() 함수를 사용하여 차트에 텍스트를 추가할 수 있습니다.
6. 공유 및 적용: 스크립트를 완성한 후, 거래뷰의 스크립트 편집기에서 "저장 및 적용" 버튼을 클릭하여 차트에 스크립트를 적용할 수 있습니다. 스크립트를 다른 사용자와 공유하려면, "공유" 버튼을 클릭하여 공개 또는 비공개로 설정할 수 있습니다.
파인스크립트를 배우는 데 도움이 되는 리소스
1. 거래뷰 공식 문서: 거래뷰의 공식 문서에서는 파인스크립트의 기본 개념과 문법, 함수 및 예제를 제공합니다.
2. 거래뷰 커뮤니티: 거래뷰의 커뮤니티에서는 다른 사용자가 작성한 스크립트를 참고하거나, 질문을 통해 도움을 받을 수 있습니다.
3. 온라인 강좌 및 튜토리얼: 인터넷에서는 파인스크립트를 배울 수 있는 다양한 강좌 및 튜토리얼을 찾을 수 있습니다. 이러한 자료를 통해 파인스크립트를 보다 심층적으로 이해하고 익힐 수 있습니다.
파인스크립트는 금융 시장 분석에 필요한 다양한 기능을 제공하며, 트레이더와 투자자들이 시장에 대한 독특한 시각을 얻을 수 있도록 도와줍니다. 이를 통해 개별 투자자와 전문가들은 자신만의 기술 분석 도구와 전략을 만들어 시장에서 경쟁력을 갖출 수 있습니다. 또한, 거래뷰 플랫폼을 통해 파인스크립트를 사용하는 사용자들은 서로 소통하고 협력할 수 있으며, 이를 통해 전략과 아이디어를 공유하고 발전시킬 수 있습니다.
파인스크립트를 사용하여 시장 분석을 더욱 효과적으로 수행하고, 금융 시장에서 자신만의 독특한 기술 분석 도구와 전략을 만들어 보세요. 초보자부터 전문가까지 다양한 수준의 사용자를 지원하는 간단한 문법, 많은 예제 및 커뮤니티 지원을 통해 파인스크립트를 쉽게 배울 수 있습니다. 이를 통해 차트 분석을 보다 정확하고 효과적으로 수행하며, 시장에서의 성공을 이룰 수 있습니다.