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