[JAVA] J'ai créé un bot de transaction d'arbitrage de monnaie virtuelle et essayé de gagner de l'argent

introduction

Visant des intérêts et des revenus modestes, j'ai essayé de développer un système de transaction d'arbitrage inter-échange bitcoin (arbitrage). Il était intéressant d'obtenir diverses conclusions, je vais donc les laisser comme résultat.

Le contenu est assez ancien (vers 2017-2018), il peut donc y avoir divers changements, mais je ne suis pas sûr.

Qu'est-ce qu'une transaction d'arbitrage (arbitrage)?

Il est également appelé "sans gaine". C'est une méthode de négociation financièrement historique, et il semble qu'elle ait été certifiée comme l'une des trois principales lois mondiales sur le profit.

Quelles sont les trois principales méthodes de profit au monde "Arbitrage"? Expliquez les fonctionnalités, le mécanisme et comment gagner!|ABEYUTO (Yuto Abe) Médias Officiels|ABEYUTO (Yuto Abe) Médias Officiels

C'est une méthode qui peut sûrement faire un profit en prenant une commande en perçant la distorsion au moment où une certaine distorsion se produit sur le marché.

La distorsion a une grande variété de motifs

Il y a quelque chose comme ça.

Cette fois, j'ai réalisé un programme visant à déformer la différence de prix entre les échanges.

Par rapport aux actions et aux produits financiers historiques, les monnaies virtuelles ont moins de fonctions sur la bourse elle-même (comme ne pas pouvoir vendre). Il y a aussi une raison pour laquelle cela ne peut être fait qu'entre échanges dans la réalité, car l'API de l'échange doit également être publiée pour exécution.

Ci-après, la transaction d'arbitrage sera dénommée Abitra.

Où l'échange a-t-il été utilisé et quelle est la méthode spécifique?

J'ai utilisé. La méthode spécifique est la suivante.

Modèle 1: envoyer de l'argent et vendre après l'achat

C'est le modèle que j'ai essayé en premier, en achetant à une bourse bon marché, en envoyant de l'argent et en vendant à une bourse élevée. ** Ce modèle n'a pas fonctionné pour les raisons décrites ci-dessous. ** **

Déposez le même montant de yens japonais à l'échange pour être utilisé comme préparation.

image.png

Le programme surveille les informations sur les prix et passe des ordres d'achat avec le moins cher au moment où une différence est créée entre les échanges.

Exemple)

1 BTC vaut 1000000 yens sur l'échange A 1 BTC sur l'échange B est de 1010 000 yens (différence de prix + 10 000 yens)

Achetez 0,1 BTC sur l'échange A, transférez-le sur l'échange B et vendez

image.png

** Cela générera instantanément un bénéfice de 1000 yens. ** **

Je pensais que si je continuais, je pourrais gagner de manière entièrement automatique, mais ...

On a découvert que le transfert de Bitcoin était plus lent que prévu ... Je pensais que le transfert se ferait en un instant après avoir lu un livre, mais cela m'a pris 30 minutes ou quelques heures à perdre. Cela n'a aucun sens à moins que la transaction ne soit achevée pendant la distorsion momentanée. S'il s'agit d'un XRP ou d'une devise avec une vitesse de transfert rapide, cela peut être résolu.

J'ai essayé diverses choses depuis lors, mais il y a des problèmes fondamentaux lors de l'intégration des transferts dans le flux.

1. 1. Le montant d'argent entre les comptes sera déséquilibré, vous devrez donc rééquilibrer régulièrement.

Étant donné que l'argent est envoyé depuis le compte que vous avez acheté, il arrive qu'il n'y ait ni yen japonais ni BTC dans un compte spécifique. Comme il est difficile de déposer automatiquement des yens japonais, il est nécessaire de transférer régulièrement des BTC de la bourse de surplus, mais la logique y est devenue compliquée.

2. Les frais d'envoi de fonds sont assez élevés et exercent une pression sur les bénéfices

Selon l'échange, les frais de transfert sont assez élevés, n'est-ce pas? (Je lisais un livre Bitcoin et je pensais que la monnaie virtuelle était caractérisée par des coûts de transaction faibles et rapides, mais ...)

À l'origine, l'arbitrage lui-même est un modèle qui accumule régulièrement de petits bénéfices, il est donc assez pénible d'augmenter le coût de transaction pour chaque transaction.

