오늘은 트레이딩뷰 파인스크립트 전략에 따라 다른 시그널들을 파이썬에 보내고 그에 따른 자동매매를 진행해보았다. 그리고 API key 유출방지하기 위한 방법도 고안해보았다.

 

 

< 지난 포스팅 >

 

https://jayindustry.tistory.com/77

 

#11 [바이낸스선물] 트레이딩뷰 백테스트 및 시그널 연동

오늘은 트레이딩뷰에서 내가 만든 지표로 백테스트를 진행하고 승률을 확인 후, 롱/숏 시그널을 파이썬으로 보내서 자동 매매를 해보는 파이프라인을 구축해보도록하겠다. 지난 단계에서는 파

jayindustry.tistory.com

 

 

 

 

 

[ 개요 ]

 

오늘은 지표조건에 맞게 트레이딩뷰에서 시그널을 보내는 기능을 만들고, 그 시그널을 가지고 전략매매를 진행해보았다. 

추가로 깃허브에 올리기 위해 API key를 불러오는 방식으로 수정했다.

 

1. 트레이딩뷰에서 조건에 따른 시그널보내는 기능구현

2. 받아온 시그널로 전략매매 구현

3. API key 유출방지

 

 

 

 

[ 내용 ]

 

1. 트레이딩뷰에서 조건에 따른 시그널보내는 기능구현

 

 

롱/숏/롱종료/숏종료 조건들을 트레이딩뷰에서 파인스크립트로 이미 구현하였다. (포스팅참고)

그에 따른 알람을 보내는 기능을 구현하고자 한다.

 

빠른 테스트를 위해 1분봉으로 계속 롱,롱종료 알람을 울리게하는 테스트코드를 구현해보았다.

 

 

a비트코인 1분봉의 종가가 36000~37000 사이에잇으면 롱진입,

진입가 대비 1usdt의 가격변동이 있으면 종료.

(나중에 내 실전 전략을 넣으려면 저 변수의 조건들만 바꿔주면 된다.)

 

 

이렇게하면 1분마다 롱진입,종료 알람이 울리게 된다.

해당 조건을 변수에 넣고, 백테스트를 위한 strategy메서드를 이용 후, alert로 알람을 서버로 보낸다.

 

 

 

 

이렇게 알람이 마구마구 서버스크립트로 보내지고 들어온다.

아래는 서버스크립트 터미널에서의 출력결과물이다.

 

 

 

 

2. 받아온 시그널로 전략매매 구현

 

이제 받아온 시그널메시지를 분별하여 롱/숏/롱종료/숏종료 코드를 구현해 보겠다.

 

서버스크립트에서 실행스크립트로 메시지를 던지고,

실행스크립트에서 전략스크립트를 모듈화하여 그 메시지를 던져주는 방식이다.

 

 

고로, 전략스크립트에서 해당 코드를 짠다.

먼저 시그널 단어들을 리스트에 저장한 후, 해당 시그널이 하나라도 없으면 No Signal...문구를 출력한다.

all()함수는 해당 조건이 모두 성립할 때 true를 반환하는 함수이다.

 

 

 

 

롱 진입 코드

 

Long메시지를 받았을 때 매매 및 스탑로스/수익종료 등을 처리하는 코드이다.

 

 

 

amt(포지션사이즈)가 0이면 아직 포지션진입 전이니, 기존의 모든 미체결주문들을 취소한다.

그리고 메시지가 Long이면 최신현재가를 호출 후, 지정가로 바로 진입한다.

 

시장가가 아니라 지정가(limit)방식이라 비트코인이 한방향으로 급하게 달리고있으면 포지션이 안잡히는 경우가 종종생긴다.

그래서 3초라는 텀을 두고 스탑로스와 테이크프로핏 설정을 해놓는다.

 

 

미체결 주문을 틈틈히 취소하는 이유는 다음과 같다.

 

5분봉 기준으로 매매한다면 시그널이 최소 5분에 한번씩 들어온다.

매매스크립트를 반복문으로 1~2분에 한번씩 스크립트를 실행한다.

 

그럼 지정가라서 혹여나 진입이 살짝 늦게되어 스탑로스나 테이크프로핏이 안걸린 경우,

