pythonのScheduleモジュールで株価を自動スクレイピング する方法

今回は、pythonのScheduleモジュールを使ったら、スクレイイングが自動化できたよっていう話です。

 

 

Scheduleモジュールはスクレイピング のみならず、いろんな用途で使えるとても汎用性の高いモジュールです。ここで、私の使っている方法を備忘録として記録しておきます。

スポンサーリンク
スポンサーリンク

Scheduleモジュールを使ったサンプルコード

import subprocess
import schedule
import time
def trading_data_send():
    cmd1="python sell23-1.py"
    cmd2="python sell39.py"
    cmd3="python buy19.py"
    cmd4="python buy25.py"
    cmd5="python buy26.py"
    subprocess.call(cmd1.split())
    subprocess.call(cmd2.split())
    subprocess.call(cmd3.split())
    subprocess.call(cmd4.split())
    subprocess.call(cmd5.split())

schedule.every().day.at("20:48").do(trading_data_send)
while True:
    schedule.run_pending()
    time.sleep(1)

 

subprocessモジュールは、python上でシェルスクリプトのコマンドを動かせるモジュールです。pyファイルに実行処理をゴリゴリ書いてもいいのですが、シェルスクリプトのコマンド操作の方が簡単で、複数の処理を実行する時は管理もしやすいのでsubprocessモジュールを採用しています。

 

 

上の例だと、5つのpyファイルを実行します。ちなみにこの5つのファイルは、売買条件を書いているファイルです。空売り2つ、買い3つです。

 

 

subprocess.callにコマンドを書くと、そのコマンドを実行してくれます。コマンドは、1つ1つリスト化する必要があります。例えば、python sell39.pyのコマンドを実行するには、[‘python’,’sell39.py’]というリストをsubprocess.callに渡す必要があります。

 

 

いちいちリストにするのも面倒なので、split()メソッドを使います。split()メソッドは文字列をスペースやタブなどで分割してリストにしてくれるメソッドです。

 

 

schedule.every().day.at("20:48").do(trading_data_send)

ここからが本題。scheduleモジュールを使います。

 

最初に、どのタイミングで実行を処理するか指定します。上の例では、毎日20時48分に処理を実行するように設定しています。

 

詳しい設定条件は、以下のサイトに詳しく書かれています(英語だけど・・・)

上のサイトのサンプルコードを載せておきます。

import schedule
import time

def job():
    print("I'm working...")

#10分ごと
schedule.every(10).minutes.do(job)
#一時間ごと
schedule.every().hour.do(job)
#毎日10時30分に
schedule.every().day.at("10:30").do(job)
#5分〜10分の間隔で処理を実行
schedule.every(5).to(10).minutes.do(job)
#毎週月曜日に
schedule.every().monday.do(job)
#毎週月曜日13時15分に
schedule.every().wednesday.at("13:15").do(job)
#毎時17分に(間違ってるかも・・・)
schedule.every().minute.at(":17").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

schedule.every()でスケジュールをセットして、実際に実行するのが、次のWhile文。

 

While True:は無限ループ。schedule.run_pending()は処理の実行。time.sleep(1)は一秒待つ処理です。

 

何をしているかというと、一秒ごとにスケジュールの実行タイミングかどうかを確認し、実行タイミングになったら、処理を実行するってことをしています。

 

 

毎日20時48分に処理を実行する・・・という例だと、time.sleep(1)のところはtime.sleep(60)でもOKです。(秒単位の管理までもとめていないので)

 

 

このscheduleモジュールはシステムトレードにはかなり使えます。スクレイピング や売買銘柄情報のメール送信に応用すれば、作業の多くを自動化することができます。

レンタルサーバでscheduleモジュールを実行する

しかしscheduleモジュールは、PCをシャットダウンするとリセットされてしまいます。例えば、OSの更新でPCを再起動すると処理はリセットされます。

 

 

これだと色々と不都合なので、sheduleモジュールを使った自動処理に挑戦してみたい時はレンタルサーバ(VPS)を借りることを強くお勧めします。というかほぼ必須だと思います。VPSならPCの起動状況を気にせず、処理を完全オートにすることが可能。

 

 

VPSは色々とありますが、私はConoHaのVPSを使っています。

 

日本のVPSなら有名どころは3つ。

 

まずは、この辺からリサーチしてみると良いと思います。スクレイピング やメール送信ぐらいなら、処理速度を気しないので最安値のプランでOKConoHaさくらインターネットのVPSは月額600円代から利用が可能なので、初心者でもお試し利用しやすいです。

 

 

また、ConoHaお名前.com VPSはGMO系列なので、GMOインターネット株(9449)の株主優待を使えば、年間1万円分の利用料を割引くことも可能。株価の変動リスクを許容できるのなら、ConoHaお名前.com VPSを利用して株主優待を利用するのがVPS利用料の最安値となります。それどころかConoHaの最安値プランなら、年間でも利用料金が一万円に満たないので実質無料で使えるようになります。

 

 

VPS上でscheduleモジュールを動かして定例処理(スクレイピング )を自動化する。株価分析やシストレをするのなら、ぜひ活用したい手法です。(VPS上での処理には、ちょっとした工夫が必要になりますが、これも後に別の記事で整理しておきます。)

コメント