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