Si vous essayez de le faire, vous ne négocierez que dans des conditions qui vous permettront de réaliser un profit même si vous incluez les frais de transfert, mais il y avait un problème en ce que le nombre de transactions serait considérablement réduit.

3. 3. Peu d'échanges peuvent utiliser l'API de transfert d'argent avec ce mécanisme

En premier lieu, l'API de remise est assez sécurisée (c'est naturel car elle conduit à des envois de fonds illégaux).

Les premiers échanges pourraient être mis en œuvre à Gabagaba, mais en augmentant le nombre d'échanges, --Transférez un jour ouvrable après avoir frappé l'API de remise et avoir réussi

Quelque chose a été trouvé et c'était vraiment difficile.

Motif 2: rééquilibrer sans envoyer d'argent

J'ai abandonné car il semble difficile d'incorporer le versement.

En regardant les informations sur les prix de l'échange tout en le faisant, j'ai remarqué que ** les échanges essentiellement bon marché et les échanges élevés sont pour la plupart fixes, mais il y a des moments de retournement plusieurs fois par jour. .. ** **

Par conséquent, mettez le même montant de yens japonais et de BTC dans tous les comptes.

--Ordres d'aller pour le profit comme arbitrage --Ordre de rééquilibrage

Je pensais que ça marcherait si je rééquilibrais dans la fourchette qui ne perd pas en prenant des bénéfices en divisant

    1. Etat initial

image.png

  1. La différence de prix se produit 1 BTC vaut 1000000 yens sur l'échange A 1 BTC sur l'échange B est de 1010 000 yens (différence de prix + 10 000 yens)

Achetez 0,1 BTC sur l'échange A, transférez-le sur l'échange B et vendez

image.png

    1. Rééquilibrer

Si cela est laissé tel quel, BTC ne peut pas être acheté en A et BTC ne peut pas être vendu en B, ce qui entraîne une perte d'opportunité. Par conséquent, lorsque les prix de A et B sont inversés, l'ordre inverse est passé (les frais de transaction doivent également être pris en compte).

image.png

Contrairement au modèle où vous pouvez acheter à un prix pas cher et vendre à un prix élevé au moment où la différence de prix se produit Achat et vente = Le solde est perdu et il devient impossible d'acheter et de vendre sur un échange spécifique pendant un certain temps

Donc, pour maximiser les profits

--- S'il y a une différence en yen, passez une commande pour obtenir un profit --- S'il y a une différence de yen, passez une commande pour rééquilibrer

Il est nécessaire d'ajuster le paramètre appelé avec diligence.

Comme c'était une époque où la volatilité du Bitcoin lui-même était élevée, je faisais de fréquents entretiens tout en regardant les données.

De plus, comme il contient une certaine quantité de BTC, il existe toujours un risque de fluctuations de prix.

Était-ce rentable après tout?