다음 반복문 실행 때, 틈틈히 이전 미체결 주문을 취소 후 다시 설정해줌으로써 이러한 경우를 방지할 수 있다.

 

 

 

롱 종료 코드

 

Long Close 메시지를 받았을 때 포지션 종료를 처리하는 코드이다.

 

 

만약 amt(포지션사이즈)가 > 0 이라면 포지션이 롱으로 진입되어있는 상태이기 때문에 해당 조건을 if else로 만들어준다.

그리고 혹시나 현재 Long포지션인데 손절/익절 포인트가 안잡혀있다면 잡아준다.

 

만약 롱포지션상태에서 Long Close메시지를 받았다면 종료해준다.

종료 방법은 해당 amount만큼 반대포지션*(여기선 숏)으로 진입하는 방식이기 때문에, 혹여나 오버하게 반대포지션으로 진입되었을 경우를 대비하여 손절/익절 함수를 넣어두었다.

 

만약 롱상태에서 Close메시지가 안들어왔으면 그냥 Long Stay문구를 출력한다.

 

 

 

 

실행 스크립트

 

먼저 서버스크립트에서 메시지를 가져와 변수에 저장한다.

 

 

 

api key, leverage등의 선물에 필요한 옵션들을 지정하고 모듈화로 위에서 짠 전략스크립트를 실행한다.

이 때, 위에서 받은 웹훅메시지 Tradingview_message를 함수에 전달한다.

 

 

 

 

[ 결과 ]

 

롱 진입

 

이 때, 위에서 설명한것처럼 지정가방식이라 바로 포지션진입이 안되어,

스탑로스는 걸리지않고 익절종료만 걸린모습이다.

 

하지만 반복문으로 1분뒤에 재실행되었을 때,

 

현재 포지션정보와 내 수익상태 등을 보여주고, 스탑로스가 안걸려있음을 감지하고 정상적으로 스탑로스를 설정하였다.

그리고 메시지가 Long Close가 a아니므로 기존의 Long position Stay를 출력한다.

 

 

이렇게 지정가라 바로 진입이 안되어도 반복문으로 자동재실행함으로서 모두 설정하게끔 한다.

 

 

결과는 대성공이다.

롱포,5배,격리모드,지정가주문,스탑로스,테이크프로핏 모두 잘 설정되어있다.

 

 

 

 

롱포지션 종료

 

이번엔 이 롱포지션을 종료하는 메시지가 전달되었을때를 봐보자.

 

 

트레이딩뷰 메시지가 Long Close임을 확인하고

롱 포지션을 종료했음을 확인할 수 있다.

 

 

숏 포지션은 이 과정과 동일하므로 생략하겠다!

 

 

 

 

 

3. API key 유출방지

 

스크립트 내에 API access, secret key가 있어서 영 불편하였다.

보안위험이 크므로 이를 어떻게 할지 고민하였다.

서칭을 해보니 암호화 및 복호화 방법이 있다고 한다. 이는 알고리즘으로 하는 기법인데 생각보다 간단한 방법으로도 가능하다고 한다.

기존의 함수를 불러왔던 방식으로 모듈화로 변수key를 불러오는 방법도 있다.

 

모듈화로 불러오는 방식이 좀 더 편하지만 색다르게 csv를 만들어서 불러오는 방식으로 해보았다.

csv파일에 필요한 정보인 access, secret, URL정보를 담고 이를 불러오는 방식이다.

 

 

먼저 csv파일에 정보를 저장한다.

 

지표함수 등의 다양한 함수를 모아놓은 bot_module파일에 다음과같은 함수를 추가하고 

 

방금 만든 csv파일의 2,4,6번째줄만 불러온다.

그 행의 인덱스를 key로 하고 현재 행의 0번째 열의값을 value로 저장한다.

 

아래처럼 가져다가 사용하면 된다.

 

 

 

 

이 다음엔 이제 내 전략을 도입하여 몇시간동안 실제 자동매매를 진행해보려고한다.

과연 수익이 얼마나 나올지 기대가 된다.

 

 

 

+ Recent posts