diff --git a/HTS_Downloader.py b/HTS_Downloader.py index ac928b3..10ad77b 100644 --- a/HTS_Downloader.py +++ b/HTS_Downloader.py @@ -20,52 +20,52 @@ if __name__ == "__main__": # KODEX 인버스 * 2 stocks = [ - {"stock_code": "252670", "stock_name": "KODEX 200선물인버스2X", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "122630", "stock_name": "KODEX 레버리지", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "305720", "stock_name": "KODEX 2차전지산업", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "102780", "stock_name": "KODEX 삼성그룹", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "139260", "stock_name": "TIGER 200 IT", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "091180", "stock_name": "KODEX 자동차", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "401470", "stock_name": "KODEX K-메타버스액티브", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "329200", "stock_name": "TIGER 리츠부동산인프라", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "091170", "stock_name": "KODEX 은행", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "091160", "stock_name": "KODEX 반도체", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "161510", "stock_name": "ARIRANG 고배당주", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "228800", "stock_name": "TIGER 여행레저", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "150460", "stock_name": "TIGER 중국소비테마", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "143860", "stock_name": "TIGER 헬스케어", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "228810", "stock_name": "TIGER 미디어컨텐츠", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "139220", "stock_name": "TIGER 200 건설", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "139280", "stock_name": "TIGER 경기방어", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "322400", "stock_name": "HANARO e커머스", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "157490", "stock_name": "TIGER 소프트웨어", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "228790", "stock_name": "TIGER 화장품", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "139230", "stock_name": "TIGER 200 중공업", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "396500", "stock_name": "TIGER Fn반도체TOP10", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "365000", "stock_name": "TIGER KRX인터넷K-뉴딜", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "102970", "stock_name": "KODEX 증권", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "117680", "stock_name": "KODEX 철강", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "244580", "stock_name": "KODEX 바이오", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "266360", "stock_name": "KODEX 미디어&엔터테인먼트", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "375770", "stock_name": "KODEX 탄소효율그린뉴딜", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "364990", "stock_name": "TIGER KRX게임K-뉴딜", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "388420", "stock_name": "KBSTAR 비메모리반도체액티브", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "117460", "stock_name": "KODEX 에너지화학", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "300950", "stock_name": "KODEX 게임산업", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "266410", "stock_name": "KODEX 필수소비재", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "140700", "stock_name": "KODEX 보험", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "139270", "stock_name": "TIGER 200 금융", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "395160", "stock_name": "KODEX Fn시스템반도체", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "140710", "stock_name": "KODEX 운송", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "139240", "stock_name": "TIGER 200 철강소재", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "395150", "stock_name": "KODEX Fn웹툰&드라마", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "307510", "stock_name": "TIGER 의료기기", "start_date": datetime.strptime("20231010", '%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "315270", "stock_name": "TIGER 200커뮤니케이션서비스", "start_date": datetime.strptime("20231010",'%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "132030", "stock_name": "KODEX 골드선물(H)", "start_date": datetime.strptime("20231010",'%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "144600", "stock_name": "KODEX 은선물(H)", "start_date": datetime.strptime("20231010",'%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "261220", "stock_name": "KODEX WTI원유선물(H)", "start_date": datetime.strptime("20231010",'%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "271050", "stock_name": "KODEX WTI원유선물인버스(H)", "start_date": datetime.strptime("20231010",'%Y%m%d'), "end_date": datetime.today()}, - {"stock_code": "138910", "stock_name": "KODEX 구리선물(H)", "start_date": datetime.strptime("20231010",'%Y%m%d'), "end_date": datetime.today()} + {"stock_code": "252670", "stock_name": "KODEX 200선물인버스2X", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "122630", "stock_name": "KODEX 레버리지", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "305720", "stock_name": "KODEX 2차전지산업", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "102780", "stock_name": "KODEX 삼성그룹", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "139260", "stock_name": "TIGER 200 IT", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "091180", "stock_name": "KODEX 자동차", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "401470", "stock_name": "KODEX K-메타버스액티브", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "329200", "stock_name": "TIGER 리츠부동산인프라", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "091170", "stock_name": "KODEX 은행", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "091160", "stock_name": "KODEX 반도체", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "161510", "stock_name": "ARIRANG 고배당주", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "228800", "stock_name": "TIGER 여행레저", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "150460", "stock_name": "TIGER 중국소비테마", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "143860", "stock_name": "TIGER 헬스케어", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "228810", "stock_name": "TIGER 미디어컨텐츠", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "139220", "stock_name": "TIGER 200 건설", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "139280", "stock_name": "TIGER 경기방어", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "322400", "stock_name": "HANARO e커머스", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "157490", "stock_name": "TIGER 소프트웨어", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "228790", "stock_name": "TIGER 화장품", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "139230", "stock_name": "TIGER 200 중공업", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "396500", "stock_name": "TIGER Fn반도체TOP10", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "365000", "stock_name": "TIGER KRX인터넷K-뉴딜", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "102970", "stock_name": "KODEX 증권", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "117680", "stock_name": "KODEX 철강", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "244580", "stock_name": "KODEX 바이오", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "266360", "stock_name": "KODEX 미디어&엔터테인먼트", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "375770", "stock_name": "KODEX 탄소효율그린뉴딜", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "364990", "stock_name": "TIGER KRX게임K-뉴딜", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "388420", "stock_name": "KBSTAR 비메모리반도체액티브", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "117460", "stock_name": "KODEX 에너지화학", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "300950", "stock_name": "KODEX 게임산업", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "266410", "stock_name": "KODEX 필수소비재", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "140700", "stock_name": "KODEX 보험", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "139270", "stock_name": "TIGER 200 금융", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "395160", "stock_name": "KODEX Fn시스템반도체", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "140710", "stock_name": "KODEX 운송", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "139240", "stock_name": "TIGER 200 철강소재", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "395150", "stock_name": "KODEX Fn웹툰&드라마", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "307510", "stock_name": "TIGER 의료기기", "start_date": datetime.strptime("20231011", '%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "315270", "stock_name": "TIGER 200커뮤니케이션서비스", "start_date": datetime.strptime("20231011",'%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "132030", "stock_name": "KODEX 골드선물(H)", "start_date": datetime.strptime("20231011",'%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "144600", "stock_name": "KODEX 은선물(H)", "start_date": datetime.strptime("20231011",'%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "261220", "stock_name": "KODEX WTI원유선물(H)", "start_date": datetime.strptime("20231011",'%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "271050", "stock_name": "KODEX WTI원유선물인버스(H)", "start_date": datetime.strptime("20231011",'%Y%m%d'), "end_date": datetime.today()}, + {"stock_code": "138910", "stock_name": "KODEX 구리선물(H)", "start_date": datetime.strptime("20231011",'%Y%m%d'), "end_date": datetime.today()} ] hts = HTS_Downloader(RESOURCE_PATH) @@ -76,7 +76,7 @@ if __name__ == "__main__": while True: print("insert...", stock["stock_code"], stock["stock_name"], this_day.strftime('%Y%m%d')) - hts.insertStockData(stock, this_day) + hts.insertStockData(this_day, stock["stock_code"], stock["stock_name"]) this_day = this_day + timedelta(days=1) if this_day > stock["end_date"]: break diff --git a/HTS_etf_122630.py b/HTS_etf_122630.py index bef8269..6a4b76c 100644 --- a/HTS_etf_122630.py +++ b/HTS_etf_122630.py @@ -203,6 +203,7 @@ if __name__ == "__main__": # KODEX 인버스 * 2 stock_code = "252670" + stock_name = "KODEX 레버리지" hts = HTS_etf(RESOURCE_PATH) hts.connect2DB("hts.db") @@ -211,7 +212,7 @@ if __name__ == "__main__": hts.buyRealTime(today_str, stock_code, analyzed_day=1000) db_filename = os.path.join(RESOURCE_PATH, "hts.db") - hts.insertStockData(stock_code, today) + hts.insertStockData(today, stock_code, stock_name) hts.disconnect() print("done...") \ No newline at end of file diff --git a/HTS_etf_252670.py b/HTS_etf_252670.py index 008001c..dadca80 100644 --- a/HTS_etf_252670.py +++ b/HTS_etf_252670.py @@ -204,6 +204,7 @@ if __name__ == "__main__": # KODEX 인버스 * 2 stock_code = "252670" + stock_name = "KODEX 200선물인버스2X" hts = HTS_etf(RESOURCE_PATH) hts.connect2DB("hts.db") @@ -212,7 +213,7 @@ if __name__ == "__main__": hts.buyRealTime(today_str, stock_code, analyzed_day=1000) db_filename = os.path.join(RESOURCE_PATH, "hts.db") - hts.insertStockData(stock_code, today) + hts.insertStockData(today, stock_code, stock_name) hts.disconnect() print("done...") \ No newline at end of file diff --git a/hts/HTS.py b/hts/HTS.py index 653fab0..123d4ed 100644 --- a/hts/HTS.py +++ b/hts/HTS.py @@ -463,7 +463,7 @@ class HTS: return data - def insertStockData(self, stock, this_day): + def insertStockData(self, this_day, stock_code, stock_name=''): # 테이블 생성 self.cursor.execute("CREATE TABLE IF NOT EXISTS hts (CODE text, NAME text, ymd text, hms text, close REAL, open REAL, high REAL, low REAL, volume REAL, label INTEGER DEFAULT 0)") @@ -472,7 +472,7 @@ class HTS: create_key = "CREATE INDEX IF NOT EXISTS hts_idx on hts(CODE, ymd, hms) " self.cursor.execute(create_key) - items = self.getStockInfo(stock["stock_code"], this_day.strftime('%Y%m%d')) + items = self.getStockInfo(stock_code, this_day.strftime('%Y%m%d')) for item in items: ymd = item[0] @@ -483,8 +483,8 @@ class HTS: close = item[5] volume = item[6] - self.cursor.execute('DELETE FROM hts WHERE CODE=? and ymd=? and hms=?', (stock["stock_code"], ymd, hms,)) - self.cursor.execute("INSERT INTO hts (CODE, NAME, ymd, hms, close, open, high, low, volume) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)", (stock["stock_code"], stock["stock_name"], ymd, hms, close, open, high, low, volume)) + self.cursor.execute('DELETE FROM hts WHERE CODE=? and ymd=? and hms=?', (stock_code, ymd, hms,)) + self.cursor.execute("INSERT INTO hts (CODE, NAME, ymd, hms, close, open, high, low, volume) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)", (stock_code, stock_name, ymd, hms, close, open, high, low, volume)) self.conn.commit() return