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

터틀 트레이딩 10 - 자동매매를 위한 지표 만들기

페이지 정보

본문

이전시간까지는 터틀 트레이딩을 백테스트하기 위한 전략(strategy 스트래티지)을 만들었습니다.

이렇게 구현한 전략을 백테스트한 결과 비트코인에 적용해볼만하다고 판단이 되었습니다.


일간 기준으로 전략을 실행한다면 수동으로도 가능합니다.

매일 아침 9시에 전략 차트를 보고 신호가 발생하면 매수하거나 청산하면 됩니다.


좀더 낮은 시간대에 적용한다면, 예를 들어 1시간 봉에서 적용한다면 1시간 마다 가격을 확인해야하니 수동으로는 거의 불가능합니다.

이럴때는 자동매매를 할 수 있다면 좋겠지요.


트레이딩뷰 얼러트와 연동되는 자동매매 프로그램들이 있으니 충분히 자동매매가 가능합니다.


자동매매하기 전에 필요한 것이 있는데, 얼러트를 발생시킬 수 있는 지표를 만들어야 한다는 것입니다.

지금까지 만든 것은 전략(strategy 스트래티지)이며, 자동매매를 위해서 지표(study 스터디)를 만들어야합니다.


전략 - 백테스트, 얼러트 발생 불가

지표 - 얼러트 발생 가능



[전략을 지표로 만들기]


전략을 지표로 만들거나, 지표를 전략으로 만들 수 있습니다.

두가지 경우중 어떤 것이라도 상관없습니다.

전략을 먼저 만들어서 백테스트 결과를 확인하고 지표를 만들어도 되고요.

다른 사람들이 만들 지표를 가지고 백테스트를 하기 위해 전략으로 만들 수도 있습니다.


우리는 터틀 트레이딩 전략을 먼저 만들었고, 그것이 자동매매로 활용할만하다고 판단했으므로 지표로 만드는 것입니다.


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


지금까지 만든 전략 소스입니다.

지표로 만들기 전에 살을 먼저 빼겠습니다.

전략에는 필요하지만, 지표에는 필요없는 것이 있습니다.


주문, 백테스트 기간, 레버리지 설정은 지표에 전혀 영향을 줄 수 없습니다.

이런것들이 있으면 에러가 발생하므로 빼야합니다.


그리고, 전략 선언부를 지표 선언부로 바꿔야합니다.


strategy("Turtle trading [Backtest]", "TT [B]", true,
 initial_capital=1000000, default_qty_value=50, pyramiding=2, default_qty_type=strategy.percent_of_equity,
 commission_value=0.075, commission_type=strategy.commission.percent, slippage=3)

study("Turtle trading [Alert]", "TT [A]", true)


위의 전략 선언을 아래의 지표 선언으로 바꿉니다.


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


살을빼면 이렇게 됩니다.

차트에 넣어보면,


5a9896b9ca3765ad558ef276a3916eb1_1592409527_7.png
 

전략때 봤던 모습과 같지만, 전략의 매매 주문 화살표는 나오지 않습니다.

지표이기 때문에 당연한것입니다.



[매매 설계]


터틀 트레이딩은 S1, S2 이렇게 신호가 2개 발생하며, 진입 및 청산과 공매도까지 포함하면 8개의 신호입니다.

그 신호들이 나오는 조건이 서로 다르기 때문에 고려해야할 부분이 많습니다.


신규 진입, 추가 진입, 중간 청산, 완전 청산의 경우가 있고, 포지션 방향의 전환 등이 있지요.

트레이딩뷰 얼러트와 TVExtBot의 연결을 이용한 자동매매에서는 거래소에 얼마의 자금이 있는지 알아낼 수 없으므로 전액대비 비율 주문을 통해 터틀트레이딩을 운영해야합니다.


예를 들어, S1 매수일때 전액대비 50%를 매수합니다.

S1 매수 상태에서 S2 매수가 일어나면 전액대비 50%를 추가매수할 수 있지요.

그러면 현재 모든 자금이 매수에 들어가 있게 됩니다.

이 상태에서 S1 청산이 일어나면, 전액대비 50%를 매도하면 됩니다.

