이번포스팅에서는 트레이딩 자동매매봇 실전도입 시, 나타나는 에러현상들을 최종적으로 해결하였다.
지난 단계까지는 트레이딩뷰에서 내 전략에 대한 매수,매도 시그널을 웹훅을 통해 파이썬으로 보내어 매매를 해보았다.
< 지난 포스팅 >
https://jayindustry.tistory.com/78
#12 [바이낸스선물] 트레이딩뷰 시그널연동하여 매매하기, API key 보호
오늘은 트레이딩뷰 파인스크립트 전략에 따라 다른 시그널들을 파이썬에 보내고 그에 따른 자동매매를 진행해보았다. 그리고 API key 유출방지하기 위한 방법도 고안해보았다. < 지난 포스팅 > htt
jayindustry.tistory.com
다음단계로 서버코드와 실행코드를 반복문으로 켜놓고 자동으로 매매가 잘되는지,
수익은 얼마나 나는지 직접 실험해보았는데, 중간중간 계속 서버관련 에러가 발생하였다.
그래서 이번포스팅에서는 이러한 에러현상에 대한 원인파악과 문제해결을 하였다.
[ 개요 ]
1. 에러 원인파악
2. 파이프라인 수정
3. 코드수정
4. 결과
[ 본문 ]
기존의 파이프라인은 다음과 같다.
실행스크립트를 반복문으로 계속 실행하면, 지속적으로 서버스크립트로부터 웹훅(트레이딩뷰 롱,숏시그널)메시지를 받아와서 지표모듈과 전략모듈과 연결하여 매매를 진행하는 방식이었다.
그런데 서버스크립트로부터 메시지를 get하는 부분에서 한번씩 에러가 떴다.
에러문구
response = requests.get(url)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=10080): Max retries exceeded with url: //get-latest-data (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x124b6c730>: Failed to establish a new connection: [Errno 60] Operation timed out'))
대충 연결시간이 너무 지연되어 연결이 안된다는 뜻인데 원인은 다양하다.
원인파악
1. 다양한 이유로 인한 서버부하
2. 서버가 중단되거나 로컬네트워크 상태가 좋지 않을 때
3. 컴퓨터의 CPU, 메모리 상태 등의 문제
네트워크나 pc상태의 문제는 아니었고 서버부하의 문제인가 싶었다.
직접 수동으로 스크립트를 실행하면 잘 작동하는데 반복문으로 1분마다 자동실행하면 이렇게 에러가 뜨니 구조자체를 조금 바꿔야겠다고 생각했다.
2. 파이프라인 수정
서버로부터 데이터를 지속적으로 받아오지 못하니, 중간단계를 넣어야겠다고 생각했다.
-> 로컬상의 저장공간을 활용해보자.
< 기존의 파이프라인 >
트레이딩뷰 웹훅메시지 -> 서버스크립트 -> 실행스크립트의 request요청(Get)
< 새로운 파이프라인 >
트레이딩뷰 웹훅메시지 -> 서버스크립트 -> CSV파일에 한줄만 저장 -> 실행스크립트에서 CSV파일메시지 읽어오기
Csv에 웹훅메시지가 계속 쌓이면 공간을 너무 잡아먹으니, 서버스크립트에서 웹훅메시지가 들어올때마다 Csv를 초기화하고 새롭게 저장하는 방식을 택하였다. 이렇게 하여 새로운 메시지만, 총 1줄만 csv에 업데이트된다.
3. 코드 수정
Server 코드

먼저 csv파일에 웹훅메시지를 저장하도록 한다.
덮어쓰기: 'w' 모드로 파일을 열면, 해당 파일이 이미 존재하는 경우 기존 내용을 모두 지우고 새로운 내용을 작성한다.
파일이 존재하지 않는 경우 새 파일을 생성해준다.
그리고 csv를 지속적으로 비우기 위해 다음코드를 추가한다.
새로운 웹훅메시지가 들어올 때, 해당 Csv파일을 열었다 닫음으로서, 이전 파일을 초기화시킨다.

bot_module

그리고 다양한 함수들을 모아놓은 모듈파일에 새로운 함수를 추가한다.
csv파일을 읽고, 첫번째 행을 반환하는 코드이다
Running

마지막으로 실행하는 스크립트에서 위에서만든 함수를 실행한다.
실행 딜레이 때문에 5분봉 매매기준으로 반복문 time.sleep을 딱 1분(60)이 아닌 50정도로 맞춰주었다.
서버코드에서 받은메시지를 모듈로 보내고 모듈에서 다시 받아오게 되어잇는데 그럴 필요가 없어졋다.
이는 나중에 개선할 필요 있다고 생각되면 수정하자.
4. 결과
서버스크립트 터미널 결과

지속적으로 웹훅을 잘 받아오고 있다.
실행스크립트 결과

이번엔 실행스크립트 결과이다.
서버스크립트를 통해 자동으로 Long, longclose 포지션을 잘 잡아준다.
이제 오류도 해결되었겠다!
다음번엔 이 스크립트들을 통해 자동매매를 실전에 도입해보도록 하겠다.
'프로젝트 > [퀀트]자동트레이딩' 카테고리의 다른 글
| #14 [바이낸스 선물] 백테스팅 결과 및 새로운 전략 구상하기 (1) | 2023.12.01 |
|---|---|
| #12 [바이낸스선물] 트레이딩뷰 시그널연동하여 매매하기, API key 보호 (1) | 2023.11.22 |
| #11 [바이낸스선물] 트레이딩뷰 백테스트 및 시그널 연동 (2) | 2023.11.20 |
| #10 [바이낸스 선물] 모듈화, 파일관리 (1) | 2023.11.19 |
| #9 [바이낸스 선물]Flask서버,웹훅 문제해결 (2) | 2023.11.17 |