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

48. 파인 스크립트 기초

모아태산 2022. 9. 14. 01:09

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

버전 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로 지정할 수 있으면 이걸로 계산 없이 동적 자산배분 백테스트 할 수 있을 듯 하다!