물론, S1때 들어간 수량만큼 매도할 수 있으면 좋겠지만, 수동으로 수량을 정해주지 않는 이상 불가능합니다.


전액 매수상태에서 S2 청산이 일어난 경우라면 가지고 있는 모든 포지션을 청산하면 됩니다.

S2가 기간이 길기 때문에 자동적으로 S1도 청산될 수 밖에 없는 상태가 됩니다.


공매도의 경우는 반대로 생각하시면 됩니다.


그러면, 각 시스템과 신호별로 포지션의 상태를 알아내기 위한 코드를 짜보겠습니다.


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


S1 매수 상태를 알아내기 위해 s1_long_condition 이라는 변수를 선언하고 0으로 초기화했습니다.(2번째 줄)

s1_long_highest가 고점과 같아지면, 20일 고점을 돌파한것이 되므로 S1은 매수되고, 매수상태는 1이 됩니다.(3번째 줄 앞부분)

그리고, s1_long_lowest가 10일 저점 돌파하게 되면 매수 청산되고, 매수상태는 0으로 됩니다.(3번째 줄 뒷부분)

이 상태를 plot을 통해 출력해봅니다.(6번째 줄)


e7acb4de824e1c9e62545fd181aeec0f_1593860950_35.png 

녹색선이 1과 0을 왔다갔다하는 결과가 나옵니다.

S1 매수 포지션에 있는 상태라면 1, 반대라면 0이 표시된것입니다.

따라서, 이 포지션 그래프가 0에서 1로 가는 경우에서 매수 신호, 0에서 1로 가는 경우에 매수 청산 신호를 발생시키면 되는 것입니다.

비교를 위해 앞서 만들었던 전략과 겹쳐보았습니다.

하늘색의 매수 신호가 나오는 지점 및 매수 청산되는 지점과 녹색 그래프가 올라가고 내려오는 지점을 비교해보세요.


위 결과에 대한 전체 스크립트 입니다.


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


나머지 시스템과 신호도 같은 방법으로 구현하면 아래와 같습니다.


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


e7acb4de824e1c9e62545fd181aeec0f_1593861263.png
이렇게 나머지 3개의 매매에 대해서도 결과가 나옵니다.


여기까지의 전체 스크립트입니다.

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



[신호 출력]


포지션의 상태를 구한것을 토대로 매매 신호를 만들어보겠습니다.

포지션의 상태가 0에서 1로 바뀌는 순간이 매매, 1에서 0으로 바뀌는 순간이 청산이 됩니다.

S1 매수와 청산의 경우를 스크립트로 구현하면 아래와 같습니다.


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


현재 상태(s1_long_condition)와 직전 상태(s1_long_condition[1])를 판단하여 sig_s1_long(매수)와 sig_s1_long_exit(청산)를 발생시킵니다.

이 변수들은 true, false 값을 갖는 bool 변수가 됩니다.

그리고, 이 변수를 눈에 보이도록 출력합니다.


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


여기까지의 결과를 보면 아래와 같습니다.


e7acb4de824e1c9e62545fd181aeec0f_1593868298_86.png
매수는 녹색 화살표, 청산은 보라색 화살표로 나타냈습니다.

전략 신호와 비교해보면 지표의 신호는 봉 1개만큼 먼저 나오는 것을 볼 수 있는데, 전략의 신호는 봉 확정 후 다음 봉 처음에 표시되므로 맞는 결과가 나온것입니다.

따라서 지표의 신호로 매매하기 위해서는 얼러트 옵션에서 봉 닫힐때 한번을 선택해야합니다.


나머지 신호들도 같은 방법으로 구현하면 아래와 같습니다.


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


e7acb4de824e1c9e62545fd181aeec0f_1593868556_99.png
지표의 화살표가 작아져서 잘 보이지 않지만, 전략의 화살표 하나 뒤에 정상적으로 나타났습니다.

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


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



[전략, 지표 신호 일치]


이 부분은 굳이 필요없지만, 전략과 지표의 신호를 일치시켜 보기 좋게 하기 위한 방법입니다.

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


이런 결과가 나옵니다.


e7acb4de824e1c9e62545fd181aeec0f_1593870925_44.png 

관련자료

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

+ 최근글


+ 새댓글


통계