def run_daily(exchange, date, symbol): symbol = symbol.upper() if not date: # 美股时间差一天 day = datetime.datetime.now() - datetime.timedelta(days=1) day = day.replace(hour=0, minute=0, second=0, microsecond=0) date = int(day.strftime("%Y%m%d")) else: day = datetime.datetime.strptime(str(date), "%Y%m%d") if day.weekday() in (5, 6): ytrack.fail('%s is not open day' % date) ynotice.send(ytrack.get_logs(), style='stock', title=u'%s-%s-K线图更新' % (get_day_date(day), exchange)) return def my_update_someday_data(df, date, save_table): sql = "delete from %s where date = %s" % (save_table, date) ytrack.success("execute: %s" % sql) try: engine.execute(sql) except: ytrack.fail(traceback.format_exc()) else: ytrack.success(u"%s删除数据成功" % save_table) try: df.to_sql(save_table, engine, if_exists='append', index=True, index_label='code') except: ytrack.fail(traceback.format_exc()) else: ytrack.success(u"%s 成功更新 %s 条记录." % (save_table, df.shape[0])) ytrack.success("start run_daily(date=%s, exchange=%s, symbol=%s)" % (date, exchange, symbol)) table1 = "%s_ohlc_daily" % exchange df1 = _update_ohlc_daily(day, symbol, table1, exchange) if df1 is not None: my_update_someday_data(df1, get_day_date(day), table1) else: ytrack.success(u"%s 需要更新的数据为空" % table1) table2 = '%s_ohlc_weekly' % exchange df2 = _update_ohlc_weekly(date, symbol, table2) if df2 is not None: my_update_someday_data(df2, get_week_date(day), table2) else: ytrack.success(u"%s 需要更新的数据为空" % table2) table3 = '%s_ohlc_monthly' % exchange df3 = _update_ohlc_monthly(date, symbol, table3) if df3 is not None: my_update_someday_data(df3, get_month_date(day), table3) else: ytrack.success(u"%s 需要更新的数据为空" % table3) macd_cols = ['date'] + ['ma%s' % i for i in range(5, 251, 5)] df4 = _update_macd_daily(date, symbol, table1) if df4 is not None: df4 = df4[macd_cols] my_update_someday_data(df4, get_day_date(day), '%s_macd_daily' % exchange) else: ytrack.success(u"%s_macd_daily 需要更新的数据为空" % exchange) df5 = _update_macd_weekly(date, symbol, table2) if df5 is not None: df5 = df5[macd_cols] my_update_someday_data(df5, get_week_date(day), '%s_macd_weekly' % exchange) else: ytrack.success(u"%s_macd_weekly 需要更新的数据为空" % exchange) df6 = _update_macd_monthly(date, symbol, table3) if df6 is not None: df6 = df6[macd_cols] my_update_someday_data(df6, get_month_date(day), '%s_macd_monthly' % exchange) else: ytrack.success(u"%s_macd_monthly 需要更新的数据为空" % exchange) ynotice.send(ytrack.get_logs(), style='stock', title=u'%s-%s-K线图更新' % (get_day_date(day), exchange))
df5 = _update_macd_weekly(date, symbol, table2) if df5 is not None: df5 = df5[macd_cols] my_update_someday_data(df5, get_week_date(day), '%s_macd_weekly' % exchange) else: ytrack.success(u"%s_macd_weekly 需要更新的数据为空" % exchange) df6 = _update_macd_monthly(date, symbol, table3) if df6 is not None: df6 = df6[macd_cols] my_update_someday_data(df6, get_month_date(day), '%s_macd_monthly' % exchange) else: ytrack.success(u"%s_macd_monthly 需要更新的数据为空" % exchange) ynotice.send(ytrack.get_logs(), style='stock', title=u'%s-%s-K线图更新' % (get_day_date(day), exchange)) if __name__ == "__main__": try: run_daily() except Exception as e: ytrack.error(traceback.format_exc()) ynotice.send(ytrack.get_logs(), style='stock', title=u'us run daily error.')
def run_daily_investing(date, curr_id, n): if not date: # 由于数据更新日期不统一,默认取三天前数据 assert n >= 0, '默认参数n=%s必须大于等于0' day = datetime.datetime.now() - datetime.timedelta(days=n) day = day.replace(hour=0, minute=0, second=0, microsecond=0) date = int(day.strftime("%Y%m%d")) else: day = datetime.datetime.strptime(str(date), "%Y%m%d") def my_update_someday_data(df, date, save_table): sql = "delete from %s where date = %s" % (save_table, date) ytrack.success("execute: %s" % sql) try: engine.execute(sql) except: ytrack.fail(traceback.format_exc()) else: ytrack.success("%s删除数据成功" % save_table) try: df.to_sql(save_table, engine, if_exists='append', index=True, index_label='code') except: ytrack.fail(traceback.format_exc()) else: ytrack.success("%s 成功更新 %s 条记录." % (save_table, df.shape[0])) ytrack.success("start run_daily_investing(date=%s, curr_id=%s)" % (date, curr_id)) df1 = _update_ohlc_daily(day, curr_id, 'investing_ohlc_daily') if df1 is not None: my_update_someday_data(df1, get_day_date(day), "investing_ohlc_daily") else: ytrack.success("investing_ohlc_daily 需要更新的数据为空") df2 = _update_ohlc_weekly(date, curr_id, 'investing_ohlc_weekly') if df2 is not None: my_update_someday_data(df2, get_week_date(day), 'investing_ohlc_weekly') else: ytrack.success("investing_ohlc_weekly 需要更新的数据为空") df3 = _update_ohlc_monthly(date, curr_id, 'investing_ohlc_monthly') if df3 is not None: my_update_someday_data(df3, get_month_date(day), 'investing_ohlc_monthly') else: ytrack.success("investing_ohlc_monthly 需要更新的数据为空") macd_cols = ['date'] + ['ma%s' % i for i in range(5, 251, 5)] df4 = _update_macd_daily(date, curr_id, 'investing_ohlc_daily') if df4 is not None: df4 = df4[macd_cols] my_update_someday_data(df4, get_day_date(day), 'investing_macd_daily') else: ytrack.success("investing_macd_daily 需要更新的数据为空") df5 = _update_macd_weekly(date, curr_id, 'investing_ohlc_weekly') if df5 is not None: df5 = df5[macd_cols] my_update_someday_data(df5, get_week_date(day), 'investing_macd_weekly') else: ytrack.success("investing_macd_weekly 需要更新的数据为空") df6 = _update_macd_monthly(date, curr_id, 'investing_ohlc_monthly') if df6 is not None: df6 = df6[macd_cols] my_update_someday_data(df6, get_month_date(day), 'investing_macd_monthly') else: ytrack.success("investing_macd_monthly 需要更新的数据为空") ynotice.send(ytrack.get_logs(), style='stock', title='%s-investing-K线图更新' % get_day_date(day))
def stocks(): d = datetime.datetime.now().strftime("%Y%m%d") get_data('nasdaq') get_data('nyse') get_data('amex') ynotice.send(ytrack.get_logs(), style='stock', title='%s美股列表更新成功' % d)
def run_daily_hs_indexs(date, code, save): if not date: day = datetime.datetime.now() date = int(day.strftime("%Y%m%d")) else: day = datetime.datetime.strptime(str(date), "%Y%m%d") if is_open_day(day): ytrack.fail("%s is not Open.." % date) ynotice.send(ytrack.get_logs(), style='error', title='%s-不是交易日' % get_day_date(day)) return def my_update_someday_data(df, date, save_table): sql = "delete from %s where date = %s" % (save_table, date) ytrack.success("execute: %s" % sql) try: engine.execute(sql) except: ytrack.fail(traceback.format_exc()) else: ytrack.success("%s删除数据成功" % save_table) try: df.to_sql(save_table, engine, if_exists='append', index=True, index_label='code') except: ytrack.fail(traceback.format_exc()) else: ytrack.success("%s 成功更新 %s 条记录." % (save_table, df.shape[0])) ytrack.success("start run_daily_hs_indexs(date=%s, code=%s, save=%s)" % (date, code, save)) df1 = _update_ohlc_daily(date, code, 'hs_indexs_ohlc_daily') if df1 is not None: my_update_someday_data(df1, get_day_date(day), "hs_indexs_ohlc_daily") else: ytrack.success("hs_indexs_ohlc_daily 需要更新的数据为空") df2 = _update_ohlc_weekly(date, code, 'hs_indexs_ohlc_weekly') if df2 is not None: my_update_someday_data(df2, get_week_date(day), 'hs_indexs_ohlc_weekly') else: ytrack.success("hs_indexs_ohlc_weekly 需要更新的数据为空") df3 = _update_ohlc_monthly(date, code, 'hs_indexs_ohlc_monthly') if df3 is not None: my_update_someday_data(df3, get_month_date(day), 'hs_indexs_ohlc_monthly') else: ytrack.success("hs_indexs_ohlc_monthly 需要更新的数据为空") macd_cols = ['date'] + ['ma%s' % i for i in range(5, 251, 5)] df4 = _update_macd_daily(date, code, 'hs_indexs_ohlc_daily') if df4 is not None: df4 = df4[macd_cols] my_update_someday_data(df4, get_day_date(day), 'hs_indexs_macd_daily') else: ytrack.success("hs_indexs_macd_daily 需要更新的数据为空") df5 = _update_macd_weekly(date, code, 'hs_indexs_ohlc_weekly') if df5 is not None: df5 = df5[macd_cols] my_update_someday_data(df5, get_week_date(day), 'hs_indexs_macd_weekly') else: ytrack.success("hs_indexs_macd_weekly 需要更新的数据为空") df6 = _update_macd_monthly(date, code, 'hs_indexs_ohlc_monthly') if df6 is not None: df6 = df6[macd_cols] my_update_someday_data(df6, get_month_date(day), 'hs_indexs_macd_monthly') else: ytrack.success("hs_indexs_macd_monthly 需要更新的数据为空") ynotice.send(ytrack.get_logs(), style='stock', title='%s-沪深指数K线图更新' % get_day_date(day))
def update_stock_info(): trade_cal(True) for _ in range(5): try: time.sleep(0.1) df = ts.get_stock_basics() fle = os.path.join(CURDIR, 'stock.basics.csv') df.to_csv(fle, encoding="utf-8") df = df.set_index(df.index.astype(int)) df.to_sql('stock_list', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update 股票列表 save to sql') time.sleep(0.1) df = ts.get_today_all() fle = os.path.join(CURDIR, 'stock.today.csv') df.to_csv(fle, encoding="utf-8") df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_today', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update stock_today') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_industry_classified() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_industry', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update 股票行业 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) # ytrack.info('成功 股票基本信息 from network..') # ynotice.send(ytrack.get_logs(), style='stock', title='更新股票基础数据和交易日期') # return for _ in range(5): try: time.sleep(0.1) df = ts.get_concept_classified() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_concept', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update 股票概念 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_area_classified() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_area', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update 股票地域 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_sme_classified() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_sme', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update 中小板股票 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_gem_classified() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_gem', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update 创业板股票 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_st_classified() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_st', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update st股票 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_hs300s() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_hs300', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update hs300股票 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_sz50s() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_sz50s', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update sz50s股票 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_zz500s() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_zz500s', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update zz500s股票 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) ytrack.info('成功 股票基本信息 from network..') ynotice.send(ytrack.get_logs(), style='stock', title='更新股票基础数据和交易日期')