[FX] Hit oanda-API avec Python en utilisant Docker

Aperçu

Le trading FX est essentiellement un processus manuel. Ce serait très amusant de pouvoir régler cela automatiquement en programmant avec Python. Vous pouvez utiliser l'apprentissage automatique pour prédire les prix futurs et même configurer le trading automatique à des heures fixes et à une logique fixe. Ici, comme première étape pour cela, nous visons à pouvoir effectuer des paiements en utilisant Python en accédant à l'api de Docker.

Environnement prérequis

--Créez un compte (un compte de démonstration est bien) dans oanda et émettez un jeton API --Environnement où docker et docker-compose peuvent être utilisés

paramètres oanda

Vous devez accéder à l'API pour acheter et vendre des effets à l'aide d'un langage de programmation tel que Python. Il existe de nombreuses entreprises qui peuvent faire du FX comme SBI Securities et DMMFX, mais seul oanda fournit des API pour le FX au Japon, alors créez d'abord un compte avec oanda. S'il y a des bogues, ce sera difficile, donc un compte de démonstration convient au début. Vous pouvez le faire en 15 minutes environ. Concernant le trading FX utilisant l'API oanda, les articles suivants sont faciles à comprendre avec Qiita.

Trouvez un bon exemple de code

Si vous regardez l'article ci-dessus, vous pouvez accéder à l'API d'un seul coup, mais étant donné que vous implémenterez diverses choses à l'avenir, il est plus facile de le faire en tant que classe ou fonction. Je pensais que ce serait ennuyeux de l'implémenter moi-même, mais quand je l'ai cherché, j'ai trouvé un bon exemple de code sur Github.

Vous pouvez cloner ce type et le faire exactement comme il est écrit. Vous pouvez voir comment le faire en détail en regardant REAMDE dans le référentiel ci-dessus, mais les principaux points sont résumés ci-dessous.

Cela semble pratique. Vous pouvez l'essayer sur votre propre PC tel quel, mais comme c'est un gros problème, je vais essayer les modifications suivantes.

Paramètres AWS

Tout va bien tant que je peux utiliser docker, mais je n'ai jamais utilisé ʻAWS, donc je l'ai essayé. Cette fois, j'ai créé une instance à partir de ʻAWS's ʻAmazon EC2 avec un système d'exploitation approprié (je l'ai fait ʻubuntu), et j'ai essayé d'utiliser docker. C'est un cadre d'essai gratuit, donc les spécifications telles que la mémoire sont les pires. Si c'est la valeur par défaut, rien n'est inclus, alors vérifiez-le correctement J'ai mis dans docker.

Ecrire un Dockerfile

En regardant le référentiel d'origine, il indique que la configuration nécessite les éléments suivants:


user@host: ~/v20-python-samples$ make bootstrap #Faire virtualenv de makefile
user@host: ~/v20-python-samples$ source env/bin/activate
(env)user@host: ~/v20-python-samples$ python setup.py develop #paramètres du point d'entrée

Dans le makefile ci-dessus


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

J'ai installé les packages nécessaires. Laissez le docker faire tous les réglages pour cela. Écrivez avec le sentiment suivant.

Dockerfile


FROM centos:7 #Version appropriée

#Extraire le référentiel correspondant de github (branche principale)
ARG BRANCH="master"
RUN yum install git -y \ 
    && git clone --depth 1 --single-branch -b ${BRANCH} https://github.com/oanda/v20-python-samples.git 

#Mettez dans les paquets nécessaires
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

Autour de l'authentification

Chaque fois que vous effectuez un paiement, lisez les informations d'authentification telles que le jeton API de .v20.conf. Écrivez comme suit.

bash:.v20.conf


hostname: api-fxpractice.oanda.com #Parce que c'est une démo, fxfractice
streaming_hostname: stream-fxpractice.oanda.com
port: 443
ssl: true
token: e6ab562b039325f12a026c6fdb7b71bb-b3d8721445817159410f01514acd19hbc #Exemple de jeton émis par oanda
username: user
accounts:
- 101-001-100000-001
- 101-001-100000-002
active_account: 101-001-100000-002 #Exemple d'identifiant de compte oanda

Le problème est l'emplacement de celui-ci, si vous voulez le déplacer de votre environnement local comme prévu à l'origine, vous pouvez simplement le mettre dans ~ / .v20.conf, mais copiez ce fichier tel qu'il est dans l'image du docker N'est pas très bon pour la sécurité, alors utilisez docker-compose. Pour utiliser docker-compose, écrivez docker-compose.yaml comme suit.

docker-compose.yaml



services:
  oanda: #
    image: oanda #nom de l'image
    build: #./oanda #avec ça./oanda/Construit à l'aide de Dockerfile
    tty: true #Sans cela, il se fermera immédiatement après l'exécution, alors attachez-le
    secrets:
    - .v20.conf #Fichier que vous souhaitez transmettre
secrets: #paramètres secrets
  .v20.conf: 
    file: .v20.conf

La structure du fichier est la suivante

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

Le mécanisme de docker-compose n'est pas abordé ici, mais il peut gérer plusieurs conteneurs à la fois. Cette fois, une image docker est créée sur la base de . / Oanda / Dockerfile. Les informations sur les secrets sont montées sous / run / secrets dans le conteneur. J'ai fait référence à ce qui suit

