[PYTHON] Les débutants créeront un bot de trading automatique Bitcoin visant beaucoup d'argent! Partie 3 [Bot local]

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!

spécification

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.

la mise en oeuvre

À 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}

Le résultat de se déplacer dans une boucle infinie pendant une journée

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

Réflexions ou problèmes

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

en conclusion

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é ~

Journal des modifications

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

Les débutants créeront un bot de trading automatique Bitcoin visant beaucoup d'argent! Partie 3 [Bot local]
Les débutants créeront un bot de trading automatique Bitcoin visant beaucoup d'argent! Partie 4 [sans serveur]
Les débutants créeront un bot de trading automatique Bitcoin visant beaucoup d'argent! Partie 1 [Acquisition d'informations]
Les débutants créeront un bot de trading automatique Bitcoin visant beaucoup d'argent! Partie 2 [Transaction avec API]
[Phase de réflexion] Prédire la hauteur d'arrêt, stratégie visant beaucoup d'argent-concept-edit