프로젝트/[퀀트]자동트레이딩

#10 [바이낸스 선물] 모듈화, 파일관리

SeokjunMan 2023. 11. 19. 21:13

 

오늘은 모듈화와 코드파일 관리로 트레이딩봇 사용시, 더 체계적으로 코드와 데이터를 관리할 수 있게 만들어보았다.  그리고 웹훅메시지를 모듈을 이용하여 가져왔다.

 

저번 단계까지는 라우터설정 - 포트포워딩과 서버,웹훅문제해결을 하였다.

그래서 트레이딩뷰 사이트에서 보내는 sell/buy시그널을 내 파이썬스크립트로 전송받아 변수로 사용할 수 있게 하였다.

 

다만, 지난 단계까지는 메시지를 담은 변수를 다른파일에서 사용하는 방법을 구상하는 데에 미쳣다.

 

 

 

 

 

< 지난 포스팅 >

https://jayindustry.tistory.com/73

 

#9 [바이낸스 선물]Flask서버,웹훅 문제해결

오늘은 지난시간에 이어 트레이딩뷰에서 웹훅을 내 웹서버 url을 통하여 post 요청하여 트뷰 알람을 내 파이썬으로 가져와보도록 하겠다. < 지난 포스팅 > https://jayindustry.tistory.com/71 #8 [바이낸스

jayindustry.tistory.com

 

 

 

[ 개요 ]

 

서버코드 / 전략실행 / 지표 및 함수들 모음 / 전략클래스 모음

이렇게 4파트로 나눠서 모듈화를 진행하였다.

 

 

1. 트레이딩뷰 웹훅메시지, 지표함수 모듈화

2. 전략매매 클래스 모듈화

3. 사용하기

 

 

 

 

 

[ 내용 ]

 

1. 트레이딩뷰 웹훅메시지, 지표함수 모듈화

 

서버코드에서 메시지를 받아, 변수에 저장하였는데 이 변수를 어떻게 다른 파일에서 사용할까 고민하였다.

그래서 request로 endpoint를 만들어서 가져올까 고민하였는데 모듈화를 하면 편하겠다고 생각했다.

 

 

 

 

파이프라인

 

서버를 열고 -> 트레이딩뷰 웹훅을 보낸다

-> 서버코드에서 받아 -> 모듈.py의 변수에 보내어 업데이트시킨다.

-> 다시 모듈파일의 변수를 서버스크립트로 가져와 프린트해본다.

-> 그럼 모듈.py의 변수를 다른 스크립트에서도 사용할 수 있겠지?

 

 

 

 

트레이딩뷰 웹훅메시지와 지표함수들을 모은 모듈파일을 만들었다.

 

 

update_data, get_message는 웹훅메시지를 받을때마다 업데이트하고 그 메시지변수를 호출하기위해 사용한다.

 

 

 

서버 파일에서 import한다

 

 

서버코드에서 웹훅메시지를 받으면 

 

 

모듈파일에서 만든 update_data함수를 통해 받은 웹훅메시지를 모듈파일의 변수에 저장한다.

그리고 get_message()함수로 해당 변수에 잘 저장되었는지 호출한다.

 

결과는 잘 호출된다!

 

 

 

 

 

 

2. 전략매매 클래스 모듈화

 

이전에 한 스크립트에서 모든 지표와 전략클래스를 몰아서 사용했다면,  더 체계적인 관리를 위해

실행/지표 및 데이터/전략클래스/서버코드 이렇게 4파트로 파일을 나누어 모듈화를 진행하였다.

 

 

위에서 만든 bot_module를 임포트하고 해당 지표들을 모두 변수로 가져온 후,

이전 포스팅과 동일한 전략클래쓰를 아래에 붙였다.

 

 

 

 

3. 사용하기

 

총 4개의 파일이 만들어졌다.

webhook.log는 이전에 들어온 웹훅메시지 히스토리들을 보여준다.

 

 

 

 

 

원하는 레버, 코인심볼, 자산비중 등을 정하고 bot_setup에 클래스를 셋업 후,

"전략 1"을 실행하였다.

 

TradingBot클래스에서 bot_module의 함수들을 모듈화하여 사용하고 있기 때문에, 모든 스크립트들이 상호작용하고 있다.

 

 

 

[ 결과 ]

 

 

결과는 성공적이다.

이제 전략, 함수, 지표, 서버 데이터 등을 더 쉽고 체계적으로 관리할 수 있다.

 

 

 

 

[ 피드백 ]

 

문제점이 없나 다양한 데이터들을 출력해본 결과, 한가지 문제점이 발생하였다.

이제 트레이딩뷰에서 주는 메시지에 따라 숏, 롱 진입을 해야하는데

 

위에서 모듈로 보낸 메시지가 모듈변수에 저장이 안되어있음을 확인할 수 있었다..!

 

분명 서버에서는 모듈파일에서 가져와 잘 출력되었는데 이유를 모르겠다.

서버파일에서는 바로 작동하였으나, 전략을 실행하는 파일에서는 None값이 떴다.

아무래도 서버에서 실행하였을 때 순간적으로 저장되고 다시 지워지는 구조인가보다.

 

어떻게하면 모듈파일의 변수에 지속적으로 저장되게 할까?

다른 방법을 모색해야하나?

 

다음단계에서 해결해보도록 하겠다.