이번포스팅에서는 트레이딩 자동매매봇 실전도입 시, 나타나는 에러현상들을 최종적으로 해결하였다.

 

 

 

지난 단계까지는 트레이딩뷰에서 내 전략에 대한 매수,매도 시그널을 웹훅을 통해 파이썬으로 보내어 매매를 해보았다.

 

 

< 지난 포스팅 >

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 포지션을 잘 잡아준다.

 

 

이제 오류도 해결되었겠다!

다음번엔 이 스크립트들을 통해 자동매매를 실전에 도입해보도록 하겠다.

+ Recent posts