En raison de la hausse du prix du BTC, la comparaison du principal a considérablement augmenté. (En fait, c'était moins que le chiffre, donc il s'agit des larmes d'un moineau, mais ...)

Cependant, de façon inattendue, il est devenu difficile de régler les paramètres pour ne pas perdre l'opportunité et le coût d'exploitation, et je n'étais pas motivé et j'ai été déçu.

De plus, il y a beaucoup de comportements que je ne comprends pas bien pour chaque échange. (Certains échanges ont un montant qui est loin du prix du marché pour un moment à 4 heures du matin ...)

Je voulais penser que l'optimisation des paramètres serait un domaine intéressant si elle était combinée avec l'apprentissage automatique, mais ce n'était pas le cas.

Si j'ai une chance, j'aimerais réessayer.

C'est difficile, mais je vais aussi télécharger la source. https://github.com/haruhiko-tano/arbitrage-bot

Recommended Posts

J'ai créé un bot de transaction d'arbitrage de monnaie virtuelle et essayé de gagner de l'argent
[LINE @] J'ai essayé de créer un BOT de conversion de calendrier occidental de calendrier japonais [API de messagerie]
J'ai essayé de créer une fonction de connexion avec Java
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
J'ai essayé JAX-RS et pris note de la procédure
J'ai essayé de faire coexister Java Optional et la clause de garde
J'ai créé un client RESAS-API en Java
Facile à créer LINE BOT avec Java Servlet Partie 2: J'ai essayé des messages image et des modèles
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
J'ai essayé de créer une fonction de groupe (babillard) avec Rails
Comment créer un robot Discord (Java)
J'ai essayé de créer une classe parent d'objet de valeur dans Ruby
[iOS] J'ai essayé de créer une application de traitement de type insta avec Swift
J'ai essayé de créer une API Web qui se connecte à DB avec Quarkus
J'ai essayé de créer mon propre guide de transfert en utilisant OpenTrip Planner et GTFS
J'ai essayé de créer une application de conversation en Java à l'aide de l'IA «A3RT»
J'ai essayé de créer une application d'apprentissage automatique avec Dash (+ Docker) part1 ~ Construction de l'environnement et vérification du fonctionnement ~
J'ai créé une application d'apprentissage automatique avec Dash (+ Docker) part3 ~ Practice ~
J'ai essayé de faire une authentification de base avec Java
[LINE @] J'ai essayé de créer un BOT de conversion de calendrier occidental de calendrier japonais [API de messagerie]
java j'ai essayé de casser un simple bloc
J'ai essayé de lier grafana et postgres [docker-compose]
J'ai essayé de développer un outil de gestion des effectifs
Je l'ai fait en Java pour toujours rendre (a == 1 && a == 2 && a == 3) vrai
J'ai essayé de développer un site Web pour étudier DUO3.0.
J'ai essayé de faire un jeu simple avec Javafx ① "Trouvons le jeu du bonheur" (inachevé)
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
J'ai essayé de créer une application de clonage LINE
J'ai créé un conteneur Docker pour exécuter Maven
J'ai essayé de lier JavaFX et Spring Framework.
[Android] J'ai créé un écran de liste de matériaux avec ListView + Bottom Sheet
J'ai créé un robot LINE avec Rails + heroku
[Petite histoire] J'ai essayé de rendre java ArrayList un peu plus pratique
J'ai essayé de développer un site Web pour enregistrer les dépenses.
J'ai essayé d'implémenter un serveur en utilisant Netty
J'ai essayé de casser le bloc avec java (1)
Présentation de ce que j'ai fait lorsque je voulais ajouter un en-tête et un pied de page à RecyclerView
J'ai essayé de créer une application qui vous permet de publier et de discuter par genre ~ Là où j'ai eu du mal ~
J'ai essayé de créer un outil de comparaison des prix des produits Amazon dans le monde entier avec Java, l'API Amazon Product Advertising, l'API Currency (29/01/2017)
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
J'ai essayé de créer un nouvel algorithme de tri, mais je ne sais pas si c'est vraiment nouveau
J'ai essayé d'utiliser Wercker pour créer et publier une image Docker qui lance GlassFish 5
J'ai essayé de créer une fonction de message de l'extension Rails Tutorial (Partie 1): Créer un modèle
J'ai essayé de lire et de sortir CSV avec Outsystems
J'ai essayé de développer un site Web de partage de boutique de ramen.
J'ai essayé d'intégrer le bouton AWS I oT et Slack
[Ruby] J'ai fait un robot avec de l'anémone et du nokogiri.
J'ai essayé de créer une compétence Clova en Java
J'ai créé un serveur et un client Restful au printemps.
J'ai essayé de mâcher C # (lire et écrire des fichiers)
J'ai essayé de faire une fonction de réponse de l'extension Rails Tutorial (Partie 3): Correction d'un malentendu des spécifications
J'ai essayé de convertir l'exemple d'application en microservice selon l'idée du livre "Microservice Architecture".
J'ai essayé de développer une application web à partir d'un mois et demi d'histoire d'apprentissage de la programmation
[Rails 6.0, Docker] J'ai essayé de résumer la construction de l'environnement Docker et les commandes nécessaires pour créer un portfolio
J'ai essayé de créer une application qui vous permet de publier et de discuter par genre ~ Vue d'ensemble de l'application ~
[Java] J'ai essayé de créer un jeu Janken que les débutants peuvent exécuter sur la console
J'ai essayé de créer une fonction de message pour l'extension Rails Tutorial (Partie 2): Créer un écran à afficher
J'ai essayé de faire une demande en 3 mois d'inexpérimenté