[PYTHON] Anfänger machen einen automatischen Bitcoin-Handelsbot, der viel Geld anstrebt! Teil 3 [Lokaler Bot]

Anfänger machen einen automatischen Bitcoin-Handelsbot, der viel Geld anstrebt! Teil 1 Anfänger machen einen automatischen Bitcoin-Handelsbot, der viel Geld anstrebt! Teil 2 wird fortgesetzt.

Dieses Mal werden wir endlich einen ** Bitcoin Automatic Trading Bot-like ** erstellen, den Sie selbst kaufen und verkaufen können!

Spezifikation

Als Experiment, um zu sehen, ob es in Kombination funktioniert ** Kaufen, wenn es billiger wird, und verkaufen, wenn es teuer wird! Ich habe einen dummen Bot wie ** gemacht.

① Übergeben Sie den vorherigen Transaktionsbetrag (dieser Betrag ist das Kriterium für die Beurteilung) ② Wenn Sie Bitcoin haben und der Preis steigt, verkaufen Sie es! (Und aktualisieren Sie den vorherigen Transaktionsbetrag) ③ Wenn Sie japanischen Yen haben und der Preis fällt, kaufen Sie ihn! (Und aktualisieren Sie den vorherigen Transaktionsbetrag) ④ Wenn die Transaktion nicht verarbeitet wird, warten Sie 1 Minute. Wenn sie auch nach dem Warten nicht verarbeitet wird, brechen Sie ab (und stellen Sie den vorherigen Transaktionsbetrag wieder her).

【Referenz】 -Wenn die "order_id" der Antwort nach der Transaktion nicht 0 ist (order_id wird ausgegeben), wird die Transaktion angehalten.

Implementierung

Ab diesem Zeitpunkt habe ich den Schlüssel und das Geheimnis in json geändert und in einer separaten Datei gespeichert. []···Ordner [zaif]  |- main.py  |- [config] - zaif_keys.json | -...

main.py


# -*- coding: utf-8 -*-

import json
import time
from zaifapi import ZaifPublicApi  #Klasse, die eine API ausführt, für die keine von Zaif veröffentlichten Authentifizierungsinformationen erforderlich sind
from zaifapi import ZaifPrivateApi  #Eine Klasse, die eine API ausführt, für die von Zaif veröffentlichte Anmeldeinformationen erforderlich sind
from pprint import pprint  #Zur Ausstellung(Es zeigt json ordentlich an)

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)

    #Letzter Transaktionsbetrag
    Last_transaction_amount = 122210

    #Informationsbeschaffung
    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('■ Dies sind die aktuellen Informationen.')
    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

    #Wenn Sie BTC haben und der Preis steigt
    if funds_btc != 0 and last_price > Last_transaction_amount:
        #Bitcoin verkaufen
        trade_result = zaif_private.trade(currency_pair="btc_jpy", action="ask", price=last_price, amount=funds_btc)
        print('■ Ich habe den Verkauf von Bitcoin beantragt.')
        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('■ Die Transaktion ist abgeschlossen.')

    #Wenn Sie jpy haben und der Preis fällt
    #(Mindesteinheit (0).0001btc Minuten) wenn Sie mehr als japanische Yen haben)
    elif funds_jpy > Last_transaction_amount / 10000 and last_price < Last_transaction_amount:
        #Da die API bis zu 4 Nachkommastellen unterstützt, runden Sie()
        #Wenn die 5. Stelle nach oben verschoben wird, besteht ein Mangel an Vermögenswerten.(- 0.0001)
        amount = round(float(funds_jpy) / last_price, 4) - 0.0001

        #Bitcoin kaufen
        trade_result = zaif_private.trade(currency_pair="btc_jpy", action="bid", price=last_price, amount=amount)
        print('■ Ich habe den Kauf von Bitcoin beantragt')
        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('■ Die Transaktion ist abgeschlossen.')

    #Wenn die Transaktion gehalten wird, warten Sie 60 Sekunden und brechen Sie ab, wenn sie noch gehalten wird
    if cancel_flag:
        print('■ Warten Sie 60 Sekunden.')
        time.sleep(60)
        trade_info = zaif_private.get_info2()
        if trade_info["open_orders"] > 0:
            print('■ Abgebrochen.')
            pprint(zaif_private.cancel_order(order_id=order_id))
            Last_transaction_amount = last_price_old
        else:
            print('■ Die Transaktion ist abgeschlossen.')
            pprint(trade_info)
    

