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")
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