bitflyer의 전체 틱 데이터 얻기

소개



오랜만에 bitflyer lightning에 로그인했습니다.
cryptocurrencies는 큰 모습을 보인 그 '2017년' 이후 계속 유지하고 있지만 거래는 하고 있지 않다.
lightnig의 최종 거래액의 눈부신 변화를 보고, "가능성"을 느끼고, 오랜만에 트레이드를 하고 싶어졌다.


재개



이전에는 재량거래를 하고 있었지만, 2번이라고 하려고는 생각하지 않는다. 그 정신적인 부하에 견딜 수 있는 멘탈이 없기 때문이다.
따라서 자동 판매 시스템을 구축해야합니다.
따라서 먼저 필요한 것은 트레이드 로직의 판단 기준이되는 데이터입니다.

API



API란 간단히 말하면 URL을 두드리면 특정 데이터(최신 BTC의 값 등)에 액세스할 수 있는 특정 명령(BTC 구매 주문 등)을 실행할 수 있는 인터페이스이다. 대부분의 가상 통화 거래소에는 이 API가 준비되어 있다.
당연히 bitflyer lightning에도 준비되어 있다.
htps : // ぃght 마늘 g. tfぇr. 이 m/도 cs?ぁ g = 그럼

문서에 따르면 "FX_BTC_JPY"의 최신 값을 얻으려면 다음을 수행하는 것입니다.
htps : // 아피. tfぇr. 이 m//v1/굿 c r? p 로즈 ct_ 여기 = FX_BTC_JPY
※ 상기를 클릭하면 최신 "FX_BTC_JPY"의 값을 얻을 수 있습니다.

실행 제한 벽



mac에서 조속히 이하를 실행했다.
while true; do curl https://api.bitflyer.com//v1/getticker?product_code=FX_BTC_JPY | jq . ; done

다음과 같이 JSON 형식으로 값이 반환된다.
{
  "product_code": "FX_BTC_JPY",
  "timestamp": "2020-01-09T11:40:18.027",
  "tick_id": 340221409,
  "best_bid": 873088,
  "best_ask": 873160,
  "best_bid_size": 0.01325506,
  "best_ask_size": 0.026,
  "total_bid_depth": 7516.42989333,
  "total_ask_depth": 6798.27220924,
  "ltp": 873160,
  "volume": 196692.50042163,
  "volume_by_product": 196682.81646233
}

그러나 잠시 후 오류
{
  "status": -1,
  "error_message": "Over API limit per period, per IP address",
  "data": null
}

→문서를 읽으면 동일 IP로부터의 API 호출은 1분간 xxx까지라고 하는 식으로 제한이 있다. 이 때문이다. 1회/s라면 에러가 되지 않았다.

실행 제한의 벽을 넘는 방법 (망상)



AWS를 이용해 퍼블릭 IP를 바꾸면서, 복수의 Lambda로부터 API를 실행해, 결과를 SQS등으로 결합해, DynamoDB에 격납한다. 저장할 때 시간별로 정렬합니다. 구축하기에는 수고와 비용이 든다.
→아래에 있는 것처럼 전혀 잘못이라고 알 수 있다.

실행 제한의 벽을 넘는 방법(채용안)



연속적인 틱 데이터를 취득하려고 고생했지만, 문서를 보면 약정 이력을 취득하는 API가 있다. 약정 이력은 틱 데이터를 포함하지 않는 집합이다. 이것을 사용하면 해결한다 !!!
조속히 실행해 보았다.
curl https://api.bitflyer.com/v1/getexecutionsproduct_code=FX_BTC_JPY&count=10

