파인스크립트로 가장 기초적인 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 함수를 사용하면 누락된 값을 적절하게 처리하고, 연산을 계속할 수 있습니다.