ぽんずは日経先物・OPでなかなか勝てない⑥番外編(株価スクレイピング・銘柄選定)
お久しぶりです。ぽんずです。
最近は色んな検証を行っていたのですが、なかなか良い結果を得られず腐りかけていました。そんな中、オプションに拘らなくてもいいんじゃね?って気持ちが出てきたので株でデイトレするbotについて検討してみます。
また、この記事は有料にしていますが、売るほどの情報はないので全部読めます。
この頃、承認欲求にも飢えているので閲覧数やいいねが増えるともっといろんなことを記事で書く気になるのでよろしくお願いいたします。(?)
銘柄選定のために最初に考えたこと
どんな銘柄がデイトレしやすいか。。。と思ったときに、急騰急落があった銘柄かなと考えました。
そのような銘柄の翌日は
(押し目を作りながらか)そのまま続騰する
元に戻る(前日以上に下に行く)
下落時は、その逆に動く
このようなことが容易に予想されます。
ただ、毎日全銘柄確認するのも大変なのでそのあたりを自動通知するようにしたいと思います。ちなみに東証に上場している銘柄数は約4150程度になります。(思ったより少なかった)
銘柄コード取得
ではまず、東証上場企業の銘柄コードを全て取得したいと思います。
方法としては、
①手入力
②プログラムを組む
③猫に手を借りる
こんなところでしょうか。
今回は②でいきます。ぶっちゃけ、トータルにかかった時間は①と時間変わらなかったかも
今回もpythonを使っていきます。
ライブラリとしてはrakuten_rssをダウンロードしました。(GithubのURL埋め込んでます)
あとは楽天証券のMSとRSS(青いやつと赤いやつ)を使います。
最近はMS2を使ってる人が多い中、古いものを使います。
これの良いところは
rss("証券コード+.T", "取得したい項目")
これだけでデータを取れます。.Tは東証の意味みたいです。
残念な所は取得項目が少ないことです。
私が確認しているのは下記になります。
銘柄名称
現在日付
更新時刻
現在値
現在値ティック
前日比
前日比率
前日終値
前日日付
始値
高値
安値
年初来高値
年初来安値
上場来高値
上場来安値
上場来高値日付
上場来安値日付
もし他にも取得できるものあったら教えてください。
では、取得したい項目はtxt形式で保存しとくと後から楽になります。
こんな感じで大丈夫です。
ので、取得した際のコード載せますね。
毎回どれぐらい時間かかってるか気になってるのでtimeで測定してます。
from rakuten_rss import rss,rss_dict,fetch_open
import pandas as pd
import time
import csv
start = time.time()
# ファイルパス
file_path = "rakuten_rss-master/取得項目.txt"
# ファイルオープン
with open(file_path, "r", encoding="utf-8") as f:
# リストとして読み込む(改行コードなし)
list = f.read().splitlines()
print(list[4])
code=[]
for i in range(1000,10000):
num=str(i)+".T"
try:
a=rss(num, list[3])
if float(a)>0:
print(num)
code.append(num)
except:
pass
process_time = time.time() - start
print(process_time)
csv_path = "rakuten_rss-master/number.csv"
df = pd.DataFrame(code)
df.to_csv(csv_path, index=False)
先ほどの取得項目についてはrakuten_rssのフォルダに入れてください。
また、pythonファイルも一緒に入れてあげてください。
取得項目はlist化していつでも簡単に呼び出せるようにしています。
銘柄コードを取得するにあたって、4桁なのはわかりますがそれ以外に情報がない状態なのでfor文で1000から10000までぶん回します。
銘柄コードが正しいかどうかは、現在値(時間によっては終値)を取得することで判別を行っています。
if文で正しい場合のみ、銘柄コードをcodeという箱の中にぶち込みます。
大体、20分かからずに終わると思います。
銘柄選定
銘柄コード取得が完了したので次は銘柄を選んでいきたいと思います。
ヤフーファイナンスからのスクレイピングになるためサーバーに負荷をかけることになるため、たくさんやっちゃだめですね。禁止事項だ!と書いてる人もいたため、自己責任でお願いします。
今回はyfinanceを使います。
では、参考コードから。
import yfinance as yf
start=2024-03-01
end=2024-03-013
df = pdr.get_data_yahoo("銘柄コード.T",start,end)
これで、startからendまでの期間の日足データを下画像のように取得できます。
ここからがおおまかに私が使ったコードです。
全コピーではないのでどうぞ悪しからず。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import yfinance as yf
from pandas_datareader import data as pdr
import seaborn as sns
import datetime
import time
sns.set()
startq = time.time()
list = open("rakuten_rss-master/number.csv", 'r', encoding='UTF-8')
today = datetime.date.today()
start=today-datetime.timedelta(days=10)
end=today
yf.pdr_override()
df = pd.DataFrame()
up=[]
down=[]
for i in list:
try:
code = i
df = pdr.get_data_yahoo(code,start=start,end=end)
num=len(df["Open"])-1
Highave=df["High"].mean()
Lowave=df["Low"].mean()
if Highave<close:
up.append(i)
elif Lowave>close:
down.append(i)
else:
pass
except:
time.sleep(5)
next
csv_path = r"rakuten_rss-master/up.csv"
df1 = pd.DataFrame(up)
df1.to_csv(csv_path, index=False)
print(up)
csv_path = r"rakuten_rss-master/down.csv"
df2 = pd.DataFrame(down)
df2.to_csv(csv_path, index=False)
print(down)
process_time = time.time() - startq
print(str(process_time))
私は本日から10日前までのデータを取得しています。
そして、先ほど取得した銘柄コードのcsvファイルを使っていきます。
そうすれば、全銘柄チェックできますね。
では少し解説していきます。
今回の選定に条件は先ほど話した通り、急騰・急落です。
所謂、レンジブレイクの形なので、終値が高値・低値の平均値を超えた時を判定したいと思います。
ちなみに今日急騰判断した銘柄は"2353.T","2563.T","4613.T","6047.T"でした。
まぁ悪くないかな?ほぼ値動きない銘柄もありますが、6047に関しては特にデイトレできたかなと。
完成しちゃった
どの銘柄でデイトレするかはさておき、候補をある程度絞ってくれるのは良いかもしれないです。
後はデイトレ取引をする部分を作らねば。。。
あまりネタバレするのもあれなので、今回はここまでにします。
ちなみに、この銘柄一覧をXでツイートしてほしいとかありますか?
LINEには送ってくれるのでXにもするのは簡単なんですが。
まぁ、そんなに大変ではないので自分で作ってみてもいいかもしれないですね。
今回のオチ
初めてコードをまともに載せるの緊張感ぱないのぉ(忍野忍/CV:坂本真綾)
今回も3000文字越えか。。。たくさんがんばった、自分えらいぞ。
最初にも書いたんですけど、NOTE代はご厚意で大丈夫です。
もし、銘柄候補を出せたおかげで稼ぎやすくなった!とか、プログラミングコードに感謝!とかあったら貧乏な私に恵んでください。笑
今後もこんな感じの稼ぐための日記のように書いていこうかなと思います。
では、また。
ここから先は
¥ 300
この記事が気に入ったらサポートをしてみませんか?