결과
[{"id":1510454721,"side":"BUY","price":904727.0,"size":0.02,"exec_date":"2020-01-11T00:29:56.813","buy_child_order_acceptance_id":"JRF20200111-002956-217585","sell_child_order_acceptance_id":"JRF20200111-002955-073037"},{"id":1510454720,"side":"BUY","price":904727.0,"size":0.01,"exec_date":"2020-01-11T00:29:56.797","buy_child_order_acceptance_id":"JRF20200111-002956-109098","sell_child_order_acceptance_id":"JRF20200111-002955-073037"},{"id":1510454719,"side":"BUY","price":904727.0,"size":0.01,"exec_date":"2020-01-11T00:29:56.797","buy_child_order_acceptance_id":"JRF20200111-002956-995485","sell_child_order_acceptance_id":"JRF20200111-002955-073037"},{"id":1510454718,"side":"BUY","price":904708.0,"size":0.62,"exec_date":"2020-01-11T00:29:56.797","buy_child_order_acceptance_id":"JRF20200111-002956-109097","sell_child_order_acceptance_id":"JRF20200111-002954-142777"},{"id":1510454717,"side":"BUY","price":904707.0,"size":0.383,"exec_date":"2020-01-11T00:29:56.797","buy_child_order_acceptance_id":"JRF20200111-002956-109097","sell_child_order_acceptance_id":"JRF20200111-002955-217572"},{"id":1510454716,"side":"BUY","price":904686.0,"size":0.091,"exec_date":"2020-01-11T00:29:56.797","buy_child_order_acceptance_id":"JRF20200111-002956-109097","sell_child_order_acceptance_id":"JRF20200111-002956-073060"},{"id":1510454715,"side":"BUY","price":904686.0,"size":0.01,"exec_date":"2020-01-11T00:29:56.783","buy_child_order_acceptance_id":"JRF20200111-002956-458844","sell_child_order_acceptance_id":"JRF20200111-002956-073060"},{"id":1510454714,"side":"BUY","price":904686.0,"size":0.01,"exec_date":"2020-01-11T00:29:56.607","buy_child_order_acceptance_id":"JRF20200111-002956-152005","sell_child_order_acceptance_id":"JRF20200111-002956-073060"},{"id":1510454713,"side":"BUY","price":904707.0,"size":0.01,"exec_date":"2020-01-11T00:29:56.577","buy_child_order_acceptance_id":"JRF20200111-002956-458842","sell_child_order_acceptance_id":"JRF20200111-002955-217572"},{"id":1510454712,"side":"BUY","price":904707.0,"size":0.04,"exec_date":"2020-01-11T00:29:56.547","buy_child_order_acceptance_id":"JRF20200111-002956-217578","sell_child_order_acceptance_id":"JRF20200111-002955-217572"}]

→count로 건수를 지정할 수 있다. 이번에는 10건으로 했다. 최대 500건 같다.

파이썬으로 시각화



plottest.ipynb

import requests
import json 
import matplotlib.pyplot as plt
%matplotlib inline

response = requests.get("https://api.bitflyer.com/v1/getexecutions?product_code=FX_BTC_JPY&count=100")
res_json = json.loads(response.text)

res_price_list = []
for res in res_json :
    res_price_list.append(res['price'])

plt.plot(res_price_list)

→curl을 사용하는 대신 request를 사용한다.
→ request의 응답을 .text로 텍스트 만 추출하고 json.load에서 list 형식으로 변환합니다.
→ 취득하는 약정 회수는 100회로 했다.

결과




당신의 환경(jupyter notebook)에서도 실행해 주었으면 한다.
실행할 때마다 표시되는 그래프는 완전히 바뀔 것이다. 이것은 bitflyer lightning에서의 거래가 활발한 덕분이다.
여러 번 생성 된 많은 그래프에도 공통된 부분이 있습니다.
그것은 과거 100회 정도의 약정 이력 중에서는 비교적 현저한 트렌드는 발생하지 않고 오히려 반복 운동과 같은 움직임을 하고 있다는 것이다.
이것을 트레이드 로직에 짜넣을 수 없을까 생각한다.

좋은 웹페이지 즐겨찾기