直近の株価取得
using JSON, DataFrames, Dates
function getstockprice(stock, range="1d", interval="1m")
# URLの作成
url = yahoofinurl(stock, range, interval)
# データ取得・JSON->DataFrameへ変換
str = read(download(url), String) # urlからjson文字列の取得
json = JSON.parse(str) # json文字列をパースしてDict型に変換
df = stockjson2df(json) # JSONからDataFrameに変換
end
stock = "4689.T"
price = getstockprice(stock)
これで株価がDataFrameとしてprice変数に取得できます.
アラートの送信
アラートはメールで送信することとします.前回ご紹介しましたが,Juliaでメールを送るにはSMTPClient.jlを使います.上下限値を指定しておき,それを超過あるいは下回ったら,フラグを立ててメール送信します.
# 上下限値超過を検知して,フラグとメッセージを作成
function checkboundspair(prices, upperlimit, lowerlimit)
alflag = false
dtfmt = "YYYY/mm/dd HH:MM:SS"
# 株価の上下限を検出
if ( sum(prices."close" .> upperlimit) > 0 )
alflag = true
maxprice = string( round(maximum(prices."close"), digits=1) )
title = "上限超過(" * maxprice * ")"
dt = prices[argmax(prices."close"), "timestamp"]
message = "株価が上限を超過しました.\r\n" *
"上限値: " * string(upperlimit) * "\r\n" *
"時刻: " * Dates.format(dt, dtfmt) * "\r\n" *
"株価: " * maxprice * "\r\n"
elseif ( sum(prices."close" .< lowerlimit) > 0 )
alflag = true
minprice = string( round(minimum(prices."close"), digits=1) )
title = "下限未満(" * minprice * ")"
dt = prices[argmin(prices."close"), "timestamp"]
message = "株価が下限を下回りました.\r\n" *
"下限値: " * string(lowerlimit) * "\r\n" *
"時刻: " * Dates.format(dt, dtfmt) * "\r\n" *
"株価: " * minprice * "\r\n"
end
return (alflag, title, message)
end
# 上下限値チェックして,フラグが立っていたらメールを送信する
(alflag, title, message) = checkboundspair(price, 650, 630)if (alflag)sendmail("【株価アラート】" * stock * " : " * title, stock * "の" * message)end
定期実行
上記のプログラムを定期的に実行するように設定します.平日9:00に起動して,一定間隔で株価をチェックし,15:00に終了するようにしましょう.
あまり頻繁に取得をかけるとIPアドレスでブロックされるようなので,取得間隔は10分くらいとしておきます.
一定間隔で実行する方法として,JuliaではBase.Timerを使う方法などがありますが,今回はシンプルにsleep()を使います.9:00の起動には,Windowsのタスクスケジューラを使います.起動コマンドをスクリプト化して登録します.
あまり頻繁に取得をかけるとIPアドレスでブロックされるようなので,取得間隔は10分くらいとしておきます.
一定間隔で実行する方法として,JuliaではBase.Timerを使う方法などがありますが,今回はシンプルにsleep()を使います.9:00の起動には,Windowsのタスクスケジューラを使います.起動コマンドをスクリプト化して登録します.
stock = "4689.T"
while(true)
price = getstockprice(stock)
(alflag, title, message) = checkboundspair(price, 650, 630)
if (alflag)
sendmail("【株価アラート】" * stock * " : " * title, stock * "の" * message)
break
end
# 現在時刻が15:00を過ぎたらstop
dt = Dates.now()
if (hour(dt) >= 15)
break
end
sleep(600) # 10分待機
end
rem GetStockPrices.cmd
> cd C:\Julia\株価
> julia GetStockPrices.jl
これでアラートをかけられるようになりました.
checkboundspair()を変更すれば様々なアラートパターンに対応できます.