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 [5]:
df = download("005930", 2016, 1, 1, 2016, 11, 15)

In [16]:
def MACD(m_DF, n1=12, n2=26, c=9): 
    m_DF['EMA_N1'] = pd.Series.ewm(m_DF['Close'], min_periods=n1, span=n1).mean()
    m_DF['EMA_N2'] = pd.Series.ewm(m_DF['Close'], min_periods=n2, span=n2).mean()
    m_DF['EMA_Signal'] = pd.Series.ewm(m_DF['Close'], min_periods=c, span=c).mean()    
    return m_DF

In [17]:
MACD(df)


Out[17]:
Open High Low Close Volume Adj Close EMA_N1 EMA_N2 EMA_Signal
Date
2016-01-01 1260000.0 1260000.0 1260000.0 1260000.0 0 1259099.38 NaN NaN NaN
2016-01-04 1260000.0 1260000.0 1205000.0 1205000.0 306900 1204138.69 NaN NaN NaN
2016-01-05 1202000.0 1218000.0 1186000.0 1208000.0 216000 1207136.55 NaN NaN NaN
2016-01-06 1208000.0 1208000.0 1168000.0 1175000.0 366700 1174160.13 NaN NaN NaN
2016-01-07 1166000.0 1183000.0 1151000.0 1163000.0 282300 1162168.71 NaN NaN NaN
2016-01-08 1163000.0 1186000.0 1163000.0 1171000.0 257700 1170162.99 NaN NaN NaN
2016-01-11 1156000.0 1166000.0 1146000.0 1152000.0 241200 1151176.57 NaN NaN NaN
2016-01-12 1148000.0 1166000.0 1144000.0 1146000.0 206200 1145180.86 NaN NaN NaN
2016-01-13 1153000.0 1159000.0 1148000.0 1148000.0 143300 1147179.43 NaN NaN 1.165141e+06
2016-01-14 1131000.0 1142000.0 1131000.0 1138000.0 209000 1137186.58 NaN NaN 1.159060e+06
2016-01-15 1140000.0 1152000.0 1124000.0 1132000.0 209400 1131190.87 NaN NaN 1.153139e+06
2016-01-18 1088000.0 1133000.0 1088000.0 1126000.0 320200 1125195.16 1.151574e+06 NaN 1.147311e+06
2016-01-19 1128000.0 1171000.0 1128000.0 1171000.0 207200 1170162.99 1.154947e+06 NaN 1.152324e+06
2016-01-20 1160000.0 1160000.0 1132000.0 1138000.0 167000 1137186.58 1.152062e+06 NaN 1.149328e+06
2016-01-21 1133000.0 1155000.0 1125000.0 1131000.0 190300 1130191.59 1.148533e+06 NaN 1.145528e+06
2016-01-22 1145000.0 1168000.0 1145000.0 1168000.0 147500 1167165.14 1.151750e+06 NaN 1.150153e+06
2016-01-25 1172000.0 1176000.0 1156000.0 1162000.0 159900 1161169.43 1.153425e+06 NaN 1.152577e+06
2016-01-26 1155000.0 1157000.0 1136000.0 1137000.0 152300 1136187.30 1.150767e+06 NaN 1.149404e+06
2016-01-27 1126000.0 1175000.0 1126000.0 1175000.0 276200 1174160.13 1.154658e+06 NaN 1.154598e+06
2016-01-28 1164000.0 1168000.0 1139000.0 1145000.0 315900 1144181.58 1.153117e+06 NaN 1.152656e+06
2016-01-29 1140000.0 1150000.0 1116000.0 1150000.0 436900 1149178.00 1.152623e+06 NaN 1.152120e+06
2016-02-01 1152000.0 1163000.0 1151000.0 1163000.0 259900 1162168.71 1.154261e+06 NaN 1.154312e+06
2016-02-02 1161000.0 1166000.0 1147000.0 1156000.0 166300 1155173.72 1.154534e+06 NaN 1.154652e+06
2016-02-03 1150000.0 1152000.0 1137000.0 1146000.0 174500 1145180.86 1.153197e+06 NaN 1.152913e+06
2016-02-04 1150000.0 1161000.0 1148000.0 1156000.0 247900 1155173.72 1.153635e+06 NaN 1.153533e+06
2016-02-05 1156000.0 1169000.0 1156000.0 1164000.0 188000 1163168.00 1.155251e+06 1.156157e+06 1.155633e+06
2016-02-08 1164000.0 1164000.0 1164000.0 1164000.0 0 1163168.00 1.156612e+06 1.156821e+06 1.157310e+06
2016-02-09 1164000.0 1164000.0 1164000.0 1164000.0 0 1163168.00 1.157759e+06 1.157422e+06 1.158651e+06
2016-02-10 1164000.0 1164000.0 1164000.0 1164000.0 0 1163168.00 1.158727e+06 1.157968e+06 1.159722e+06
2016-02-11 1118000.0 1137000.0 1118000.0 1130000.0 305200 1129192.30 1.154278e+06 1.155668e+06 1.153770e+06
... ... ... ... ... ... ... ... ... ...
2016-10-04 1610000.0 1624000.0 1606000.0 1614000.0 261000 1614000.00 1.587427e+06 1.582310e+06 1.590540e+06
2016-10-05 1601000.0 1626000.0 1597000.0 1619000.0 249400 1619000.00 1.592284e+06 1.585028e+06 1.596232e+06
2016-10-06 1696000.0 1700000.0 1667000.0 1691000.0 591100 1691000.00 1.607471e+06 1.592878e+06 1.615186e+06
2016-10-07 1700000.0 1716000.0 1690000.0 1706000.0 521000 1706000.00 1.622629e+06 1.601257e+06 1.633349e+06
2016-10-10 1650000.0 1689000.0 1628000.0 1680000.0 505800 1680000.00 1.631456e+06 1.607090e+06 1.642679e+06
2016-10-11 1600000.0 1625000.0 1545000.0 1545000.0 768500 1545000.00 1.618155e+06 1.602491e+06 1.623143e+06
2016-10-12 1495000.0 1545000.0 1494000.0 1535000.0 781700 1535000.00 1.605362e+06 1.597491e+06 1.605514e+06
2016-10-13 1550000.0 1581000.0 1545000.0 1557000.0 437200 1557000.00 1.597921e+06 1.594492e+06 1.595812e+06
2016-10-14 1548000.0 1588000.0 1547000.0 1577000.0 283100 1577000.00 1.594703e+06 1.593196e+06 1.592049e+06
2016-10-17 1565000.0 1602000.0 1538000.0 1590000.0 255700 1590000.00 1.593979e+06 1.592960e+06 1.591639e+06
2016-10-18 1572000.0 1595000.0 1572000.0 1589000.0 207600 1589000.00 1.593213e+06 1.592666e+06 1.591112e+06
2016-10-19 1579000.0 1643000.0 1575000.0 1625000.0 308800 1625000.00 1.598104e+06 1.595061e+06 1.597889e+06
2016-10-20 1626000.0 1651000.0 1609000.0 1620000.0 206600 1620000.00 1.601472e+06 1.596909e+06 1.602311e+06
2016-10-21 1606000.0 1613000.0 1588000.0 1589000.0 209500 1589000.00 1.599553e+06 1.596323e+06 1.599649e+06
2016-10-24 1593000.0 1608000.0 1590000.0 1608000.0 185700 1608000.00 1.600853e+06 1.597188e+06 1.601319e+06
2016-10-25 1600000.0 1604000.0 1592000.0 1597000.0 197300 1597000.00 1.600260e+06 1.597174e+06 1.600455e+06
2016-10-26 1597000.0 1599000.0 1562000.0 1567000.0 210600 1567000.00 1.595143e+06 1.594939e+06 1.593764e+06
2016-10-27 1571000.0 1617000.0 1556000.0 1573000.0 282300 1573000.00 1.591737e+06 1.593314e+06 1.589611e+06
2016-10-28 1580000.0 1614000.0 1580000.0 1614000.0 204200 1614000.00 1.595162e+06 1.594846e+06 1.594489e+06
2016-10-31 1616000.0 1639000.0 1611000.0 1639000.0 241300 1639000.00 1.601906e+06 1.598117e+06 1.603391e+06
2016-11-01 1630000.0 1652000.0 1612000.0 1652000.0 206900 1652000.00 1.609613e+06 1.602108e+06 1.613113e+06
2016-11-02 1640000.0 1652000.0 1631000.0 1643000.0 201900 1643000.00 1.614749e+06 1.605137e+06 1.619090e+06
2016-11-03 1630000.0 1640000.0 1606000.0 1616000.0 206800 1616000.00 1.614942e+06 1.605942e+06 1.618472e+06
2016-11-04 1605000.0 1634000.0 1605000.0 1627000.0 142000 1627000.00 1.616797e+06 1.607502e+06 1.620178e+06
2016-11-07 1647000.0 1650000.0 1634000.0 1640000.0 153200 1640000.00 1.620367e+06 1.609909e+06 1.624142e+06
2016-11-08 1649000.0 1649000.0 1635000.0 1644000.0 108300 1644000.00 1.624002e+06 1.612434e+06 1.628114e+06
2016-11-09 1646000.0 1657000.0 1591000.0 1596000.0 313600 1596000.00 1.619694e+06 1.611217e+06 1.621691e+06
2016-11-10 1630000.0 1650000.0 1618000.0 1649000.0 235900 1649000.00 1.624203e+06 1.614016e+06 1.627153e+06
2016-11-11 1585000.0 1618000.0 1585000.0 1598000.0 256700 1598000.00 1.620172e+06 1.612829e+06 1.621322e+06
2016-11-14 1595000.0 1596000.0 1552000.0 1553000.0 302600 1553000.00 1.609838e+06 1.608397e+06 1.607658e+06

227 rows × 9 columns


In [ ]: