[FX] Hit oanda-API mit Python mit Docker

Überblick

Der Devisenhandel ist grundsätzlich ein manueller Prozess. Es würde viel Spaß machen, dies automatisch durch Programmieren mit Python regeln zu können. Sie können maschinelles Lernen verwenden, um zukünftige Preise vorherzusagen, und sogar den automatischen Kauf und Verkauf zu festen Zeiten und fester Logik einrichten. Als ersten Schritt möchten wir in der Lage sein, Zahlungen mit Python zu tätigen, indem wir auf die API von Docker klicken.

Voraussetzung Umgebung

--Erstellen Sie in oanda ein Konto (ein Demo-Konto ist in Ordnung) und stellen Sie ein API-Token aus

oanda Einstellungen

Sie müssen die API drücken, um FX mit einer Programmiersprache wie Python zu kaufen und zu verkaufen. Es gibt viele Unternehmen, die FX ausführen können, wie SBI Securities und DMMFX, aber nur oanda bietet APIs für FX in Japan an. Erstellen Sie daher zuerst ein Konto bei oanda. Wenn es Fehler gibt, wird es schwierig sein, daher ist ein Demo-Konto zunächst in Ordnung. Sie können es in etwa 15 Minuten tun. In Bezug auf den Devisenhandel mit der Oanda-API sind die folgenden Artikel mit Qiita leicht zu verstehen.

Finden Sie einen schönen Beispielcode

Wenn Sie sich den obigen Artikel ansehen, können Sie die API auf einmal aufrufen. Wenn Sie jedoch berücksichtigen, dass Sie in Zukunft verschiedene Dinge implementieren werden, ist es einfacher, dies als Klasse oder Funktion zu tun. Ich dachte, es wäre ärgerlich, es selbst zu implementieren, aber als ich danach suchte, fand ich einen schönen Beispielcode auf Github.

Sie können diesen Kerl klonen und es genau so machen, wie es geschrieben steht. Sie können sehen, wie es im Detail geht, indem Sie sich REAMDE im obigen Repository ansehen. Die wichtigsten Punkte sind jedoch unten zusammengefasst.

Es sieht bequem aus. Sie können es auf Ihrem eigenen PC ausprobieren, aber da es eine große Sache ist, werde ich die folgenden Änderungen hinzufügen.

AWS-Einstellungen

Alles ist in Ordnung, solange ich Docker verwenden kann, aber ich habe noch nie "AWS" verwendet, also habe ich es versucht. Dieses Mal habe ich eine Instanz aus "Amazon EC2" von "AWS" mit einem geeigneten Betriebssystem erstellt (ich habe es "Ubuntu" gemacht) und versucht, Docker darin zu verwenden. Es ist ein kostenloser Testrahmen, daher sind die Spezifikationen wie Speicher am schlechtesten. Wenn dies die Standardeinstellung ist, ist nichts enthalten. Überprüfen Sie sie daher entsprechend Ich habe Docker eingesetzt.

Schreiben Sie eine Docker-Datei

Im ursprünglichen Repository heißt es, dass für die Einrichtung Folgendes erforderlich ist:


user@host: ~/v20-python-samples$ make bootstrap #Machen Sie virtualenv aus dem Makefile
user@host: ~/v20-python-samples$ source env/bin/activate
(env)user@host: ~/v20-python-samples$ python setup.py develop #Einstiegspunkteinstellungen

Im Makefile oben


env/bin/pip install -r requirements/base.txt

Ich habe die notwendigen Pakete installiert. Lassen Sie den Docker alle Einstellungen dafür vornehmen. Schreiben Sie mit folgendem Gefühl.

Dockerfile


FROM centos:7 #Geeignete Version

#Ziehen Sie das entsprechende Repository aus Github (Hauptzweig).
ARG BRANCH="master"
RUN yum install git -y \ 
    && git clone --depth 1 --single-branch -b ${BRANCH} https://github.com/oanda/v20-python-samples.git 

#Legen Sie die erforderlichen Pakete ein
RUN yum install python3 -y \ 
    && yum install python3-devel -y \
    && yum install gcc -y \
    && cd v20-python-samples/ \
    && pip3 install -r requirements/base.txt \
    && python3 setup.py develop

Rund um die Authentifizierung

Jedes Mal, wenn Sie eine Zahlung tätigen, werden die Authentifizierungsinformationen wie das API-Token aus der .v20.conf gelesen. Schreiben Sie wie folgt.

