In [1]:
#-*- coding: utf-8 -*-
import pandas as pd
import pandas_datareader.data as web
import datetime
In [2]:
def get_file_path(code):
return "../data/" + code
In [3]:
def download(code, year1, month1, day1, year2, month2, day2):
start = datetime.datetime(year1, month1, day1)
end = datetime.datetime(year2, month2, day2)
df = web.DataReader("%s.KS" % code, "yahoo", start, end)
df.to_pickle(get_file_path(code))
return df
In [4]:
def load(code):
df = pd.read_pickle(get_file_path(code))
return df
In [130]:
df = download("005930", 2016, 1, 1, 2016, 11, 15)
In [131]:
def Stochastic(m_Df, n=10, k=6, d=6): # price: 종가(시간 오름차순), n: 기간
sz = len(m_Df['Close'])
if sz >= n:
tempSto_K=[]
for i in range(sz):
if i >= n-1:
lows = m_Df['Low'][i-n:i]
highs = m_Df['High'][i-n:i]
if len(lows) and len(highs):
tempUp = m_Df['Close'][i] - min(lows)
tempDown = max(highs) - min(lows)
tempSto_K.append(tempUp / tempDown)
else:
tempSto_K.append(0)
else:
tempSto_K.append(0) #n보다 작은 초기값은 0 설정
m_Df['Sto_K'] = pd.Series(tempSto_K, index=m_Df.index) * 100
m_Df['Sto_D'] = pd.Series.rolling(m_Df['Sto_K'], center=False, window=k).mean()
m_Df['Sto_SlowD'] = pd.Series.rolling(m_Df['Sto_D'], center=False, window=d).mean()
return m_Df
In [133]:
Stochastic(df, 10, 6, 6)
Out[133]:
Open
High
Low
Close
Volume
Adj Close
Sto_K
Sto_D
Sto_SlowD
Date
2016-01-01
1260000.0
1260000.0
1260000.0
1260000.0
0
1259099.38
0.000000
NaN
NaN
2016-01-04
1260000.0
1260000.0
1205000.0
1205000.0
306900
1204138.69
0.000000
NaN
NaN
2016-01-05
1202000.0
1218000.0
1186000.0
1208000.0
216000
1207136.55
0.000000
NaN
NaN
2016-01-06
1208000.0
1208000.0
1168000.0
1175000.0
366700
1174160.13
0.000000
NaN
NaN
2016-01-07
1166000.0
1183000.0
1151000.0
1163000.0
282300
1162168.71
0.000000
NaN
NaN
2016-01-08
1163000.0
1186000.0
1163000.0
1171000.0
257700
1170162.99
0.000000
0.000000
NaN
2016-01-11
1156000.0
1166000.0
1146000.0
1152000.0
241200
1151176.57
0.000000
0.000000
NaN
2016-01-12
1148000.0
1166000.0
1144000.0
1146000.0
206200
1145180.86
0.000000
0.000000
NaN
2016-01-13
1153000.0
1159000.0
1148000.0
1148000.0
143300
1147179.43
0.000000
0.000000
NaN
2016-01-14
1131000.0
1142000.0
1131000.0
1138000.0
209000
1137186.58
0.000000
0.000000
NaN
2016-01-15
1140000.0
1152000.0
1124000.0
1132000.0
209400
1131190.87
0.775194
0.129199
0.021533
2016-01-18
1088000.0
1133000.0
1088000.0
1126000.0
320200
1125195.16
1.470588
0.374297
0.083916
2016-01-19
1128000.0
1171000.0
1128000.0
1171000.0
207200
1170162.99
63.846154
11.015323
1.919803
2016-01-20
1160000.0
1160000.0
1132000.0
1138000.0
167000
1137186.58
41.666667
17.959767
4.913098
2016-01-21
1133000.0
1155000.0
1125000.0
1131000.0
190300
1130191.59
43.877551
25.272692
9.125213
2016-01-22
1145000.0
1168000.0
1145000.0
1168000.0
147500
1167165.14
81.632653
38.878134
15.604902
2016-01-25
1172000.0
1176000.0
1156000.0
1162000.0
159900
1161169.43
89.156627
53.608373
24.518098
2016-01-26
1155000.0
1157000.0
1136000.0
1137000.0
152300
1136187.30
55.681818
62.643578
34.896311
2016-01-27
1126000.0
1175000.0
1126000.0
1175000.0
276200
1174160.13
98.863636
68.479825
44.473728
2016-01-28
1164000.0
1168000.0
1139000.0
1145000.0
315900
1144181.58
64.772727
72.330835
53.535573
2016-01-29
1140000.0
1150000.0
1116000.0
1150000.0
436900
1149178.00
70.454545
76.760334
62.116847
2016-02-01
1152000.0
1163000.0
1151000.0
1163000.0
259900
1162168.71
85.227273
77.359438
68.530397
2016-02-02
1161000.0
1166000.0
1147000.0
1156000.0
166300
1155173.72
66.666667
73.611111
71.864187
2016-02-03
1150000.0
1152000.0
1137000.0
1146000.0
174500
1145180.86
50.000000
72.664141
73.534281
2016-02-04
1150000.0
1161000.0
1148000.0
1156000.0
247900
1155173.72
66.666667
67.297980
73.337307
2016-02-05
1156000.0
1169000.0
1156000.0
1164000.0
188000
1163168.00
80.000000
69.835859
72.921477
2016-02-08
1164000.0
1164000.0
1164000.0
1164000.0
0
1163168.00
80.000000
71.426768
72.032549
2016-02-09
1164000.0
1164000.0
1164000.0
1164000.0
0
1163168.00
81.355932
70.781544
70.936234
2016-02-10
1164000.0
1164000.0
1164000.0
1164000.0
0
1163168.00
81.355932
73.229755
70.872674
2016-02-11
1118000.0
1137000.0
1118000.0
1130000.0
305200
1129192.30
26.415094
69.298938
70.311807
...
...
...
...
...
...
...
...
...
...
2016-10-04
1610000.0
1624000.0
1606000.0
1614000.0
261000
1614000.00
75.000000
57.878938
59.428277
2016-10-05
1601000.0
1626000.0
1597000.0
1619000.0
249400
1619000.00
79.629630
62.703054
58.847777
2016-10-06
1696000.0
1700000.0
1667000.0
1691000.0
591100
1691000.00
146.296296
81.237817
62.209978
2016-10-07
1700000.0
1716000.0
1690000.0
1706000.0
521000
1706000.00
103.592814
87.830771
66.819688
2016-10-10
1650000.0
1689000.0
1628000.0
1680000.0
505800
1680000.00
80.327869
90.838632
72.659707
2016-10-11
1600000.0
1625000.0
1545000.0
1545000.0
768500
1545000.00
6.557377
81.900664
77.064979
2016-10-12
1495000.0
1545000.0
1494000.0
1535000.0
781700
1535000.00
-5.847953
68.426005
78.822824
2016-10-13
1550000.0
1581000.0
1545000.0
1557000.0
437200
1557000.00
28.378378
59.884130
78.353003
2016-10-14
1548000.0
1588000.0
1547000.0
1577000.0
283100
1577000.00
37.387387
41.732645
71.768808
2016-10-17
1565000.0
1602000.0
1538000.0
1590000.0
255700
1590000.00
43.243243
31.674384
62.409410
2016-10-18
1572000.0
1595000.0
1572000.0
1589000.0
207600
1589000.00
42.792793
25.418538
51.506061
2016-10-19
1579000.0
1643000.0
1575000.0
1625000.0
308800
1625000.00
59.009009
34.160476
43.549363
2016-10-20
1626000.0
1651000.0
1609000.0
1620000.0
206600
1620000.00
56.756757
44.594595
39.577461
2016-10-21
1606000.0
1613000.0
1588000.0
1589000.0
209500
1589000.00
42.792793
46.996997
37.429606
2016-10-24
1593000.0
1608000.0
1590000.0
1608000.0
185700
1608000.00
58.461538
50.509356
38.892391
2016-10-25
1600000.0
1604000.0
1592000.0
1597000.0
197300
1597000.00
65.605096
54.236331
42.652715
2016-10-26
1597000.0
1599000.0
1562000.0
1567000.0
210600
1567000.00
46.496815
54.853668
47.558570
2016-10-27
1571000.0
1617000.0
1556000.0
1573000.0
282300
1573000.00
30.973451
50.181075
50.228670
2016-10-28
1580000.0
1614000.0
1580000.0
1614000.0
204200
1614000.00
67.256637
51.931055
51.451414
2016-10-31
1616000.0
1639000.0
1611000.0
1639000.0
241300
1639000.00
89.380531
59.695678
53.567860
2016-11-01
1630000.0
1652000.0
1612000.0
1652000.0
206900
1652000.00
101.052632
66.794194
56.282000
2016-11-02
1640000.0
1652000.0
1631000.0
1643000.0
201900
1643000.00
90.625000
70.964178
59.069975
2016-11-03
1630000.0
1640000.0
1606000.0
1616000.0
206800
1616000.00
62.500000
73.631375
62.199592
2016-11-04
1605000.0
1634000.0
1605000.0
1627000.0
142000
1627000.00
73.958333
80.795522
67.302000
2016-11-07
1647000.0
1650000.0
1634000.0
1640000.0
153200
1640000.00
87.500000
84.169416
72.675060
2016-11-08
1649000.0
1649000.0
1635000.0
1644000.0
108300
1644000.00
91.666667
84.550439
76.817521
2016-11-09
1646000.0
1657000.0
1591000.0
1596000.0
313600
1596000.00
41.666667
74.652778
78.127285
2016-11-10
1630000.0
1650000.0
1618000.0
1649000.0
235900
1649000.00
92.079208
74.895146
78.782446
2016-11-11
1585000.0
1618000.0
1585000.0
1598000.0
256700
1598000.00
23.376623
68.374583
77.906314
2016-11-14
1595000.0
1596000.0
1552000.0
1553000.0
302600
1553000.00
-44.444444
48.640787
72.547191
227 rows × 9 columns
In [ ]:
Content source: jongha/stock-ai
Similar notebooks: