はじめに
昨年は新型コロナウイルス拡大により,相場(株価)の上げ下げが激しい1年となりました.
昨年11月18日のファイザーがワクチン開発に成功したことを発端に,2020年末までに日経平均株価は約30年ぶりとなる高値を更新し続けました.
足元では業績拡大期待が先行して株価と足元の利益が乖離しつつあります.
イギリスではコロナ変異種が感染拡大によりロンドンで3回目都市封鎖が実行されました.さらに,日本でも緊急事態宣言が再び検討されるなど,現在でも国内および世界でも感染拡大が広がっている状況です.
したがって,新型コロナウイルスの影響により,今後も激しい株価の上げ下げが予想されます.
本記事では,今後も激しい株価の上げ下げが予想されることを踏まえて,
激しい価格変動を利用して,どの銘柄が短期的に稼げるかについて調査しました.
株価値動きの大きさの指標
株価の1日の値動きの幅の大きさを表した指標としてボラティリティがあります.この指標は主に個別株の短期トレードをするときに使用します.
ボラティリティ$(%)$は,
\frac{当日のトゥルー・レンジ{\rm TR}}{当日のティピカル・プライス{\rm TP}} \times 100 \ (\%)
で計算することができます.
分母のティピカル・プライスTPは高値,安値,終値の3つの平均値です.
分子のトゥルー・レンジTRは次の3つのうち値が最大のものを使用します(${\rm TR}=\max(t_1, t_2, t_3)$).
t_1 = 当日の高値-当日の安値
t_2 = 当日の高値-前日の終値
t_3 = 前日の終値-当日の安値
ボラティリティが5%以上であれば比較的ボラティリティが高いといえます.株価が低い銘柄では値幅が小さくてもボラティリティーが高くなってしまうことがあります.また,株価の変動幅を表していると同時に,リスクを示しています.あくまでも値動きの変動幅が分かるだけなので,実際に売買をするときは,他の指標も同時にみて判断する必要があります.
分析結果
※ 詳しい分析の方法は記事下の付録(Pythonプログラム)を参照してください.データを取得方法,分析方法もすべて説明してあります.
1株1千円以下の価格変動が大きい銘柄を選定していきます.
そのために,まず以下の条件に合致する銘柄を選別します.選定する際,株価の時系列データ,出来高データは,2020年1月5日から過去90日分を使用しました.
【銘柄選定基準】
・東京証券取引所に上場している
・1日の平均出来高50万株以上
・1日の平均終値50円以上1千円以下
「1日の平均出来高50万株以上」という条件は,出来高が少ない銘柄だと取引が成立しにくいので,ある程度出来高が多い銘柄を選別するためのものです.「1日の平均終値50円以上1千円以下」の「50円以上」は,株価が低い銘柄では値幅が小さくてもボラティリティーが高くなってしまうことがあるので,「50円以上」と設定しました.
この条件で銘柄を選定した結果,242件の該当する銘柄がありました.その中で,ボラティリティが高い10銘柄を下の表にまとめてみました.
順位 | 証券コード | 銘柄名 | 平均ボラティリティ(%) | 平均終値(円) | 平均出来高(株) |
---|---|---|---|---|---|
1 | 9878 | セキド | 10.8 | 700.6 | 573921 |
2 | 5337 | ダントーホールディングス | 9.9 | 502.7 | 2699480 |
3 | 6400 | 不二精機 | 9.2 | 529.5 | 2886709 |
4 | 1757 | クレアホールディングス | 8.9 | 70.6 | 5968157 |
5 | 5952 | アマテイ | 8.7 | 172.6 | 3114188 |
6 | 6659 | メディアリンクス | 8.3 | 487.0 | 1453528 |
7 | 3645 | メディカルネット | 8.2 | 747.3 | 798739 |
8 | 2586 | フルッタフルッタ | 7.9 | 191.5 | 1508418 |
9 | 2191 | テラ | 7.6 | 769.2 | 2084927 |
10 | 3071 | ストリーム | 7.6 | 140.0 | 1470286 |
- 1位.セキド(9878)の4か月間のチャート
ワクチン開発以降,株価は徐々に上昇し,ワクチン開発以前と比べて,一時2倍以上になっていますね.
特色:祖業の家電店から撤退しファッションが柱。オークファンと提携、ECや催事、卸の育成に軸足 Yahoo!JAPANファイナンス
- 2位.ダントーホールディングス(5337)の4か月間のチャート
最近では出来高が小さいので,活発な取引は行われていないようですね...
特色:内外装タイル老舗。16年に販売、製造、投資3事業統合、本業再建中。不動産マネジメント事業も Yahoo!JAPANファイナンス
- 3位.不二精機(6400)の4か月間のチャート
取引が活発に行われるようになってから,4倍以上の株価となっています.
特色:精密金型から出発、成形品受託が主体。2輪・4輪車部品中心に幅広く展開。中国、東南アに工場 Yahoo!JAPANファイナンス
おわりに
新型コロナウイルスの影響で,今後も激しい株価の上げ下げが予想されます.
このとき,投資資金の一部をボラティリティが高い銘柄に短期的に投資することで,投資のパフォーマンスを上げられる可能性があります.
それを踏まえて,1株1千円以下つまり10万円以内ぐらいで買える銘柄のうちで,どの銘柄が短期的に稼げるかについて調べてみました.
1位から10位までを上のリストにまとめましたが,ひょっとすると上のリストの中に2倍以上になる銘柄がふくまれているかもしれません.
ボラティリティをうまく使いこなせば,より良い投資パフォーマンス出すための助けになります.ただ,その分損をする可能性もあるので,ほかの指標も用いて銘柄を見極めていきましょう.
以下は今回までに株式や暗号資産について検証した記事の一覧です.もし興味ある方は見て頂けると嬉しく思います.
<過去記事> ・[日経225全銘柄の投資効率を検証](https://qiita.com/MandT500/items/f4aaafa0de824dab92c2) ・[日経平均株価の30%は5銘柄で決まることを投資先選びに生かせるか?](https://qiita.com/MandT500/items/2a1ae0d62118250ed01e) ・[日経平均株価が上がった次の日に上がる銘柄を見つけたい](https://qiita.com/MandT500/items/55c73b9d46aa39083d1c) ・[散投資でリスク回避の仕方【2銘柄編】](https://qiita.com/MandT500/items/594d5a860d21acdd3cf3) ・[【時間アノマリー】1日の中で最も株価が上がる/下がる時間帯](https://qiita.com/MandT500/items/fa906acc11b405e53c52) ・[投資商品を分散しリスクを最小化する【3銘柄編】](https://qiita.com/MandT500/items/292d6f5482fe0209cf3f) ・[日経平均株価が上がった5分後に上がる銘柄を見つけたい](https://qiita.com/MandT500/items/7c76030c9a67d1172608) ・[どの暗号資産が効率よく稼げるか](https://qiita.com/MandT500/items/53c2ff8f48592429effc)付録(分析方法:Pythonプログラム)
- 株銘柄リストを作成する
まずは,「東証上場銘柄一覧」を参考にして,株銘柄のリストを作成します.
東証上場銘柄一覧 - 東京証券取引所で,「東証上場銘柄一覧(2020年11月末)」のエクセルファイルをダウンロードします(2021/01/05現在).
ダウンロードしたファイル名はdata_j.xls
になっていると思います.
これをエクセルで開いて,「名前を付けて保存」で,CSV形式で新しく保存します.このときファイル名はdata_j.csv
としてください.ファイルはプログラムを保存する予定のフォルダの中にいれてください.
日付,コード,銘柄名,市場・商品区分,33業種コード,33業種区分,17業種コード,17業種区分,規模コード,規模区分
20201130,1301,極洋,市場第一部(内国株),50,水産・農林業,1,食品 ,7,TOPIX Small 2
20201130,1305,ダイワ上場投信-トピックス,ETF・ETN,-,-,-,-,-,-
20201130,1306,NEXT FUNDS TOPIX連動型上場投信,ETF・ETN,-,-,-,-,-,-
...
20201130,9996,サトー商会,JASDAQ(スタンダード・内国株),6050,卸売業,13,商社・卸売 ,-,-
20201130,9997,ベルーナ,市場第一部(内国株),6100,小売業,14,小売 ,6,TOPIX Small 1
この操作は以下で紹介するPythonプログラムがファイルをCSV形式で読み込むようになっているからです.
Pythonのpandasモジュールでも,エクセルファイル.xls
は読み込めるので,この操作が煩わしい方は,直接エクセルファイルを読み込めるようにプログラムを変更してみてください.
- フォルダを作成する
プログラムを保存する予定のフォルダの中に,「data」という名前のフォルダを作成してください.このフォルダの中に各銘柄の株価データなどを保存していきます.
- 株価データを取得する
銘柄リストdata_j.csv
を基にして,Yahoo!ファイナンスから株価データを取得していきます.株価データは「data」フォルダの中に保存されます.
以下のプログラムを実行すると各銘柄の株価が取得できます.全部で4千銘柄以上あり,2015年から現在までの株価を取得するので,かなり時間がかかります.取得に時間がかかる場合は,取得期間を変更してみるとよいかもしれません.
タイムエラーなどで一部の銘柄のデータ取得に失敗ことがあるので,数回実行してみてください.すでにデータ取得している銘柄は,スキップして実行されるようになっています.
import glob
import pandas_datareader.data as web
import pandas as pd
# 東証全銘柄取得
def get_tokyo():
tokyo = pd.read_csv("data_j.csv", engine="python", names=("date","code", "name","market", "CodeIndustry33", "ClassificationIndustry33", "CodeIndustry17", "ClassificationIndustry17", "CodeScale", "ClassificationScale"), skiprows=1, usecols=[1,2], encoding="utf-8")
return tokyo
# 株価取得
def get_price_csv(stock_name,start=None,end=None):
data = web.DataReader(stock_name,"yahoo",start,end)
data.to_csv("./data/"+stock_name+".csv")
list_tokyo = get_tokyo()
list_file_exist = glob.glob("./data/*")
for code in list_tokyo.code:
filename = './data\\'+str(code)+'.T.csv'
if filename in list_file_exist:
pass
else:
print(code, 'GET... ', end='')
try:
get_price_csv(str(code)+'.T', start='2015-1-1')
print('SUCCESS')
except Exception as e:
print('FAIL:', e)
実行結果
1432 GET... FAIL: No data fetched for symbol 1432.T using YahooDailyReader
1440 GET... FAIL: No data fetched for symbol 1440.T using YahooDailyReader
25935 GET... FAIL: No data fetched for symbol 25935.T using YahooDailyReader
3456 GET... FAIL: No data fetched for symbol 3456.T using YahooDailyReader
3483 GET... FAIL: No data fetched for symbol 3483.T using YahooDailyReader
6695 GET... FAIL: No data fetched for symbol 6695.T using YahooDailyReader
6945 GET... FAIL: No data fetched for symbol 6945.T using YahooDailyReader
7693 GET... FAIL: No data fetched for symbol 7693.T using YahooDailyReader
7790 GET... FAIL: No data fetched for symbol 7790.T using YahooDailyReader
9388 GET... FAIL: No data fetched for symbol 9388.T using YahooDailyReader
9437 GET... FAIL: No data fetched for symbol 9437.T using YahooDailyReader
以上のような表示が出ればYahoo! ファイナンスから取得できる時系列データはすべて取得することができています.
data_j.csv
に上場廃止した銘柄などが含まれているので,No data fetched for symbol 9437.T using YahooDailyReader
というエラーが起きます.9437
はNTTドコモの証券コードですが,2020年12月25日に上場廃止したので,Yahoo! ファイナンスからも取得できなくなっています.data_j.csv
は2020年11月末時点のリストを使用したのでこのようなことが起きています.
- 各銘柄のボラティリティを計算する
全銘柄のボラティリティの平均や出来高の平均などを計算します.
その後,【銘柄選定基準】を満たす銘柄を選びます.
【銘柄選定基準】
・東京証券取引所に上場している
・1日の平均出来高50万株以上
・1日の平均終値50円以上1千円以下
最後に,【銘柄選定基準】を満たした銘柄をボラティリティが高い順に並べ替え,その結果をresult.csv
というCSVファイルに保存します.
import pandas as pd
import glob
def get_tokyo():
tokyo = pd.read_csv("data_j.csv", engine="python", names=("date","code", "name","market", "CodeIndustry33", "ClassificationIndustry33", "CodeIndustry17", "ClassificationIndustry17", "CodeScale", "ClassificationScale"), skiprows=1, usecols=[1,2], encoding="utf-8")
return tokyo
# 各銘柄のファイル名をリストに保存
list_file_exist = glob.glob("./data/*.csv")
# データフレーム作成
df_result = pd.DataFrame(columns=['Name','AveVolatility','StdVolatility','AveClose','AveVol'])
# 東証上場企業のコード,銘柄名
list_tokyo = get_tokyo()
# 各銘柄のボラティリティを計算
for filename in list_file_exist:
# csvファイル読み込み,最新90日分
df = pd.read_csv(filename, usecols=[0,1,2,3,4,5])[-91:-1]
# トゥルー・レンジ,ティピカル・プライス
df_TR = pd.concat([df['High']-df['Low'],df['High']-df['Close'],df['Close']-df['Low']], axis=1).max(axis=1)
df_TP = pd.concat([df['High'],df['Low'],df['Close']], axis=1).mean(axis=1)
# ボラティリティを計算
df_volatility = df_TR/df_TP*100
# 結果を表示
#print(pd.concat([df,df_TR,df_TP,df_volatility], axis=1))
# ボラティリティの平均,標準偏差,終値の平均,出来高平均
df_var_volatility = df_volatility.describe()['std']
df_ave_volatility = df_volatility.describe()['mean']
df_ave_close = df['Close'].describe()['mean']
df_ave_vol = df['Volume'].describe()['mean']
# 結果をデータフレームに追加
df_result.loc[filename[7:-6]] \
= [list(list_tokyo[list_tokyo.code==int(filename[7:-6])].name)[0].replace('\uff0d', '-'),df_ave_volatility, df_var_volatility, df_ave_close, df_ave_vol]
# 平均出来高10万株以上の銘柄に限定
df_result_vol100000 = df_result[(df_result['AveVol']>=500000)&(df_result['AveClose']<=1000)&(df_result['AveClose']>=50)]
print(df_result_vol100000.sort_values('AveVolatility', ascending=False))
# 結果を出力, エクセルなどで開くにはshift_jis保存
df_result_vol100000.sort_values('AveVolatility', ascending=False).to_csv('result.csv', encoding="shift-jis")
以下はanalysis_volatility.py
を実行すると出力される結果のファイルです.
,Name,AveVolatility,StdVolatility,AveClose,AveVol
9878,セキド,10.809049789076301,7.314944329411106,700.6222222222223,573921.1111111111
5337,ダントーホールディングス,9.92851091994063,5.829129218840265,502.6666666666667,2699480.0
6400,不二精機,9.232563647851181,7.672251177037584,529.4888888888889,2886708.888888889
1757,クレアホールディングス,8.889975863776952,7.016323356057786,70.56666666666666,5968156.666666667
5952,アマテイ,8.686544778591992,7.34355369522554,172.5888888888889,3114187.777777778
6659,メディアリンクス,8.254688076596251,5.6874328079605885,486.9555555555556,1453527.7777777778
3645,メディカルネット,8.223274540256988,4.850665328679253,747.3,798738.8888888889
2586,フルッタフルッタ,7.912068446987964,7.29850462904478,191.46666666666667,1508417.7777777778
2191,テラ,7.6447258931396584,4.669643170906718,769.2333333333333,2084926.6666666667
3071,ストリーム,7.585819866804538,4.527170396284742,140.04444444444445,1470285.5555555555
5950,日本パワーファスニング,7.446253747895412,7.0779071007236425,130.16666666666666,1637843.3333333333
4772,ストリームメディアコーポレーション,7.40040609365142,4.485065376345073,319.1,869971.1111111111
7625,グローバルダイニング,7.314423734014114,7.072805004359223,190.6888888888889,1005386.6666666666
2459,アウンコンサルティング,7.278918564082975,6.233558919862727,233.4111111111111,652956.6666666666
3909,ショーケース,7.070315411038762,4.199331323446159,894.6888888888889,626668.8888888889
7608,エスケイジャパン,6.917702918007265,6.282340278985323,418.74444444444447,666320.0
3776,ブロードバンドタワー,6.822772043330271,4.151829727326367,383.7111111111111,6908035.555555556
3264,アスコット,6.757181195267253,4.057884357817521,219.27777777777777,1141836.6666666667
6181,タメニー,6.682391492378576,4.773359432557025,187.17777777777778,1400831.111111111
7448,ジーンズメイト,6.599137804949079,6.763328689586605,274.74444444444447,780083.3333333334
3556,リネットジャパングループ,6.574738312165315,4.017277288743839,576.7111111111111,550920.0
6779,日本電波工業,6.535959574856966,4.692920736222049,457.7888888888889,655442.2222222222
...
2768,双日,1.7286240106385853,0.6413982014908903,237.5222222222222,5425306.666666667
9508,九州電力,1.7224171026624042,0.6751134425152434,922.9555555555555,1161698.888888889
8601,大和証券グループ本社,1.6910960304616955,0.8788866774373107,462.2066667344835,4492950.0
6178,日本郵政,1.6550971289374474,0.6455812899662257,766.626666937934,5703288.888888889
8355,静岡銀行,1.6505290019625318,0.792098756434268,746.7666666666667,1464793.3333333333
7182,ゆうちょ銀行,1.612183745456123,0.6859743481317608,848.5888888888888,2572678.888888889
5020,ENEOSホールディングス,1.5173205855293537,0.6202105245263454,379.30999959309895,16662358.888888888
8628,松井証券,1.5071163588276981,0.6693067820926953,890.8111111111111,673733.3333333334
8306,三菱UFJフィナンシャル・グループ,1.499832308077275,0.6679667878012966,440.46333279079863,55239340.0
1671,WTI原油価格連動型上場投信,1.1440880131986952,0.7287071846639852,864.4333333333333,2514501.388888889