Erstellen Sie einen Ordner "config" in derselben Hierarchie wie main.py und speichern Sie ihn in der folgenden JSON-Datei.

zaif_keys.json


{
  "key" : "[Erstellter Schlüssel]",
  "secret" : "[Erstelltes Geheimnis]"
}

■ Ausführungsergebnis Wenn der Preis mit btc steigt

python


■ Dies sind die aktuellen Informationen.
last_price: 126725
funds_btc: 0.0075
funds_jpy: 7.9355
■ Ich habe den Verkauf von Bitcoin beantragt.
{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}
■ Warten Sie 60 Sekunden.
■ Die Transaktion ist abgeschlossen.
{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}

■ Ausführungsergebnis Wenn der Preis mit jpy fällt

python


■ Dies sind die aktuellen Informationen.
last_price: 126815
funds_btc: 0.0
funds_jpy: 959.048
■ Ich habe den Kauf von Bitcoin beantragt
{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}
■ Warten Sie 60 Sekunden.
■ Die Transaktion ist abgeschlossen.
{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}

Das Ergebnis einer Bewegung in einer Endlosschleife für einen Tag

Ich verarbeitete den obigen Code, führte ihn einmal pro Minute aus und versuchte ihn einen Tag lang zu verschieben.

① Fügen Sie eine Endlosschleife "while True:" vor "# Get information" ein. ② Fügen Sie am Ende des Codes "time.sleep (60)" ein

Das Ergebnis ist ...!

Betrag der ersten Transaktion letzte Nacht: * ¥ 957.8495 *

python


■ Die Transaktion ist abgeschlossen.
{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}

Aktuelles Geld: * ¥ 958.8245 *

python


■ Dies sind die aktuellen Informationen.
last_price: 127740
funds_btc: 0.0
funds_jpy: 958.8245

Wenn ich es berechne. .. ..

Reflexionen oder Probleme

・ Sie können den Momentanwert nur jede Minute sehen (ich kenne die Schwankung nicht) ・ Da der Transaktionsbetrag nur in einer Variablen gespeichert ist, fliegt er, wenn er aufgrund eines Fehlers fällt. ・ Es ist nicht schön, auf der Konsole meines Heim-PCs weiterzulaufen (PC-Lüfter sind im Schlaf laut) ・ In den folgenden Fällen (wenn die Bedingungen nicht erfüllt sind und Sie nicht zurückkehren) können Sie keine Transaktionen durchführen. ・ Wenn Sie Bitcoin haben und der Preis fällt ・ Wenn Sie japanischen Yen haben und der Preis steigt ・ Selbst wenn der Preis steigt, selbst wenn er 0,0001 beträgt, ist es nicht gut, ihn zu verkaufen (kein Gewinn ...)

abschließend

Wie auch immer, es war gut, dass ich mich bewegen konnte, ohne einen Tag lang zu fallen. Nächstes Mal möchte ich meine Reflexionspunkte nutzen und ** auf AWS Lambda ausführen **! Bei Lambda wird es jedes Mal ausgeführt, sodass Sie die Daten in der Datenbank speichern müssen, damit die Daten nicht fliegen.

Vielen Dank für Ihre harte Arbeit ~

Änderungsprotokoll

06.04.2017: Die Beschreibung, dass der Schlüssel und das Geheimnis auf json gesetzt und als separate Datei gespeichert wurden, wurde weggelassen. .. ..

Recommended Posts

Anfänger machen einen automatischen Bitcoin-Handelsbot, der viel Geld anstrebt! Teil 3 [Lokaler Bot]
Anfänger machen einen automatischen Bitcoin-Handelsbot, der viel Geld anstrebt! Teil 4 [Serverlos]
Anfänger machen einen automatischen Bitcoin-Handelsbot, der viel Geld anstrebt! Teil 1 [Informationsbeschaffung]
Anfänger machen einen automatischen Bitcoin-Handelsbot, der viel Geld anstrebt! Teil 2 [Transaktion mit API]
[Denkphase] Vorhersage der Stopphöhe, Strategie, die auf viel Geld-Konzept-Bearbeitung abzielt