정교하게 백테스트 코드를 다듬기 위해 파인 스크립트의 기초부터 공부할 필요성을 느꼈다.
버전 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로 지정할 수 있으면 이걸로 계산 없이 동적 자산배분 백테스트 할 수 있을 듯 하다!