>  기사  >  백엔드 개발  >  Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

PHPz
PHPz앞으로
2023-04-12 22:16:192073검색

Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

일부 전략에는 특정 수준의 기술 데이터가 필요한 반면 다른 전략에는 한 시간만 소요될 수 있다는 점을 감안할 때 프로세스가 항상 간단하지는 않으며 인프라, 가용성 및 연결성과 같은 요소는 데이터에 따라 달라질 수 있습니다. 종류는 매우 다양합니다.

그런데 왜 이 글은 "거래" 데이터를 얻는 것에 대해서만 다루고 있으며, 왜 우리는 바이낸스 API를 사용하고 있나요? 내 기사의 내용에 대해 몇 가지 질문이 있을 수 있습니다.

데이터 빈도 및 밸런싱

거래 데이터 엔드포인트는 주로 99.99%의 거래소에서 사용할 수 있다고 말하고 싶습니다. 이는 세분화되어 있으며, 고주파 거래(HFT) 전략 백테스팅을 위한 충분한 세부 정보(일부 매우 구체적인 경우)를 제공하며 OHLC 캔들(원하는 경우 1S ~ 24H 이상) 기반으로 사용할 수 있습니다.

거래 데이터는 보편적이며 다양한 빈도의 전략을 사용하여 수많은 실험을 허용합니다.

바이낸스를 선택하는 이유는 무엇인가요?

그 이유는 제가 거래량 때문에 뒤로 물러나는 경향이 있는 거래소 중 하나이기 때문입니다.

우리가 할 인코딩

한 쌍의 기호, 시작 날짜, 종료 날짜를 명령줄 인수로 받는 Python 스크립트를 만들 예정입니다. 모든 트랜잭션이 포함된 CSV 파일을 디스크에 출력합니다. 이 프로세스는 다음 단계를 통해 자세히 설명할 수 있습니다.

1. 기호, Starting_date 및ending_date 인수를 구문 분석합니다.

2. 시작일에 발생한 첫 번째 거래를 가져와 첫 번째 거래 trade_id를 가져옵니다.

3.ending_date에 도달할 때까지 요청당 1000개의 거래를 얻기 위해 루프를 실행합니다(Binance API 제한).

4. 마지막으로 데이터를 디스크에 저장합니다. 예를 들어 CSV로 저장했지만 다른 옵션이 있으므로 반드시 CSV로 저장할 필요는 없습니다.

5. 팬더, 요청, 시간, sys 및 날짜/시간을 사용합니다. 코드 조각에서는 설명에 값을 추가하지 않으므로 오류 유효성 검사가 표시되지 않습니다.

코딩 시간

스크립트는 다음 매개변수를 사용합니다:

1. 기호: 바이낸스가 정의한 거래 쌍의 기호입니다. 여기에서 쿼리하거나 바이낸스 웹 애플리케이션의 URL에서 복사할 수 있습니다(_ 문자 제외).

Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

-starting_date 및 end_date: 설명이 필요합니다. 예상되는 형식은 mm/dd/yyyy 또는 Python 속어를 사용하는 %m/%d/%Y입니다.

매개변수를 얻으려면 내장 함수 sys를 사용하고(여기서는 별 내용 없음) 날짜를 구문 분석하기 위해 datetime 라이브러리를 사용할 것입니다.

Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

end_date 시간 부분이 항상 23:59:59.999가 되도록 하루를 더하고 1마이크로초를 빼서 같은 날 간격을 얻는 것이 더 실용적입니다.

거래 가져오기

Binance의 API와 aggTrades 엔드포인트를 사용하면 시작 및 종료 매개변수를 사용하는 경우 한 번의 요청으로 최대 1000개의 거래를 얻을 수 있으며 그 간격은 최대 1시간입니다.

간격 가져오기를 사용하여 몇 번 실패한 후(어느 시점에서 유동성이 급락하여 일부 귀중한 거래를 잃을 수 있음) from_id 전략을 시도하기로 결정했습니다.

압축된 거래를 반환하므로 aggTrades가 선택한 엔드포인트가 됩니다. 이렇게 하면 우리는 귀중한 정보를 잃지 않을 것입니다.

전체 거래를 압축하여 받으세요. 동일한 주문, 동일한 가격으로 동시에 실행된 거래는 수량을 합산합니다.

