[PYTHON] Automatische Erfassung von Aktienkursdaten mit Docker-Compose

Einführung

Bei der Auswahl einer Aktie wird das auf der Website des Wertpapierunternehmens vorbereitete Tool verwendet, aber die Diagrammanzeige reicht aus, aber wenn Sie ein etwas anderes Screening durchführen möchten oder wenn Sie mit dem Backtesting-System handeln usw. Sie möchten Ihre eigenen Aktienkursdaten haben, oder?

Es gibt eine Website namens Unerschöpflich , die tägliche Aktienkursdaten japanischer Aktien veröffentlicht. Um die Aktienkursdaten selbst zu haben, werde ich versuchen, von hier aus jeden Tag zur festgelegten Zeit die Aktienkursliste des Tages abzurufen.

Ein Python-Skript, das Aktienkursdaten von einer unerschöpflichen Site abruft

Wenn beispielsweise die URL der Datenerfassung der unerschöpflichen Website die Aktienkursdaten von 2020/11/04 sind,

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

Beispiel eines Skripts, das die Aktienkursdaten des Tages erfasst und die Postleitzahl erweitert:

 -*- 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()

Anwendungsbeispiel:

$ python get_todays_csv_zip_from_muzinzo.py ~/tmp

Sie können das Download-Zielverzeichnis als Argument angeben. Wenn nicht angegeben, ist das Download-Ziel das aktuelle Verzeichnis.

Bitte beachten Sie, dass die Aktienkursdaten des Tages nach dem Abend auf der Website veröffentlicht werden. Mit anderen Worten, die Aktienkursdaten für den Tag können mit diesem Skript vom Abend des Tages bis Mitternacht abgerufen werden.

Führen Sie das Python-Skript mit Docker-Compose aus

Führen Sie als Sprungbrett für die geplante Ausführung von Python-Skripten Python-Skripte mit Docker-Compose aus.

docker-compose.yml und Dockerfile sind aus dem Folgenden ausgeliehen.

https://qiita.com/reflet/items/4b3f91661a54ec70a7dc Lassen Sie uns mit Docker ganz einfach eine Python3-Umgebung erstellen

Verzeichnisaufbau

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

Anlaufen

$ docker-compose up -d --build

Führen Sie das Python-Skript aus

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

Dadurch werden die Aktienkursdaten des aktuellen Tages "Tyymmdd.csv" im opt-Verzeichnis generiert.

Führen Sie jeden Tag regelmäßig Python-Skripte aus

Kommentieren Sie die letzten beiden Zeilen der vorherigen Docker-Datei aus. Dies ist die Einstellung, mit der cron das Skript exec_cmd.sh von Montag bis Freitag um 20:00 Uhr ausführt.

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

Vergiss das nicht

$ chmod a+x exec_cmd.sh

Nachdem Sie sich bis zu diesem Zeitpunkt vorbereitet haben, starten Sie es auf dem ständig aktiven Server.

$ docker-compose up -d --build

Wenn Sie die Aktienkursdaten nicht nur erfassen, sondern auch zusammen in der Datenbank speichern, können Sie jederzeit die neuesten Aktienkursdaten verwenden, was sehr praktisch ist.

Die Ausführungsumgebung von Python und die geplante Ausführung durch Cron werden in einem Container zusammengefasst und ordentlich beendet.

Recommended Posts

Automatische Erfassung von Aktienkursdaten mit Docker-Compose
Laden Sie japanische Aktienkursdaten mit Python herunter
Erfassung von Zeitreihendaten (täglich) von Aktienkursen
Holen Sie sich Aktienkursdaten mit Quandl API [Python]
Aktienkursprognose mit Deep Learning [Datenerfassung]
Bei der Erfassung von Aktienkursdaten mit Pandas-datareader fehlen Daten
Holen Sie sich Lager mit Python
[Aktienkursanalyse] Lernen Sie Pandas mit Nikkei-Durchschnitt (004: Ändern Sie die gelesenen Daten in Nikkei-Durchschnitt)
Automatische Erfassung von Genexpressionsdaten durch Python und R.
[Aktienkursanalyse] Pandas lernen mit fiktiven Daten (001: Vorbereitung der Umgebung auf das Lesen von Dateien)
[Aktienkursanalyse] Pandas mit fiktiven Daten lernen (003: Von der Typanordnung zum Candlestick-Chart)
Aktienerfassungscode durch Schaben (Selen)
Erfassung von Pflanzenwachstumsdaten Erfassung von Daten von Sensoren
Aktienprognose mit TensorFlow (LSTM) ~ Aktienprognose Teil 1 ~
Empfehlung von Altair! Datenvisualisierung mit Python
Beispiel für eine effiziente Datenverarbeitung mit PANDAS
Holen Sie sich mit Python den Aktienkurs eines japanischen Unternehmens und erstellen Sie eine Grafik
Konvertieren Sie Daten mit Form (Anzahl der Daten, 1) in (Anzahl der Daten,) mit numpy.
Automatischer Betrieb von Chrome mit Python + Selen + Pandas
Chrome-Treiber-Binärdatei automatisch mit Chrome synchronisieren
CSV-Ausgabe von Impulsdaten mit Raspberry Pi (CSV-Ausgabe)
Zeigen Sie Details zu Zeitreihendaten mit Remotte an
Web Scraping mit Python (Aktienkurs)
Python / Automatic Low Wrench, nicht für experimentelle Daten geeignet
"Abrufen von Zeitreihendaten von k-db.com mit Python" Memo zur Erstellung der Programmumgebung
Aktienkursprognose mit TensorFlow (mehrschichtiges Perceptron: MLP) ~ Aktienprognose 2 ~
Übersicht und Tipps von Seaborn mit statistischer Datenvisualisierung
Fordern Sie die Hauptkomponentenanalyse von Textdaten mit Python heraus
[Grundlagen der Datenwissenschaft] Sammeln von Daten aus RSS mit Python