Il semble y avoir plusieurs autres façons de passer des informations PASS, etc. en tant que variables d'environnement, mais cette fois j'ai utilisé cette méthode parce que je voulais utiliser la spécification de lecture de «.20.conf» telle quelle.

Exécutez docker-compose

Maintenant que nous sommes prêts, créons un conteneur.


$ sudo docker-compose up -d #Je veux l'exécuter en arrière-plan-Ajouter d
Creating network "test_default" with the default driver
Creating test_oanda_1 ... #Cette fois~/test/Il semble que ce soit une telle règle de dénomination car elle a été exécutée ci-dessous
Creating test_oanda_1 ... done
Attaching to test_oanda_1
#Vous pouvez vérifier diverses choses avec les commandes suivantes
$ sudo docker-compose ps 
    Name        Command    State   Ports
----------------------------------------
test_oanda_1   /bin/bash   Up    #Puisque l'état est en place, il semble que le conteneur fonctionne correctement
$ sudo docker-compose images #Confirmer l'image
 Container     Repository    Tag       Image Id      Size 
----------------------------------------------------------
test_oanda_1   oanda        latest   c84xxxxxxxxx   489 MB   
$ sudo docker ps #Vous pouvez également vérifier en utilisant la commande docker normalement
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d56xxxxxxxxx        oanda               "/bin/bash"         2 minutes ago       Up 2 minutes                            test_oanda_1     

Cette fois, je viens de passer les informations sur les secrets, mais il semble que docker-compose puisse être utilisé de la même manière lors de la liaison nginx et mysql. Au fait, vous pouvez supprimer le conteneur en cours d'exécution avec docker-compose down.

Entrez dans le conteneur et essayez de courir

Entrez l'image docker créée et exécutez la commande


$ sudo docker-compose exec oanda bash #oanda est le nom du service défini dans le Dockerfile

Si vous le mettez en toute sécurité, vous devriez pouvoir voir le référentiel cloné depuis github, donc Remplacez DEFAULT_PATH =" ~ / .v20.conf " dans v20-python-samples / src / common / config.py par" / run / secrets ". (Parce que le fichier d'authentification est monté sous / run / secrets)

Après cela, vous pouvez acheter et vendre simplement en exécutant la commande. Essayons d'afficher les informations de votre compte.


# cd v20-python-samples/
# v20-account-details 
===============================  ==============================
Account ID                       100-xxx-xxxxxxxx-xxx
Alias                            xxxxxxx
Home Currency                    JPY
Balance                          2999999.978 #Équilibre. Parce que c'est un compte de démonstration, il y en a environ 3 millions
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
===============================  ==============================

l'a fait!

Résumé

Autre côté

Recommended Posts

[FX] Hit oanda-API avec Python en utilisant Docker
Utilisation de venv dans un environnement Windows + Docker [Python]
Hit API de Mastodon en Python
Traduit à l'aide de googletrans en Python
Backtesting FX Systre avec Python (1)
Utilisation du mode Python dans le traitement
Programmation GUI en Python avec Appjar
Précautions lors de l'utilisation de Pit avec Python
Appuyez sur une commande en Python (Windows)
Optimisation des paramètres de systole FX en Python
Essayez d'utiliser LevelDB avec Python (plyvel)
Utilisation de variables globales dans les fonctions python
Accédez à l'API Web en Python
Voyons voir l'utilisation de l'entrée en python
Puissance totale en Python (en utilisant functools)
Reconnaissance de caractères manuscrits à l'aide de KNN en Python
Essayez d'utiliser LeapMotion avec Python
Recherche de priorité de profondeur à l'aide de la pile en Python
Lors de l'utilisation d'expressions régulières en Python
Création d'interface graphique en python avec tkinter 2
Créez et essayez un environnement OpenCV et Python en quelques minutes à l'aide de Docker
Fonctionnement de la souris à l'aide de l'API Windows en Python
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Essayez d'utiliser l'API Wunderlist en Python
Création d'interface graphique en python à l'aide de tkinter partie 1
Obtenir l'équilibre Suica en Python (en utilisant libpafe)
Hachez lentement les mots de passe en utilisant bcrypt en Python
Essayez d'utiliser l'API Kraken avec Python
Derrière le flyer: utiliser Docker avec Python
Tweet à l'aide de l'API Twitter en Python
[Python] [Windows] Communication série en Python à l'aide de DLL
J'ai essayé d'utiliser l'optimisation bayésienne de Python
Connectez-vous à Slack à l'aide de requêtes en Python
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Utilisation des constantes physiques dans Python scipy.constants ~ constant e ~
Scraping de sites Web à l'aide de JavaScript en Python
Développement de slack bot avec python en utilisant chat.postMessage
Ecrire un module python dans fortran en utilisant f2py
Dessinez une structure arborescente en Python 3 à l'aide de graphviz
Remarques sur l'utilisation de python (pydev) avec eclipse
Classification des maladies par Random Forest en utilisant Python
Téléchargez des fichiers dans n'importe quel format en utilisant Python
Exécution de tâches parallèles à l'aide de concurrent.futures en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Créer un fichier GIF en utilisant Pillow en Python
Méta-analyse en Python
Pièces jointes par e-mail à l'aide de votre compte gmail avec python.
Unittest en Python
Développer et déployer des API Python à l'aide de Kubernetes et Docker
Flux de développement Python avec Poetry, Git et Docker
Création d'un processus de numérotation à l'aide de python dans le processus de numérotation locale DynamoDB
Essayez d'utiliser l'API BitFlyer Ligntning en Python