bash:.v20.conf


hostname: api-fxpractice.oanda.com #Weil es eine Demo ist, fxfractice
streaming_hostname: stream-fxpractice.oanda.com
port: 443
ssl: true
token: e6ab562b039325f12a026c6fdb7b71bb-b3d8721445817159410f01514acd19hbc #Beispiel eines von Oanda ausgegebenen Tokens
username: user
accounts:
- 101-001-100000-001
- 101-001-100000-002
active_account: 101-001-100000-002 #Beispiel für eine Oanda-Konto-ID

Das Problem ist der Speicherort dieses Dokuments. Wenn Sie es wie ursprünglich erwartet aus Ihrer lokalen Umgebung verschieben möchten, können Sie es einfach in ~ / .v20.conf ablegen, diese Datei jedoch so kopieren, wie sie im Docker-Image enthalten ist Ist nicht sehr gut für die Sicherheit, verwenden Sie also "Docker-Compose". Um docker-compose zu verwenden, schreiben Sie docker-compose.yaml wie folgt.

docker-compose.yaml



services:
  oanda: #
    image: oanda #Bildname
    build: #./oanda #mit diesem./oanda/Mit Dockerfile erstellt
    tty: true #Ohne dies wird es sofort nach der Ausführung beendet, also hängen Sie es an
    secrets:
    - .v20.conf #Datei, die Sie übergeben möchten
secrets: #Geheimnisse Einstellungen
  .v20.conf: 
    file: .v20.conf

Die Struktur der Datei ist wie folgt

$ tree -a
.
├── .v20.conf
├── docker-compose.yaml
└── oanda
    └── Dockerfile

Der Mechanismus von "Docker-Compose" wird hier nicht angesprochen, kann jedoch mehrere Container gleichzeitig verarbeiten. Dieses Mal wird ein Docker-Image basierend auf . / Oanda / Dockerfile erstellt. Die Geheiminformationen werden im Container unter "/ run / secret" eingehängt. Ich bezog mich auf Folgendes

Es scheint mehrere andere Möglichkeiten zu geben, PASS-Informationen usw. als Umgebungsvariablen zu übergeben, aber dieses Mal habe ich diese Methode verwendet, weil ich die Spezifikation des Lesens von ".20.conf" so wie sie ist verwenden wollte.

Führen Sie Docker-Compose aus

Nachdem wir fertig sind, erstellen wir einen Container.


$ sudo docker-compose up -d #Ich möchte es im Hintergrund ausführen-Hinzufügen d
Creating network "test_default" with the default driver
Creating test_oanda_1 ... #Diesmal~/test/Es scheint, dass es sich um eine solche Namensregel handelt, da sie unten ausgeführt wurde
Creating test_oanda_1 ... done
Attaching to test_oanda_1
#Sie können verschiedene Dinge mit den folgenden Befehlen überprüfen
$ sudo docker-compose ps 
    Name        Command    State   Ports
----------------------------------------
test_oanda_1   /bin/bash   Up    #Da State Up ist, scheint der Container ordnungsgemäß zu funktionieren
$ sudo docker-compose images #Bild bestätigen
 Container     Repository    Tag       Image Id      Size 
----------------------------------------------------------
test_oanda_1   oanda        latest   c84xxxxxxxxx   489 MB   
$ sudo docker ps #Sie können dies auch überprüfen, indem Sie den Docker-Befehl normal verwenden
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d56xxxxxxxxx        oanda               "/bin/bash"         2 minutes ago       Up 2 minutes                            test_oanda_1     

Dieses Mal habe ich nur die Geheiminformationen übergeben, aber es scheint, dass "Docker-Compose" auf die gleiche Weise verwendet werden kann, wenn "Nginx" und "MySQL" verknüpft werden. Übrigens können Sie den laufenden Container mit "Docker-Compose Down" löschen.

Betreten Sie den Container und versuchen Sie zu laufen

Geben Sie das erstellte Docker-Image ein und führen Sie den Befehl aus


$ sudo docker-compose exec oanda bash #oanda ist der Name des Dienstes, der in der Docker-Datei festgelegt ist

Wenn Sie es sicher ablegen, sollten Sie das geklonte Repository von Github aus sehen können Ändern Sie "DEFAULT_PATH =" ~ / .v20.conf "in" v20-python-samples / src / common / config.py "in" / run / Secrets ". (Weil die Authentifizierungsdatei unter / run / secret eingehängt ist)

