-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstockprice.py
189 lines (162 loc) · 5.49 KB
/
stockprice.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 20 11:24:16 2018
@author: Sunao
"""
'''
株価データのプロット・CSVへの出力
'''
import datetime as dt
from pandas import DataFrame
import jsm
import pandas_datareader.data as web
import matplotlib.pyplot as plt
def jpstock(code, start_date, end_date):
year, month, day = start_date.split("-")
start = dt.date(int(year), int(month), int(day))
year, month, day = end_date.split("-")
end = dt.date(int(year), int(month), int(day))
print('CSVを出力中...')
q = jsm.Quotes()
target = q.get_historical_prices(code, jsm.DAILY, start_date=start, end_date=end)
date = [data.date for data in target]
open = [data.open for data in target]
high = [data.high for data in target]
low = [data.low for data in target]
close = [data.close for data in target]
volume = [data.volume for data in target]
adj_close = [data._adj_close for data in target]
Date = date[::-1]
Open = open[::-1]
High = high[::-1]
Low = low[::-1]
Close = close[::-1]
Adj = adj_close[::-1]
Vol = volume[::-1]
cdf = DataFrame(index=Date)
cdf.index.name = "Date"
cdf["Open"] = Open
cdf["High"] = High
cdf["Low"] = Low
cdf["Close"] = Close
cdf["Adj Close"] = Adj
cdf["Volume"] = Vol
cdf.to_csv(code + '.csv')
print(code + '.csvを出力しました.')
print('株価データをプロット中...')
df = DataFrame(index=Date)
df['Adj Close'] = Adj
return df
def usstock(ticker, start_date, end_date):
year, month, day = start_date.split("-")
start = dt.date(int(year), int(month), int(day))
year, month, day = end_date.split("-")
end = dt.date(int(year), int(month), int(day))
print('CSVを出力中...')
df2 = web.DataReader(ticker, 'yahoo', start, end)
df2.to_csv(ticker + '.csv')
print(ticker + '.csvを出力しました.')
print('株価データをプロット中...')
df3 = DataFrame(index=[])
df3['Adj Close'] = df2['Adj Close']
return df3
def brand():
print('業種コード一覧を表示します...')
lists = [
"'0050': 農林・水産業",
"'1050': 鉱業",
"'2050': 建設業",
"'3050': 食料品",
"'3100': 繊維製品",
"'3150': パルプ・紙",
"'3200': 化学",
"'3250': 医薬品",
"'3300': 石油・石炭製品",
"'3350': ゴム製品",
"'3400': ガラス・土石製品",
"'3450': 鉄鋼",
"'3500': 非鉄金属",
"'3550': 金属製品",
"'3600': 機械",
"'3650': 電気機器",
"'3700': 輸送機器",
"'3750': 精密機器",
"'3800': その他製品",
"'4050': 電気・ガス業",
"'5050': 陸運業",
"'5100': 海運業",
"'5150': 空運業",
"'5200': 倉庫・運輸関連業",
"'5250': 情報・通信",
"'6050': 卸売業",
"'6100': 小売業",
"'7050': 銀行業",
"'7100': 証券業",
"'7150': 保険業",
"'7200': その他金融業",
"'8050': 不動産業",
"'9050': サービス業"
]
for item in lists:
print(item)
gcode = input('業種コード? ')
print('リストファイルを出力中...')
q = jsm.Quotes()
target2 = q.get_brand(gcode)
ccode = [data.ccode for data in target2]
market = [data.market for data in target2]
name = [data.name for data in target2]
info = [data.info for data in target2]
df4 = DataFrame(index=ccode)
df4.index.name = "Code"
df4["Name"] = name
df4["Market"] = market
df4["Info"] = info
df4.to_csv(gcode + '.csv')
print(gcode + '.csvを出力しました.')
cont = str(input('引き続き個別銘柄のデータを取得する場合は「y」,やめる場合は「n」を入力 [y/n]: '))
if cont == 'n':
return None
else:
main()
def main():
country = str(input('日本株の場合は「ja」,そうでない場合は「us」を入力 [ja/us]: '))
if country == 'ja':
code = input('証券コード? ')
if str(code) == "search":
try:
brand()
except:
print('データの取得中にエラーが発生しました.')
main()
else:
start_date = input('取得期間の初めの日付を入力 [yyyy-mm-dd]: ')
end_date = input('取得期間の終わりの日付を入力 [yyyy-mm-dd]: ')
try:
jstock = jpstock(code, start_date, end_date)
jstock['Adj Close'].plot()
plt.show()
main()
except:
print('データの取得中にエラーが発生しました.')
main()
elif country == 'us':
ticker = input('Ticker Symbol?: ')
start_date = input('取得期間の初めの日付を入力 [yyyy-mm-dd]: ')
end_date = input('取得期間の終わりの日付を入力 [yyyy-mm-dd]: ')
try:
ustock = usstock(ticker, start_date, end_date)
ustock['Adj Close'].plot()
plt.show()
main()
except:
print('データの取得中にエラーが発生しました.')
main()
elif country == 'exit':
return
else:
print('[ja/us] を入力してください.')
main()
if __name__ == "__main__":
main()