Esempio n. 1
0
def DataDownloader():

    start, end = [2010, 1, 1], [2019, 4, 1]

    # keep the first row if duplicate company name
    companies = pd.read_csv("companylist.csv").drop_duplicates(subset='Name',
                                                               keep="first")
    companies = companies[companies.Sector == "Technology"]

    Symbols = [symbol.rstrip() for symbol in companies.Symbol]

    Stocks = Fetcher(
        Symbols[0], start,
        end).getHistorical().set_index("Date").rename_axis(None)[DATA]

    Stocks.index = pd.DatetimeIndex(Stocks.index)
    Stocks.columns = pd.MultiIndex.from_product([[Symbols[0]], Stocks.columns])

    for s in Symbols[1:]:

        df = Fetcher(
            s, start,
            end).getHistorical().set_index("Date").rename_axis(None)[DATA]

        df.index = pd.DatetimeIndex(df.index)
        df.columns = pd.MultiIndex.from_product([[s], df.columns])

        if df.index[0] <= datetime.datetime(2010, 1, 4):
            Stocks = pd.merge(
                Stocks, df,
                on=Stocks.index).set_index("key_0").rename_axis(None)

    Stocks.to_csv(os.getcwd() + "/Stocks.csv")
Esempio n. 2
0
def scrape_stock_price_f(stock_id, begin=begin_date, end=end_date):
    # 抓取股票資料
    stock_id = stock_id + ".TW"
    df_temp = Fetcher(stock_id, begin, end).getHistorical()
    #修正格式 ["dates","open","high","low","close","delta","volume"]
    df_temp.iloc[:, 5] = df_temp.iloc[:, 4].rolling(2).apply(
        lambda x: x.iloc[1] - x.iloc[0])
    df_temp.columns = [
        "dates", "open", "high", "low", "close", "delta", "volume"
    ]
    '==========================增加欄位===================================='
    #製作均線
    df_temp["5MA"] = df_temp["close"].rolling(5).mean()
    df_temp["10MA"] = df_temp["close"].rolling(10).mean()
    df_temp["20MA"] = df_temp["close"].rolling(20).mean()
    df_temp["60MA"] = df_temp["close"].rolling(60).mean()
    #RSV
    rsv =(df_temp['close']-df_temp['low'].rolling(window=9).min())/\
        (df_temp['high'].rolling(window=9).max()-\
        df_temp['low'].rolling(window=9).min())*100
    df_temp["rsv"] = pd.DataFrame(rsv).fillna(0)

    #製作KD線
    df_temp["k"], df_temp["d"] = KD_line(df_temp)
    #MACD
    df_temp = pd.concat([df_temp, macd(df_temp)], axis=1)
    #布林通道 (標準差的計算有問題)
    df_temp = pd.concat([df_temp, bl_tunnel(df_temp)], axis=1)
    # 增加股票代號
    return df_temp