[PYTHON] Acquisition automatique des données de cours des actions avec docker-compose

introduction

Lors de la sélection d'une action, l'outil préparé sur le site de la société de titres est utilisé, mais l'affichage graphique suffit, mais lorsque vous souhaitez effectuer un filtrage légèrement différent ou lors du backtesting du système, etc. Vous voulez avoir vos propres données sur le cours de l'action, n'est-ce pas?

Il existe un site appelé Inexhaustible qui publie des données quotidiennes sur le cours des actions japonaises. Afin d'avoir les données sur le cours de l'action par vous-même, je vais essayer d'obtenir la liste des cours de l'action du jour à partir d'ici à l'heure régulière tous les jours.

Un script python qui récupère les données de cours boursier d'un site inépuisable

Par exemple, si l'url d'acquisition des données du site inépuisable est des données boursières du 04/11/2020,

http://mujinzou.com/k_data/2020/20_11/T201104.zip

Exemple de script qui acquiert les données boursières du jour et étend le zip:

 -*- coding: utf-8 -*-
import urllib.request
import zipfile
import datetime
import os
import logging
import sys

def download_csv_zip(output_dir, year, month, day):
    base_url = 'http://mujinzou.com/k_data/'+str(year)+'/'
    subdir = '{0:02d}_{1:02d}/'.format(year-2000, month)
    filename = 'T20{0:02d}{1:02d}.zip'.format(month, day)
    url = base_url + subdir + filename
    now = datetime.datetime.now()
    try:
        urllib.request.urlretrieve(url, filename)
        with zipfile.ZipFile(filename, 'r')as zf:
            zf.extractall(output_dir)
        os.remove(filename)
        logging.info(str(now)+' success to get file: '+filename)
    except urllib.error.HTTPError:
        logging.error(str(now)+' error')
                

def main():
    args = sys.argv
    if len(args)==2:
        output_dir = args[1]
        if output_dir[-1]!='/':
            output_dir = output_dir + '/'
    else:
        output_dir = './'
    logging.basicConfig(level=logging.INFO)
    today = datetime.date.today()
    download_csv_zip(output_dir, today.year, today.month, today.day)

if __name__ == '__main__':
    main()

Exemple d'utilisation:

$ python get_todays_csv_zip_from_muzinzo.py ~/tmp

Vous pouvez spécifier le répertoire de destination du téléchargement comme argument. S'il n'est pas spécifié, la destination du téléchargement sera le répertoire actuel.

Veuillez noter que les données boursières du jour seront placées sur le site après la soirée. En d'autres termes, les données de cours de bourse pour la journée peuvent être obtenues avec ce script du soir à minuit.

Exécutez un script python avec docker-compose

En tant que tremplin pour l'exécution planifiée de scripts python, exécutez des scripts python avec docker-compose.

docker-compose.yml et Dockerfile sont empruntés à ce qui suit.

https://qiita.com/reflet/items/4b3f91661a54ec70a7dc Créons facilement un environnement python3 avec docker

Structure du répertoire

python3\
    Dockerfile
    docker-compose.yml
    opt\
        get_todays_csv_zip_from_muzinzo.py
        exec_cmd.sh
FROM python:3
USER root

RUN apt-get update
RUN apt-get -y install locales && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

RUN apt-get install -y vim less cron
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
RUN echo '0 20 * * 1-5 root /root/opt/exec_cmd.sh' >> /etc/crontab
CMD ["cron", "-f"]
version: '3'
services:
  python3:
    restart: always
    build: .
    container_name: 'python3'
    working_dir: '/root/opt'
    tty: true
    volumes:
      - ./opt:/root/opt

Commencez

$ docker-compose up -d --build

Exécuter le script python

$ docker-compose exec python3 python /root/opt/get_todays_csv_zip_from_muzinzo.py

Cela générera les données sur le cours de l'action du jour en cours "Tyymmdd.csv" dans le répertoire opt.

Exécutez des scripts python régulièrement tous les jours

Mettez en commentaire les deux dernières lignes du Dockerfile précédent. C'est le paramètre pour cron pour exécuter le script exec_cmd.sh du lundi au vendredi à 20h00.

  ...
RUN echo '0 20 * * 1-5 root /root/opt/exec_cmd.sh' >> /etc/crontab
CMD ["cron", "-f"]
!/bin/bash
/usr/local/bin/python /root/opt/get_todays_csv_zip_from_muzinzo.py /root/opt >> /root/opt/exec_cmd.log 2>&1

N'oublie pas ça

$ chmod a+x exec_cmd.sh

Après avoir préparé jusqu'à ce point, démarrez-le sur le serveur permanent.

$ docker-compose up -d --build

Si vous acquérez non seulement les données de cours de bourse, mais que vous les stockez également dans la base de données, vous pouvez utiliser les dernières données de cours de bourse à tout moment, ce qui est très pratique.

L'environnement d'exécution de python et l'exécution programmée par cron sont rassemblés dans un conteneur et finis proprement.

Recommended Posts

Acquisition automatique des données de cours des actions avec docker-compose
Téléchargez les données de cours des actions japonaises avec Python
Acquisition de données chronologiques (quotidiennes) des cours des actions
Obtenez des données sur le cours de l'action avec l'API Quandl [Python]
Prévision du cours de l'action à l'aide du Deep Learning [acquisition de données]
Il y a un manque de données lors de l'acquisition de données sur le cours des actions avec Pandas-datareader
Obtenez des stocks avec Python
[Analyse du cours de l'action] Apprenez les pandas avec la moyenne Nikkei (004: Changer les données lues en moyenne Nikkei)
Acquisition automatique des données de niveau d'expression génique par python et R
[Analyse du cours de l'action] pandas apprenant avec des données fictives (001: préparation de l'environnement à la lecture de fichiers)
[Analyse du cours de l'action] Apprentissage des pandas avec des données fictives (003: De l'arrangement de type au graphique en chandelier)
Code d'acquisition de stock par grattage (Selenium)
Acquisition des données de croissance des plantes Acquisition des données des capteurs
Prévision de stock avec TensorFlow (LSTM) ~ Prévision de stock Partie 1 ~
Recommandation d'Altair! Visualisation des données avec Python
Exemple de traitement efficace des données avec PANDAS
Obtenez le cours de l'action d'une entreprise japonaise avec Python et faites un graphique
Convertissez les données avec la forme (nombre de données, 1) en (nombre de données,) avec numpy.
Fonctionnement automatique de Chrome avec Python + Sélénium + pandas
Synchroniser automatiquement le binaire du pilote Chrome avec Chrome
Sortie CSV des données d'impulsion avec Raspberry Pi (sortie CSV)
Voir les détails des données de séries chronologiques dans Remotte
Web scraping avec Python (cours de l'action)
Python / Clé basse automatique inadaptée aux données expérimentales
"Obtenir des données de séries chronologiques de stock à partir de k-db.com avec Python" Mémo de création d'environnement de programme
Prévision de stock avec TensorFlow (perceptron multicouche: MLP) ~ Prévision de stock 2 ~
Vue d'ensemble et astuces de Seaborn avec visualisation de données statistiques
Défiez l'analyse des composants principaux des données textuelles avec Python
[Bases de la science des données] Collecte de données depuis RSS avec python