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.
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
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.
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.
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.
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.
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