{ "cells": [ { "metadata": { "ExecuteTime": { "end_time": "2026-01-30T05:41:51.291397Z", "start_time": "2026-01-30T04:34:22.917761Z" } }, "cell_type": "code", "source": [ "import urllib.parse\n", "\n", "import pandas as pd\n", "import sqlalchemy\n", "from sqlalchemy import text\n", "from sqlalchemy.orm import DeclarativeBase, Session\n", "\n", "postgresql_engin = sqlalchemy.create_engine(\n", " f\"postgresql://leopard:{urllib.parse.quote_plus(\"9NEzFzovnddf@PyEP?e*AYAWnCyd7UhYwQK$pJf>7?ccFiN^x4$eKEZ5~E<7<+~X\")}@81.71.3.24:6785/leopard\"\n", ")\n", "sqlite_engine = sqlalchemy.create_engine(f\"sqlite:////Users/lanyuanxiaoyao/Documents/leopard_data/leopard.sqlite\")\n", "\n", "\n", "class Base(DeclarativeBase):\n", " pass\n", "\n", "\n", "class Daily(Base):\n", " __tablename__ = 'daily'\n", "\n", " code = sqlalchemy.Column(sqlalchemy.String, primary_key=True)\n", " trade_date = sqlalchemy.Column(sqlalchemy.Date, primary_key=True)\n", " open = sqlalchemy.Column(sqlalchemy.Double)\n", " close = sqlalchemy.Column(sqlalchemy.Double)\n", " high = sqlalchemy.Column(sqlalchemy.Double)\n", " low = sqlalchemy.Column(sqlalchemy.Double)\n", " previous_close = sqlalchemy.Column(sqlalchemy.Double)\n", " turnover = sqlalchemy.Column(sqlalchemy.Double)\n", " volume = sqlalchemy.Column(sqlalchemy.Integer)\n", " price_change_amount = sqlalchemy.Column(sqlalchemy.Double)\n", " factor = sqlalchemy.Column(sqlalchemy.Double)\n", "\n", "\n", "try:\n", " with Session(postgresql_engin) as pg_session:\n", " results = pg_session.execute(text(\"select distinct trade_date from leopard_daily\")).fetchall()\n", " results = list(map(lambda x: x[0].strftime(\"%Y-%m-%d\"), results))\n", " dates = [results[i: i + 30] for i in range(0, len(results), 30)]\n", "\n", " for index, date in enumerate(dates):\n", " print(date)\n", " daily_df = pd.read_sql(\n", " f\"\"\"\n", " select code,\n", " trade_date,\n", " open,\n", " close,\n", " high,\n", " low,\n", " previous_close,\n", " turnover,\n", " volume,\n", " price_change_amount,\n", " factor\n", " from leopard_daily d\n", " left join leopard_stock s on d.stock_id = s.id\n", " where d.trade_date in ('{\"','\".join(date)}')\n", " \"\"\",\n", " postgresql_engin\n", " )\n", " with Session(sqlite_engine) as session:\n", " rows = []\n", " for _, row in daily_df.iterrows():\n", " rows.append(\n", " Daily(\n", " code=row[\"code\"],\n", " trade_date=row[\"trade_date\"],\n", " open=row[\"open\"],\n", " close=row[\"close\"],\n", " high=row[\"high\"],\n", " low=row[\"low\"],\n", " previous_close=row[\"previous_close\"],\n", " turnover=row[\"turnover\"],\n", " volume=row[\"volume\"],\n", " price_change_amount=row[\"price_change_amount\"],\n", " factor=row[\"factor\"]\n", " )\n", " )\n", " session.add_all(rows)\n", " session.commit()\n", "finally:\n", " postgresql_engin.dispose()\n", " sqlite_engine.dispose()" ], "id": "48821306efc640a1", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['2025-12-25', '2025-12-26', '2025-12-29', '2025-12-30', '2025-12-31', '2026-01-05', '2026-01-06', '2026-01-07', '2026-01-08', '2026-01-09']\n" ] } ], "execution_count": 22 }, { "metadata": { "ExecuteTime": { "end_time": "2026-01-30T09:24:09.859231Z", "start_time": "2026-01-30T09:24:09.746912Z" } }, "cell_type": "code", "source": [ "import tushare as ts\n", "\n", "pro = ts.pro_api(\"64ebff4fa679167600b905ee45dd88e76f3963c0ff39157f3f085f0e\")\n", "# stocks = pro.stock_basic(ts_code=\"600200.SH\", list_status=\"D\", fields=\"ts_code,name,fullname,market,exchange,industry,list_date,delist_date\")\n", "# stocks" ], "id": "ed58a1faaf2cdb8e", "outputs": [], "execution_count": 34 }, { "metadata": { "ExecuteTime": { "end_time": "2026-01-30T07:14:29.897120Z", "start_time": "2026-01-30T07:14:29.664124Z" } }, "cell_type": "code", "source": "# stocks.to_csv(\"dlist.csv\")", "id": "3c8c0a38d6b2992e", "outputs": [], "execution_count": 24 }, { "metadata": { "ExecuteTime": { "end_time": "2026-01-30T09:46:34.808300Z", "start_time": "2026-01-30T09:46:34.129412Z" } }, "cell_type": "code", "source": [ "daily_df = pro.daily(trade_date=\"20251231\")\n", "daily_df.set_index(\"ts_code\", inplace=True)\n", "factor_df = pro.adj_factor(trade_date=\"20251231\")\n", "factor_df.set_index(\"ts_code\", inplace=True)" ], "id": "c052a945869aa329", "outputs": [], "execution_count": 50 }, { "metadata": { "ExecuteTime": { "end_time": "2026-01-30T09:46:36.697015Z", "start_time": "2026-01-30T09:46:36.642975Z" } }, "cell_type": "code", "source": [ "result_df = daily_df.join(factor_df, lsuffix=\"_daily\", rsuffix=\"_factor\", how=\"left\")\n", "result_df\n", "# factor_df" ], "id": "d61ee80d2cd9f06b", "outputs": [ { "data": { "text/plain": [ " trade_date_daily open high low close pre_close change \\\n", "ts_code \n", "000001.SZ 20251231 11.48 11.49 11.40 11.41 11.48 -0.07 \n", "000002.SZ 20251231 4.66 4.68 4.62 4.65 4.62 0.03 \n", "000004.SZ 20251231 11.30 11.35 11.07 11.08 11.27 -0.19 \n", "000006.SZ 20251231 9.95 10.03 9.69 9.95 9.86 0.09 \n", "000007.SZ 20251231 11.72 11.75 11.28 11.44 11.62 -0.18 \n", "... ... ... ... ... ... ... ... \n", "920978.BJ 20251231 37.64 38.39 36.88 36.90 37.78 -0.88 \n", "920981.BJ 20251231 32.20 32.29 31.75 31.96 32.07 -0.11 \n", "920982.BJ 20251231 233.00 238.49 232.10 233.70 234.80 -1.10 \n", "920985.BJ 20251231 7.32 7.35 7.17 7.19 7.30 -0.11 \n", "920992.BJ 20251231 17.33 17.60 17.29 17.39 17.38 0.01 \n", "\n", " pct_chg vol amount trade_date_factor adj_factor \n", "ts_code \n", "000001.SZ -0.6098 590620.37 675457.357 20251231 134.5794 \n", "000002.SZ 0.6494 1075561.25 499883.113 20251231 181.7040 \n", "000004.SZ -1.6859 18056.00 20248.567 20251231 4.0640 \n", "000006.SZ 0.9128 270369.08 267758.676 20251231 39.7400 \n", "000007.SZ -1.5491 80556.00 92109.366 20251231 8.2840 \n", "... ... ... ... ... ... \n", "920978.BJ -2.3293 33945.04 126954.937 20251231 1.2885 \n", "920981.BJ -0.3430 8237.16 26301.206 20251231 1.4343 \n", "920982.BJ -0.4685 5210.09 122452.646 20251231 4.2831 \n", "920985.BJ -1.5068 35174.30 25350.257 20251231 1.6280 \n", "920992.BJ 0.0575 6991.87 12193.445 20251231 1.4932 \n", "\n", "[5458 rows x 12 columns]" ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
trade_date_dailyopenhighlowclosepre_closechangepct_chgvolamounttrade_date_factoradj_factor
ts_code
000001.SZ2025123111.4811.4911.4011.4111.48-0.07-0.6098590620.37675457.35720251231134.5794
000002.SZ202512314.664.684.624.654.620.030.64941075561.25499883.11320251231181.7040
000004.SZ2025123111.3011.3511.0711.0811.27-0.19-1.685918056.0020248.567202512314.0640
000006.SZ202512319.9510.039.699.959.860.090.9128270369.08267758.6762025123139.7400
000007.SZ2025123111.7211.7511.2811.4411.62-0.18-1.549180556.0092109.366202512318.2840
.......................................
920978.BJ2025123137.6438.3936.8836.9037.78-0.88-2.329333945.04126954.937202512311.2885
920981.BJ2025123132.2032.2931.7531.9632.07-0.11-0.34308237.1626301.206202512311.4343
920982.BJ20251231233.00238.49232.10233.70234.80-1.10-0.46855210.09122452.646202512314.2831
920985.BJ202512317.327.357.177.197.30-0.11-1.506835174.3025350.257202512311.6280
920992.BJ2025123117.3317.6017.2917.3917.380.010.05756991.8712193.445202512311.4932
\n", "

5458 rows × 12 columns

\n", "
" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 51 } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }