1
0
Files
leopard-analysis/notebook/datasource/data_old.ipynb

456 lines
16 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>trade_date_daily</th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" <th>pre_close</th>\n",
" <th>change</th>\n",
" <th>pct_chg</th>\n",
" <th>vol</th>\n",
" <th>amount</th>\n",
" <th>trade_date_factor</th>\n",
" <th>adj_factor</th>\n",
" </tr>\n",
" <tr>\n",
" <th>ts_code</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>000001.SZ</th>\n",
" <td>20251231</td>\n",
" <td>11.48</td>\n",
" <td>11.49</td>\n",
" <td>11.40</td>\n",
" <td>11.41</td>\n",
" <td>11.48</td>\n",
" <td>-0.07</td>\n",
" <td>-0.6098</td>\n",
" <td>590620.37</td>\n",
" <td>675457.357</td>\n",
" <td>20251231</td>\n",
" <td>134.5794</td>\n",
" </tr>\n",
" <tr>\n",
" <th>000002.SZ</th>\n",
" <td>20251231</td>\n",
" <td>4.66</td>\n",
" <td>4.68</td>\n",
" <td>4.62</td>\n",
" <td>4.65</td>\n",
" <td>4.62</td>\n",
" <td>0.03</td>\n",
" <td>0.6494</td>\n",
" <td>1075561.25</td>\n",
" <td>499883.113</td>\n",
" <td>20251231</td>\n",
" <td>181.7040</td>\n",
" </tr>\n",
" <tr>\n",
" <th>000004.SZ</th>\n",
" <td>20251231</td>\n",
" <td>11.30</td>\n",
" <td>11.35</td>\n",
" <td>11.07</td>\n",
" <td>11.08</td>\n",
" <td>11.27</td>\n",
" <td>-0.19</td>\n",
" <td>-1.6859</td>\n",
" <td>18056.00</td>\n",
" <td>20248.567</td>\n",
" <td>20251231</td>\n",
" <td>4.0640</td>\n",
" </tr>\n",
" <tr>\n",
" <th>000006.SZ</th>\n",
" <td>20251231</td>\n",
" <td>9.95</td>\n",
" <td>10.03</td>\n",
" <td>9.69</td>\n",
" <td>9.95</td>\n",
" <td>9.86</td>\n",
" <td>0.09</td>\n",
" <td>0.9128</td>\n",
" <td>270369.08</td>\n",
" <td>267758.676</td>\n",
" <td>20251231</td>\n",
" <td>39.7400</td>\n",
" </tr>\n",
" <tr>\n",
" <th>000007.SZ</th>\n",
" <td>20251231</td>\n",
" <td>11.72</td>\n",
" <td>11.75</td>\n",
" <td>11.28</td>\n",
" <td>11.44</td>\n",
" <td>11.62</td>\n",
" <td>-0.18</td>\n",
" <td>-1.5491</td>\n",
" <td>80556.00</td>\n",
" <td>92109.366</td>\n",
" <td>20251231</td>\n",
" <td>8.2840</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>920978.BJ</th>\n",
" <td>20251231</td>\n",
" <td>37.64</td>\n",
" <td>38.39</td>\n",
" <td>36.88</td>\n",
" <td>36.90</td>\n",
" <td>37.78</td>\n",
" <td>-0.88</td>\n",
" <td>-2.3293</td>\n",
" <td>33945.04</td>\n",
" <td>126954.937</td>\n",
" <td>20251231</td>\n",
" <td>1.2885</td>\n",
" </tr>\n",
" <tr>\n",
" <th>920981.BJ</th>\n",
" <td>20251231</td>\n",
" <td>32.20</td>\n",
" <td>32.29</td>\n",
" <td>31.75</td>\n",
" <td>31.96</td>\n",
" <td>32.07</td>\n",
" <td>-0.11</td>\n",
" <td>-0.3430</td>\n",
" <td>8237.16</td>\n",
" <td>26301.206</td>\n",
" <td>20251231</td>\n",
" <td>1.4343</td>\n",
" </tr>\n",
" <tr>\n",
" <th>920982.BJ</th>\n",
" <td>20251231</td>\n",
" <td>233.00</td>\n",
" <td>238.49</td>\n",
" <td>232.10</td>\n",
" <td>233.70</td>\n",
" <td>234.80</td>\n",
" <td>-1.10</td>\n",
" <td>-0.4685</td>\n",
" <td>5210.09</td>\n",
" <td>122452.646</td>\n",
" <td>20251231</td>\n",
" <td>4.2831</td>\n",
" </tr>\n",
" <tr>\n",
" <th>920985.BJ</th>\n",
" <td>20251231</td>\n",
" <td>7.32</td>\n",
" <td>7.35</td>\n",
" <td>7.17</td>\n",
" <td>7.19</td>\n",
" <td>7.30</td>\n",
" <td>-0.11</td>\n",
" <td>-1.5068</td>\n",
" <td>35174.30</td>\n",
" <td>25350.257</td>\n",
" <td>20251231</td>\n",
" <td>1.6280</td>\n",
" </tr>\n",
" <tr>\n",
" <th>920992.BJ</th>\n",
" <td>20251231</td>\n",
" <td>17.33</td>\n",
" <td>17.60</td>\n",
" <td>17.29</td>\n",
" <td>17.39</td>\n",
" <td>17.38</td>\n",
" <td>0.01</td>\n",
" <td>0.0575</td>\n",
" <td>6991.87</td>\n",
" <td>12193.445</td>\n",
" <td>20251231</td>\n",
" <td>1.4932</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5458 rows × 12 columns</p>\n",
"</div>"
]
},
"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
}