파인스크립트 심화반
분류 전략강좌

터틀 트레이딩 6 - 기간 입력 받기

페이지 정보

본문

...중략 (심화반 이상만 볼 수 있습니다.)...


지금까지 작성한 스크립트 입니다.


터틀 트레이딩은 S1이 20일 고점 돌파, 10일 저점 돌파, S2가 55일 고점 돌파, 20일 저점 돌파값을 사용합니다.

전통적인 경제 시장에서 10일은 2주, 20일은 4주, 55일은 11주를 나타냅니다.

(1주 7일 중 토,일은 휴일로써, 실제 영업일은 5일)

그런데, 비트코인은 24시간 연중무휴로 돌아가는 시장이니, 만약에 주단위로 기준을 세우려면 다른 기간을 써야합니다.

10일은 14일(2주)로 20일은 28일(4주)로 55일은 77일(11주)로 해야 말이 될것 같죠.


기간을 바꿀때마다 스크립트를 수정해도 되지만, 번거롭습니다.

하지만 다행히도 전략 속성에서 기간을 입력받아 구현할 수 있습니다.


input(defval, title, type, minval, maxval, confirm, step, options)


input 함수로 숫자나 문자열, 참 거짓 값 등을 받을 수 있습니다.

기간을 입력받을 것이기 때문에 숫자가 되겠죠.

프로그래밍할때 쓰는 숫자에서는 정수와 실수(소수점)를 구분합니다.

기간이라는 것은 차트에서는 봉의 갯수를 뜻하게 되는데, 봉의 갯수는 2.5개 이런식으로 소수점으로는 나타낼 수 없으므로 정수가 됩니다.

정수는 integer라고 부르는데, -2, -1, 0, 1, 2 이렇게 소수점이 달려있지 않으면 정수인것이죠.


지금까지 작성한 스크립트에는 연산부와 출력부만 있었는데, 여기에서 비로소 입력부가 생기는 것입니다.


...중략 (심화반 이상만 볼 수 있습니다.)...


기간 입력이 구현된 전체 스크립트 입니다.

저장하고 적용해보면


2a950dc9cdf571246b5c6edbd50bf484_1589103140.png
결과는 달라지지 않았지만, 전략 속성에 들어가보면 위와 같이 기간값을 입력받을 수 있는 곳이 생긴 것을 볼 수 있습니다.


S1에서 며칠 고점 돌파할때 매수할것인지, 며칠 저점 돌파할때 청산할것인지,

S2에서 며칠 고점 돌파할때 매수할것인지, 며칠 저점 돌파할때 청산할것인지를 직접 설정해볼 수 있습니다.


책에서는 기본 기간값을 가지고 다양한 자산군에 투자하여 크게 잃는 경우도 있었고, 크게 얻는 경우도 있었습니다.

이처럼 모든 자산군에서 터틀 트레이딩의 기본 기간값이 가장 효율적인지는 직접 해보지 않고는 알 수 없을 겁니다.



[기간 바꿔보기]


터틀 트레이딩의 기본 기간값인 20, 10, 55, 20을 주단위로 환산하여 비트코인에 적용해봤습니다.

전략 속성에서 기간값을 순서대로 28, 14, 77, 28 이렇게 입력하고 결과를 비교해보면 됩니다.


2a950dc9cdf571246b5c6edbd50bf484_1589103550_18.png
위의 결과가 20, 10, 55, 20일 돌파 기준입니다.

아래 결과는 28, 14, 77, 28일 돌파 기준입니다.

(비스스탬프 비트코인, 2011년 11월~2020년 5월)


수치상으로만 보면 아래의 결과가 좋습니다.

총 순익도 좋고, 승률은 비슷한데 수익 팩터(총 수익/총 손실)는 2배 가량됩니다.

최대 손실폭도 더 작기 때문에 좋습니다.


거래시 평균 봉수를 보면 기본값이 38일, 수정한 값은 50일로 나오는데요.

비트코인을 좀 더 오래 갖고 있는 경우에 더 큰 수익을 낼 수 있었다는 것으로 해석됩니다.


과거의 결과는 이렇게 나왔고요.

20, 10, 55, 20일(주 5일 단위)을 쓸건지, 28, 14, 77, 28일(주 7일 단위)을 쓸건지는 여러분께서 판단해서 결정하시면 되겠습니다.

지금까지는 주 7일 단위가 좋은 성과는 냈지만, 앞으로는 주 5일 단위가 더 좋은 성과를 낼 수도 있는 것입니다.

아니면 다른 더 좋은 값을 찾아볼 수도 있겠죠. 하지만 가장 좋은 수익을 내는 기간을 찾았다고 해서 앞으로의 수익을 보장하는 것은 아닙니다.

비트코인의 움직임의 양상이 앞으로는 과거와 달라질 수 있기 때문이죠.


이렇게도 생각해 볼 수 있습니다.

2011년은 비트코인 초창기이고, 참여하는 사람이 별로 없어서 가격을 결정하는 요인이 다양하지 못했다.

지금은 비트코인의 가격을 결정하는 요인들이 복잡해짐에 따라 초창기 백테스트 결과는 신뢰도가 떨어질 것이다.

최근으로 올 수록 백테스트 결과의 신뢰도가 높아졌다고 볼 수 있다.

그렇다면 최근 5년간의 결과를 비교해서 더 좋은 값을 선택하는 것이 더 효율적이라고 판단된다.

결과적으로 아닐 수도 있겠습니다만, 꽤나 합리적인 추측이라고 저는 생각합니다.


그러면 최근 5년간의 결과만 볼 수 있도록 백테스트 기간을 설정하는 기능이 필요합니다.

이것도 스크립트로 구현해야하는데, 다음 시간에 같이 알아보겠습니다.



[추가 - 코드를 효율적으로]


...중략 (심화반 이상만 볼 수 있습니다.)...


S1, S2의 매수 주문을 보면 매수 조건에 해당하는 when 인자의 길이가 긴것을 볼 수 있습니다.

판단 기준이 되는 부분이 3부분이라 길어질 수 밖에 없죠.

물론, 이대로 사용해도 상관없지만, when 조건부를 변수 하나로 묶어 관리하면 좀더 효율적으로 관리할 수 있습니다.

보기에도 좋고요.


위의 코드를 아래처럼 바꾸는 것입니다.


...중략 (심화반 이상만 볼 수 있습니다.)...


매수 조건을 s1_long_condition과 s2_long_condition 변수로 따로 뺐고, when 인자에 이를 대입했습니다.

더 추가할 매수 조건이 생기면 strategy.entry 함수는 건드릴 필요가 없습니다.

대신 s1_long_condition, s2_long_condition 변수뒤에 조건을 더 추가하면 됩니다.


...중략 (심화반 이상만 볼 수 있습니다.)...


매수 조건이 더 늘어나서 옆으로 길어진다면, 줄바꿈을 이용할 수도 있습니다.

의미있는 매수 조건절을 줄바꿈으로 구분해서 위와 같이 쓰면 됩니다.

줄바꿈 후에는 맨 앞의 한칸을 들여써야 바로 윗줄과 이어지는 코드라고 인식됩니다.


여기까지의 전체 스크립트는 아래와 같습니다.


...중략 (심화반 이상만 볼 수 있습니다.)...

관련자료

등록된 댓글이 없습니다.
전체 15건 / 1페이지

+ 최근글


+ 새댓글


통계