Les débutants créeront un bot de trading automatique Bitcoin visant beaucoup d'argent! Partie 1 Les débutants créeront un bot de trading automatique Bitcoin visant beaucoup d'argent! La partie 2 se poursuit.
Cette fois, nous allons enfin créer un ** Bitcoin trading automatique de type Bot ** que vous pouvez acheter et vendre vous-même!
Comme expérience pour voir si cela fonctionne en combinaison ** Achetez quand ça devient moins cher et vendez quand ça coûte cher! J'ai fait un bot stupide comme **.
① Passer le montant de la transaction précédente (ce montant sera le critère de jugement) ② Si vous avez Bitcoin et que le prix augmente, vendez-le! (Et mettre à jour le montant de la transaction précédente) ③ Si vous avez du yen japonais et que le prix baisse, achetez-le! (Et mettre à jour le montant de la transaction précédente) ④ Si la transaction n'est pas traitée, attendez 1 minute, si elle n'est pas traitée même après avoir attendu, annulez (et restaurez le montant de la transaction précédente)
【référence】 -Si le "order_id" de la réponse après la transaction n'est pas 0 (order_id est émis), la transaction est en attente.
À partir de ce moment, j'ai changé la clé et le secret en json et je les ai stockés dans un fichier séparé.
[]···dossier
[zaif]
|- main.py
|- [config] - zaif_keys.json
| -...
main.py
# -*- coding: utf-8 -*-
import json
import time
from zaifapi import ZaifPublicApi #Classe qui exécute une API qui ne nécessite pas d'informations d'authentification publiées par Zaif
from zaifapi import ZaifPrivateApi #Une classe qui exécute une API qui nécessite des informations d'identification publiées par Zaif
from pprint import pprint #Pour l'affichage(Il affiche json proprement)
zaif_keys_json = open('config/zaif_keys.json', 'r')
zaif_keys = json.load(zaif_keys_json)
KEY = zaif_keys["key"]
SECRET = zaif_keys["secret"]
if __name__ == '__main__':
zaif_public = ZaifPublicApi()
zaif_private = ZaifPrivateApi(KEY, SECRET)
#Montant de la dernière transaction
Last_transaction_amount = 122210
#Acquisition d'informations
last_price = int(zaif_public.last_price('btc_jpy')["last_price"])
trade_info = zaif_private.get_info2()
funds_btc = trade_info["funds"]["btc"]
funds_jpy = trade_info["funds"]["jpy"]
print('■ Ce sont les informations actuelles.')
print('last_price: ' + str(last_price))
print('funds_btc: ' + str(funds_btc))
print('funds_jpy: ' + str(funds_jpy))
cancel_flag = False
order_id = 0
last_price_old = 0
#Quand tu as du btc et que le prix monte
if funds_btc != 0 and last_price > Last_transaction_amount:
#Vendre du Bitcoin
trade_result = zaif_private.trade(currency_pair="btc_jpy", action="ask", price=last_price, amount=funds_btc)
print('■ J'ai demandé la vente de Bitcoin.')
pprint(trade_result)
last_price_old = Last_transaction_amount
Last_transaction_amount = last_price
if trade_result["order_id"] != 0:
cancel_flag = True
order_id = trade_result["order_id"]
else:
print('■ La transaction est terminée.')
#Quand vous avez jpy et que le prix baisse
#(Unité minimum (0).0001btc minutes) lorsque vous avez plus que le yen japonais)
elif funds_jpy > Last_transaction_amount / 10000 and last_price < Last_transaction_amount:
#Étant donné que l'API prend en charge jusqu'à 4 chiffres après la virgule décimale, arrondissez()
#Si le 5e chiffre est déplacé vers le haut, il y aura une pénurie d'actifs.(- 0.0001)
amount = round(float(funds_jpy) / last_price, 4) - 0.0001
#Acheter Bitcoin
trade_result = zaif_private.trade(currency_pair="btc_jpy", action="bid", price=last_price, amount=amount)
print('■ J'ai demandé l'achat de Bitcoin')
pprint(trade_result)
last_price_old = Last_transaction_amount
Last_transaction_amount = last_price
if trade_result["order_id"] != 0:
cancel_flag = True
order_id = trade_result["order_id"]
else:
print('■ La transaction est terminée.')
#Si la transaction est en attente, attendez 60 secondes et annulez si elle est toujours en attente
if cancel_flag:
print('■ Attendez 60 secondes.')
time.sleep(60)
trade_info = zaif_private.get_info2()
if trade_info["open_orders"] > 0:
print('■ Annulé.')
pprint(zaif_private.cancel_order(order_id=order_id))
Last_transaction_amount = last_price_old
else:
print('■ La transaction est terminée.')
pprint(trade_info)
Créez un dossier "config" dans la même hiérarchie que main.py et enregistrez-le dans le fichier json suivant.
zaif_keys.json
{
"key" : "[Clé créée]",
"secret" : "[Secret créé]"
}
■ Résultat d'exécution Quand le prix monte avec BTC
python
■ Ce sont les informations actuelles.
last_price: 126725
funds_btc: 0.0075
funds_jpy: 7.9355
■ J'ai demandé la vente de Bitcoin.
{u'funds': {u'btc': 0.0, u'jpy': 7.9355, u'mona': 0.0, u'xem': 0.0},
u'order_id': 156957485,
u'received': 0.0,
u'remains': 0.0075}
■ Attendez 60 secondes.
■ La transaction est terminée.
{u'deposit': {u'btc': 0.0, u'jpy': 958.373, u'mona': 0.0, u'xem': 0.0},
u'funds': {u'btc': 0.0, u'jpy': 958.373, u'mona': 0.0, u'xem': 0.0},
u'open_orders': 0,
u'rights': {u'info': 1, u'personal_info': 0, u'trade': 1, u'withdraw': 0},
u'server_time': 1491323133}
■ Résultat d'exécution Quand le prix baisse avec JPY
python
■ Ce sont les informations actuelles.
last_price: 126815
funds_btc: 0.0
funds_jpy: 959.048
■ J'ai demandé l'achat de Bitcoin
{u'funds': {u'btc': 0.0, u'jpy': 7.9355, u'mona': 0.0, u'xem': 0.0},
u'order_id': 156951488,
u'received': 0.0,
u'remains': 0.0075}
■ Attendez 60 secondes.
■ La transaction est terminée.
{u'deposit': {u'btc': 0.0, u'jpy': 959.048, u'mona': 0.0, u'xem': 0.0},
u'funds': {u'btc': 0.0, u'jpy': 7.9355, u'mona': 0.0, u'xem': 0.0},
u'open_orders': 1,
u'rights': {u'info': 1, u'personal_info': 0, u'trade': 1, u'withdraw': 0},
u'server_time': 1491322779}
J'ai traité le code ci-dessus, je l'ai exécuté une fois par minute et j'ai essayé de le déplacer pendant un jour.
① Insérez une boucle infinie "while True:" avant "# Get information" ② Insérez "time.sleep (60)" à la fin du code
Le résultat est ...!
Montant de la première transaction hier soir: * ¥ 957.8495 *
python
■ La transaction est terminée.
{u'deposit': {u'btc': 0.0, u'jpy': 957.8495, u'mona': 0.0, u'xem': 0.0},
u'funds': {u'btc': 0.0, u'jpy': 957.8495, u'mona': 0.0, u'xem': 0.0},
u'open_orders': 0,
u'rights': {u'info': 1, u'personal_info': 0, u'trade': 1, u'withdraw': 0},
u'server_time': 1491324869}
Monnaie actuelle: * ¥ 958.8245 *
python
■ Ce sont les informations actuelles.
last_price: 127740
funds_btc: 0.0
funds_jpy: 958.8245
Quand je le calcule. .. ..
・ Vous ne pouvez voir la valeur instantanée que toutes les minutes (je ne connais pas la fluctuation) ・ Étant donné que le montant de la transaction n'est stocké que dans une variable, il volera s'il tombe en raison d'une erreur. ・ Ce n'est pas beau de continuer à fonctionner sur la console de mon PC personnel (les ventilateurs du PC sont bruyants en dormant) ・ Dans les cas suivants (si les conditions ne sont pas remplies et que vous ne retournez pas), vous ne pourrez effectuer aucune transaction. ・ Si vous avez Bitcoin et que le prix baisse ・ Si vous avez des yens japonais et que le prix augmente ・ Même si le prix monte même s'il est de 0,0001, il n'est pas bon de le vendre (pas de profit ...)
Bref, c'était bien que je puisse bouger sans tomber pendant une journée. La prochaine fois, j'aimerais profiter de mes points de réflexion et ** l'exécuter sur AWS Lambda **! Avec Lambda, il est exécuté à chaque fois, vous devez donc stocker les données dans la base de données afin que les données ne volent pas.
Merci pour votre travail acharné ~
2017/04/06: La description selon laquelle la clé et le secret étaient définis sur json et enregistrés dans un fichier séparé a été omise. .. ..
Recommended Posts