[PYTHON] Obtenez les données de graduation complètes pour bitflyer

introduction

Je me suis connecté à bitflyer lightning pour la première fois depuis longtemps. La monnaie virtuelle a été détenue depuis ce "2017" quand elle a montré une forte hausse, mais elle n'a pas été échangée. Voyant les changements rapides dans le montant de la transaction finale de lightnig, je me suis senti "potentiel" et j'ai voulu trader pour la première fois depuis longtemps. スクリーンショット 2020-01-11 8.49.19.png

Reprendre

J'avais l'habitude de faire du trading discrétionnaire, mais je ne pense pas que je le referai. C'est parce qu'ils n'ont pas la mentalité de résister à la charge mentale. Par conséquent, il est nécessaire de construire un système de trading automatique. Par conséquent, la première chose dont on a besoin, ce sont des données qui servent de critère pour la logique commerciale. API Pour faire simple, une API est une interface qui vous permet d'accéder à des données spécifiques (telles que la dernière valeur BTC) en cliquant sur une URL et d'exécuter des instructions spécifiques (telles qu'un ordre d'achat BTC). La plupart des échanges de devises virtuelles ont cette API. Bien sûr, il est également disponible en bitflyer lightning. https://lightning.bitflyer.com/docs?lang=ja

Selon la documentation, pour obtenir la dernière valeur de "FX_BTC_JPY", procédez comme suit: https://api.bitflyer.com//v1/getticker?product_code=FX_BTC_JPY

Mur de limite d'exécution

J'ai immédiatement exécuté ce qui suit à partir de mac.

while true; do curl https://api.bitflyer.com//v1/getticker?product_code=FX_BTC_JPY | jq . ; done

La valeur est renvoyée au format JSON comme indiqué ci-dessous.

{
  "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
}

Mais au bout d'un moment une erreur

{
  "status": -1,
  "error_message": "Over API limit per period, per IP address",
  "data": null
}

→ Lors de la lecture du document, les appels API depuis la même IP sont limités à xxx par minute. C'est pour cette raison. Aucune erreur ne s'est produite à 1 / s.

Comment surmonter la barrière des restrictions d'exécution (illusion)

Lors de la modification de l'adresse IP publique à l'aide d'AWS, exécutez l'API à partir de plusieurs Lambda, combinez les résultats avec SQS, etc., et stockez-la dans DynamoDB. Trier par heure lors du stockage. La construction prend du temps et coûte cher. → Vous pouvez voir qu'il est complètement erroné comme indiqué ci-dessous.

Comment surmonter la barrière des restrictions d'exécution (plan d'adoption)

J'ai eu du mal à essayer d'obtenir des données de ticks en continu, mais quand je regarde le document, il y a une API pour obtenir l'historique d'exécution. L'historique du contrat est un ensemble qui comprend toutes les données de graduation. Utilisez ceci pour le résoudre !!! J'ai essayé de l'exécuter immédiatement.

curl https://api.bitflyer.com/v1/getexecutionsproduct_code=FX_BTC_JPY&count=10

résultat

[{"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"}]

→ Vous pouvez spécifier le nombre de cas avec count. Cette fois, le nombre était de 10. Il semble qu'il y ait jusqu'à 500 cas.

Visualisation avec python

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)

→ Utilisez request au lieu de curl. → Extrayez uniquement le texte de la réponse à la requête avec .text et convertissez-le en type liste avec json.load. → Le nombre de contrats à acquérir est de 100.

résultat

output_7_1.png Veuillez l'essayer dans votre environnement (notebook jupyter). Le graphique que vous voyez devrait changer complètement à chaque fois que vous l'exécutez. Cela est dû au commerce actif de la foudre bitflyer. De nombreux graphiques générés plusieurs fois ont quelque chose en commun. C'est qu'une tendance relativement remarquable ne se produit pas dans les 100 dernières années de contrat, mais se comporte plutôt comme un mouvement répétitif. Je me demande si cela peut être intégré dans la logique commerciale.

Recommended Posts

Obtenez les données de graduation complètes pour bitflyer
Obtenez la liste des colonnes et la liste des données de CASTable
Obtenez la version GNOME
Obtenez des commentaires et des abonnés avec l'API de données YouTube
Obtenez des données compressées par Gzip en mémoire
Obtenir le type MIME
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Obtenir les données structurelles de CHEMBLID
Python --bitflyer Obtenir le solde des actifs
Obtenez des données Youtube avec python
Gzip compresser les données en streaming
Obtenez le nombre de chiffres
[Python] Récupérez le mois précédent
Maya | Obtenir le chemin de l'espace de travail
Python --bitflyer Obtenir le contenu du chat