Danach können Sie kaufen und verkaufen, indem Sie den Befehl ausführen. Versuchen wir, Ihre Kontoinformationen anzuzeigen.


# cd v20-python-samples/
# v20-account-details 
===============================  ==============================
Account ID                       100-xxx-xxxxxxxx-xxx
Alias                            xxxxxxx
Home Currency                    JPY
Balance                          2999999.978 #Balance. Da es sich um ein Demo-Konto handelt, gibt es ungefähr 3 Millionen
Created by User ID               xxxxxxxx 
Create Time                      2020-06-03T12:45:17.366012787Z
Guaranteed Stop Loss Order Mode  DISABLED
Profit/Loss                      -0.022
Resettable Profit/Loss           -0.022
Profit/Loss Reset Time           0
Financing                        0.0
Commission                       0.0
Guaranteed Execution Fees        0.0
Margin Rate                      0.04
Open Trade Count                 0
Open Position Count              0
Pending Order Count              0
Hedging Enabled                  True
Unrealized Profit/Loss           0.0
Net Asset Value                  2999999.978
Margin Used                      0.0
Margin Available                 2999999.978
Position Value                   0.0
Closeout UPL                     0.0
Closeout NAV                     2999999.978
Closeout Margin Used             0.0
Margin Closeout Percentage       0.0
Margin Closeout Position Value   0.0
Withdrawal Limit                 2999999.978
Last Transaction ID              10
===============================  ==============================

erledigt!

Zusammenfassung

Andere beiseite

Recommended Posts

[FX] Hit oanda-API mit Python mit Docker
Verwenden von venv in der Windows + Docker-Umgebung [Python]
Hit Mastodons API in Python
Übersetzt mit Googletrans in Python
Backtesting von FX Systre mit Python (1)
Verwenden des Python-Modus in der Verarbeitung
GUI-Programmierung in Python mit Appjar
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Drücken Sie einen Befehl in Python (Windows)
Optimierung der FX-Systolenparameter in Python
Versuchen Sie es mit LevelDB mit Python (plyvel)
Verwendung globaler Variablen in Python-Funktionen
Klicken Sie auf die Web-API in Python
Mal sehen, wie man Eingaben in Python verwendet
Gesamtleistung in Python (mit Funktools)
Handschriftliche Zeichenerkennung mit KNN in Python
Versuchen Sie es mit LeapMotion mit Python
Suche nach Tiefenpriorität mit Stack in Python
Bei Verwendung regulärer Ausdrücke in Python
GUI-Erstellung in Python mit tkinter 2
Erstellen und testen Sie mit Docker in wenigen Minuten eine OpenCV- und Python-Umgebung
Mausbedienung mit Windows-API in Python
Hinweise zur Verwendung von cChardet und python3-chardet in Python 3.3.1.
Versuchen Sie es mit der Wunderlist-API in Python
GUI-Erstellung in Python mit tkinter Teil 1
Holen Sie sich Suica Balance in Python (mit libpafe)
Hash-Passwörter langsam mit bcrypt in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Hinter dem Flyer: Docker mit Python verwenden
Tweet mit der Twitter-API in Python
[Python] [Windows] Serielle Kommunikation in Python über DLL
Ich habe versucht, die Bayes'sche Optimierung von Python zu verwenden
Melden Sie sich mit Anforderungen in Python bei Slack an
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Verwenden physikalischer Konstanten in Python scipy.constants ~ Konstante e ~
Scraping von Websites mit JavaScript in Python
Entwicklung eines Slack Bot mit Python mit chat.postMessage
Schreiben Sie mit f2py ein Python-Modul in fortran
Zeichnen Sie mit graphviz eine Baumstruktur in Python 3
Hinweise zur Verwendung von Python (Pydev) mit Eclipse
Krankheitsklassifizierung durch Random Forest mit Python
Laden Sie Dateien in jedem Format mit Python herunter
Parallele Taskausführung mit concurrent.futures in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Erstellen Sie eine GIF-Datei mit Pillow in Python
Metaanalyse in Python
E-Mail-Anhänge über Ihr Google Mail-Konto mit Python.
Unittest in Python
Entwickeln und Bereitstellen von Python-APIs mit Kubernetes und Docker
Python-Entwicklungsablauf mit Poetry, Git und Docker
Erstellen eines Nummerierungsprozesses mit Python im lokalen DynamoDB-Nummerierungsprozess
Versuchen Sie es mit der BitFlyer Ligntning API in Python