파인스크립트로 가장 기초적인 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함수는 차후에 배우겠지만 간략하게 설명드리면 인자로 입력한 값을 차트에 그려주는 함수입니다.