{ "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", " | trade_date_daily | \n", "open | \n", "high | \n", "low | \n", "close | \n", "pre_close | \n", "change | \n", "pct_chg | \n", "vol | \n", "amount | \n", "trade_date_factor | \n", "adj_factor | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ts_code | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
| 000001.SZ | \n", "20251231 | \n", "11.48 | \n", "11.49 | \n", "11.40 | \n", "11.41 | \n", "11.48 | \n", "-0.07 | \n", "-0.6098 | \n", "590620.37 | \n", "675457.357 | \n", "20251231 | \n", "134.5794 | \n", "
| 000002.SZ | \n", "20251231 | \n", "4.66 | \n", "4.68 | \n", "4.62 | \n", "4.65 | \n", "4.62 | \n", "0.03 | \n", "0.6494 | \n", "1075561.25 | \n", "499883.113 | \n", "20251231 | \n", "181.7040 | \n", "
| 000004.SZ | \n", "20251231 | \n", "11.30 | \n", "11.35 | \n", "11.07 | \n", "11.08 | \n", "11.27 | \n", "-0.19 | \n", "-1.6859 | \n", "18056.00 | \n", "20248.567 | \n", "20251231 | \n", "4.0640 | \n", "
| 000006.SZ | \n", "20251231 | \n", "9.95 | \n", "10.03 | \n", "9.69 | \n", "9.95 | \n", "9.86 | \n", "0.09 | \n", "0.9128 | \n", "270369.08 | \n", "267758.676 | \n", "20251231 | \n", "39.7400 | \n", "
| 000007.SZ | \n", "20251231 | \n", "11.72 | \n", "11.75 | \n", "11.28 | \n", "11.44 | \n", "11.62 | \n", "-0.18 | \n", "-1.5491 | \n", "80556.00 | \n", "92109.366 | \n", "20251231 | \n", "8.2840 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 920978.BJ | \n", "20251231 | \n", "37.64 | \n", "38.39 | \n", "36.88 | \n", "36.90 | \n", "37.78 | \n", "-0.88 | \n", "-2.3293 | \n", "33945.04 | \n", "126954.937 | \n", "20251231 | \n", "1.2885 | \n", "
| 920981.BJ | \n", "20251231 | \n", "32.20 | \n", "32.29 | \n", "31.75 | \n", "31.96 | \n", "32.07 | \n", "-0.11 | \n", "-0.3430 | \n", "8237.16 | \n", "26301.206 | \n", "20251231 | \n", "1.4343 | \n", "
| 920982.BJ | \n", "20251231 | \n", "233.00 | \n", "238.49 | \n", "232.10 | \n", "233.70 | \n", "234.80 | \n", "-1.10 | \n", "-0.4685 | \n", "5210.09 | \n", "122452.646 | \n", "20251231 | \n", "4.2831 | \n", "
| 920985.BJ | \n", "20251231 | \n", "7.32 | \n", "7.35 | \n", "7.17 | \n", "7.19 | \n", "7.30 | \n", "-0.11 | \n", "-1.5068 | \n", "35174.30 | \n", "25350.257 | \n", "20251231 | \n", "1.6280 | \n", "
| 920992.BJ | \n", "20251231 | \n", "17.33 | \n", "17.60 | \n", "17.29 | \n", "17.39 | \n", "17.38 | \n", "0.01 | \n", "0.0575 | \n", "6991.87 | \n", "12193.445 | \n", "20251231 | \n", "1.4932 | \n", "
5458 rows × 12 columns
\n", "