{ "cells": [ { "cell_type": "code", "id": "initial_id", "metadata": { "collapsed": true }, "source": [ "import pandas as pd\n", "import tushare as ts\n", "\n", "ts_pro = ts.pro_api(token=\"64ebff4fa679167600b905ee45dd88e76f3963c0ff39157f3f085f0e\")" ], "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "sse_df = ts_pro.trade_cal(exchange=\"SSE\")[[\"cal_date\", \"is_open\"]]\n", "szse_df = ts_pro.trade_cal(exchange=\"SZSE\")[[\"cal_date\", \"is_open\"]]\n", "merge_df = pd.merge(sse_df, szse_df, on=\"cal_date\", how=\"left\")\n", "merge_df = merge_df.fillna(value=0)\n", "merge_df[\"is_open\"] = (merge_df[\"is_open_x\"] + merge_df[\"is_open_y\"]) > 0\n", "trade_date_df = merge_df[[\"cal_date\", \"is_open\"]]\n", "trade_date_df" ], "id": "fe5b7f88c1739a13", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "import os\n", "import time\n", "\n", "for year in range(1990, 2025):\n", " target_path = f\"../temp/stk_factor/{year}.csv\"\n", " # 判断target_path文件是否存在\n", " if os.path.exists(target_path):\n", " continue\n", " result_df = pd.DataFrame()\n", " for trade_date in trade_date_df[(trade_date_df[\"cal_date\"].str.startswith(f\"{year}\")) & trade_date_df[\"is_open\"]][\n", " \"cal_date\"].values:\n", " time.sleep(1)\n", " print(f\"{trade_date} downloading...\")\n", " stk_df = ts_pro.stk_factor(trade_date=trade_date)\n", " result_df = pd.concat([result_df, stk_df])\n", " result_df.sort_values(by=[\"trade_date\", \"ts_code\"], ascending=True, inplace=True)\n", " result_df.to_csv(f\"/Users/lanyuanxiaoyao/SynologyDrive/data/Tushare/日线行情/{year}.csv\", index=False)" ], "id": "bde839364048fb89", "outputs": [], "execution_count": null }, { "metadata": { "ExecuteTime": { "end_time": "2025-01-14T02:29:02.535840Z", "start_time": "2025-01-14T02:28:19.578528Z" } }, "cell_type": "code", "source": [ "root = \"/Users/lanyuanxiaoyao/SynologyDrive/data/Tushare/日线行情\"\n", "\n", "\n", "def get_daily_df(start_year, end_year):\n", " daily_df = pd.read_csv(f\"{root}/{start_year}.csv\")\n", " for year in range(start_year + 1, end_year + 1):\n", " daily_df = pd.concat([daily_df, pd.read_csv(f\"{root}/{year}.csv\")])\n", " return daily_df" ], "id": "d0701612c56add14", "outputs": [], "execution_count": 39 }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "daily_df = get_daily_df(2019, 2024)", "id": "ffc7072a7c5a44f9" }, { "metadata": {}, "cell_type": "code", "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "\n", "def is_ascending(code, year):\n", " daily_df = get_daily_df(year, year)\n", " daily_df = daily_df[daily_df[\"ts_code\"] == code][[\"trade_date\", \"close_qfq\"]]\n", " daily_df[\"trade_date\"] = pd.to_datetime(daily_df[\"trade_date\"], format=\"%Y%m%d\")\n", " daily_df[\"trade_date_timestamp\"] = daily_df[\"trade_date\"].astype(np.int64)\n", " daily_df.sort_values(by=\"trade_date\", ascending=True, inplace=True)\n", " \n", " first = daily_df[daily_df[\"trade_date_timestamp\"] == daily_df[\"trade_date_timestamp\"].min()][\"close_qfq\"].values[0]\n", " last = daily_df[daily_df[\"trade_date_timestamp\"] == daily_df[\"trade_date_timestamp\"].max()][\"close_qfq\"].values[0]\n", " \n", " print(first, last)\n", " \n", " coefficients = np.polyfit(daily_df[\"trade_date_timestamp\"], daily_df[\"close_qfq\"], 1)\n", "\n", " print(coefficients)\n", " fn = np.poly1d(coefficients)\n", " daily_df[\"close_predict\"] = fn(daily_df[\"trade_date_timestamp\"])\n", "\n", " plt.figure(figsize=(25, 8))\n", " plt.scatter(daily_df[\"trade_date\"], daily_df[\"close_qfq\"])\n", " plt.plot(daily_df[\"trade_date\"], daily_df[\"close_predict\"], color=\"orange\")\n", "\n", " plt.gcf().autofmt_xdate()\n", " plt.show()\n", "\n", " return bool((coefficients[0] > 0) and (last > first))\n", "\n", "\n", "print(is_ascending(\"000001.SZ\", 2020))\n", "print(is_ascending(\"000001.SZ\", 2021))\n", "print(is_ascending(\"000001.SZ\", 2022))\n", "print(is_ascending(\"000001.SZ\", 2023))\n", "print(is_ascending(\"000001.SZ\", 2024))" ], "id": "e58494f608dcb055", "outputs": [], "execution_count": null } ], "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 }