본문 바로가기

백테스트 실전/파인스크립트

48. 파인 스크립트 기초

정교하게 백테스트 코드를 다듬기 위해 파인 스크립트의 기초부터 공부할 필요성을 느꼈다.

버전 5에 대한 내용이고, 도움이 필요하신 분들은 밑의 코드의 주석을 파트마다 지우고 실행해보면서 공부하시면 됩니다:)

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © onist

//@version=5
indicator("내 스크립트", overlay=true)

// '='은 선언에만 사용 변수 수정 시에는 ':=' 사용!
a = 5
a := a + 1
b = 4
a += b // a = a + b

// plot은 해당 식을 차트에 그려주는 함수
//plot(a)

// if문
// a := 10
// b := 5
// if (a > 15 and a > 0)  
//     b += a
// else if (a > 7 or a < 11)
//     b := 1
// else
//     b := 0
// plot(b) //15

// built-in 변수 현재 시가와 종가 및 마지막 가격
// plot(open)
// plot(close)

// for문, while도 당연히 가능 
// b := 0
// for i = 1 to 5 by 2
//     b := b+1
// plot(b)

// switch문
// switch
//     a==10 => b:=1
//     a==20 => b:=2
//     a==30 => b:=3

// function, 마지막 연산된 값으로 return
// f(x,y) =>
//     sum = (x+y)/2
//     sum2 = sum/2
// K = f(open[1], close[1])
// plot(K)

// function, 여러개 return & color graph
// f(x,y) =>
//     sum = (x+y)/2
//     sum2 = sum/2
//     [sum, sum2]
// [k1, k2] = f(open[1], close[1])
// plot(k1, color=color.new(#955628,50), style=plot.style_histogram, title="hello")
// plot(k2)

// built-in function
// 200일 이평선 함수, indicator에 overlay를 켜주면 차트에 겹쳐서 보여줌
//K = ta.sma(close, 200)
//K = ta.rsi(close,14) 
//plot(K)

// math 함수 레퍼런스 참조!

전략도 짜볼 수 있다.

//@version=5
strategy("My Strategy", overlay = true)

// 종가 < 10일 동안의 최소 종가면 true
buyc1 = close < ta.lowest(close[1], 10)
int buyc2 = 5

// 종가가 100일 이평선 넘으면 true
while (close>ta.sma(close,100))
    buyc2:=1
    break

// 10일 동안의 최고 종가보다 높거나, 100일 이평선 밑으로 떨어지면 탈출
exitc = close > ta.highest(close[1], 10) or close < ta.sma(close, 100)

switch
    buyc1 == true and buyc2 == true => strategy.entry("long", strategy.long)
    exitc == true => strategy.close("long")

결과

strategy.entry를 차트에 띄워놓은 종목말고 특정 etf로 지정할 수 있으면 이걸로 계산 없이 동적 자산배분 백테스트 할 수 있을 듯 하다!