from_id 전략은 다음과 같습니다.

날짜 간격을 끝점까지 전송하여 첫 번째 트랜잭션의 시작 날짜를 가져오고 싶습니다. 그 후에는 처음 가져온 트랜잭션 ID부터 시작하여 1000개의 트랜잭션을 얻습니다. 그런 다음 end_date 이후에 마지막 거래가 발생했는지 확인합니다.

그렇다면 모든 기간을 반복했으며 결과를 파일에 저장할 수 있습니다. 그렇지 않으면 from_id 변수를 업데이트하여 마지막 트랜잭션 ID를 얻고 루프를 다시 시작합니다.

첫 번째 거래 번호 가져오기

Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

먼저 new_end_date를 생성합니다. 이는 startTime 및 endTime 매개변수를 전달하여 aggTrades를 사용하기 때문입니다.

이제 해당 기간의 첫 번째 거래 번호만 알면 되므로 60초를 추가하겠습니다. 유동성이 낮은 통화쌍의 경우 요청 첫날에 거래가 발생한다는 보장이 없으므로 이 매개변수를 변경할 수 있습니다.

그런 다음 도우미 함수를 사용하여 날짜를 구문 분석하고 Calendar.timegm 함수를 사용하여 날짜를 Unix 밀리초 표현으로 변환합니다. timegm 함수는 날짜를 UTC로 유지하므로 선호되는 함수입니다.

Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

요청에 대한 응답은 다음 형식으로 날짜별로 정렬된 거래 개체 목록입니다.

Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

첫 번째 거래 ID가 필요하므로 해당 응답을 반환합니다.[0][" 가치.

메인 루프

이제 첫 번째 트랜잭션 ID가 있으므로 end_date에 도달할 때까지 한 번에 1000개의 트랜잭션을 가져올 수 있습니다. 다음 코드는 메인 루프에서 호출됩니다. startDate 및 endDate 매개변수를 삭제하고 from_id 매개변수를 사용하여 요청을 실행합니다.

Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

이제 요청을 실행하고 DataFrame을 생성하는 메인 루프입니다.

Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

current_time에 to_date보다 이후에 가장 최근에 가져온 거래 날짜가 포함되어 있는지 확인합니다. 그렇다면 다음과 같이 합니다.

  • from_id 매개변수를 사용하여 거래를 가져옵니다.
  • from_id 및 current_time 매개변수를 최신 트랜잭션
  • 멋진 디버그 메시지 인쇄
  • pd.concat 이러한 트랜잭션은 이전 트랜잭션 DataFrame과 비교됩니다.
  • Binance가 429 HTTP 응답을 제공하지 않도록 sleep을 사용하세요

정리하고 저장합니다

DataFrame을 조립한 후 간단한 데이터 정리를 수행해야 합니다. to_date 이후 발생한 트랜잭션과 중복된 트림이 있는 트랜잭션을 제거하겠습니다. (이 문제는 1000개 트랜잭션의 대부분을 가져오고 있으므로 일부 트랜잭션은 목표 종료 날짜 이후에 실행될 것으로 예상됩니다.)

트림 기능을 캡슐화할 수 있습니다:

Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

데이터 정리를 수행합니다:

Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

이제 to_csv 메서드를 사용하여 파일에 저장할 수 있습니다.

Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

또한 Arctic과 같은 다른 데이터 저장 메커니즘을 사용합니다.

마지막으로: 데이터 확인

거래 전략을 사용할 때 데이터를 신뢰하는 것이 중요합니다. 다음 유효성 검사를 적용하여 가져온 트랜잭션 데이터로 이 작업을 쉽게 수행할 수 있습니다.

Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.

코드 조각에서 DataFrame을 NumPy 배열로 변환하고 행별로 반복하여 트랜잭션 ID가 다음과 같은지 확인합니다. 1씩 증가합니다.

바이낸스 거래 ID는 각 거래 기호마다 증분 번호가 매겨져 생성되므로 데이터가 올바른지 쉽게 확인할 수 있습니다.

PS: 성공적인 거래 전략을 세우는 첫 번째 단계는 올바른 데이터를 확보하는 것입니다.

위 내용은 Python을 사용하여 바이낸스의 과거 거래를 쉽게 얻을 수 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제