{"id":6458,"date":"2025-10-14T18:12:46","date_gmt":"2025-10-14T10:12:46","guid":{"rendered":"http:\/\/192.168.1.29\/?p=6458"},"modified":"2025-10-14T18:12:46","modified_gmt":"2025-10-14T10:12:46","slug":"%e6%9f%90%e5%8f%aa%e8%82%a1%e7%a5%a85%e3%80%8120%e5%9d%87%e7%ba%bf%e7%ad%96%e7%95%a5python%e4%bb%a3%e7%a0%81","status":"publish","type":"post","link":"http:\/\/xc.ipyingshe.net:5347\/?p=6458","title":{"rendered":"\u67d0\u53ea\u80a1\u79685\u300120\u5747\u7ebf\u7b56\u7565python\u4ee3\u7801"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>import baostock as bs\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib.dates as mdates\nfrom matplotlib.ticker import MaxNLocator\nimport datetime\n\n# \u8bbe\u7f6e\u4e2d\u6587\u663e\u793a\nplt.rcParams&#91;\"font.family\"] = &#91;\"SimHei\", \"Microsoft YaHei\", \"SimSun\", \"KaiTi\", \"FangSong\"]\nplt.rcParams&#91;\"axes.unicode_minus\"] = False  # \u6b63\u786e\u663e\u793a\u8d1f\u53f7\n\ndef get_stock_data(code, start_date, end_date):\n    \"\"\"\u4ecebaostock\u83b7\u53d6\u80a1\u7968\u6570\u636e\"\"\"\n    # \u767b\u5f55baostock\n    lg = bs.login()\n    if lg.error_code != '0':\n        print(f\"\u767b\u5f55\u5931\u8d25\uff1a{lg.error_msg}\")\n        return None\n    \n    # \u83b7\u53d6\u80a1\u7968\u6570\u636e\n    rs = bs.query_history_k_data_plus(\n        code,\n        \"date,open,high,low,close,volume\",\n        start_date=start_date,\n        end_date=end_date,\n        frequency=\"d\",\n        adjustflag=\"3\"  # \u590d\u6743\u7c7b\u578b\uff0c3\u8868\u793a\u4e0d\u590d\u6743\n    )\n    \n    # \u5904\u7406\u6570\u636e\n    data_list = &#91;]\n    while (rs.error_code == '0') &amp; rs.next():\n        data_list.append(rs.get_row_data())\n    \n    # \u767b\u51fabaostock\n    bs.logout()\n    \n    # \u8f6c\u6362\u4e3aDataFrame\u5e76\u5904\u7406\n    if not data_list:\n        print(\"\u6ca1\u6709\u83b7\u53d6\u5230\u6570\u636e\")\n        return None\n        \n    df = pd.DataFrame(data_list, columns=rs.fields)\n    # \u8f6c\u6362\u6570\u636e\u7c7b\u578b\n    df&#91;'date'] = pd.to_datetime(df&#91;'date'])\n    df&#91;'open'] = df&#91;'open'].astype(float)\n    df&#91;'high'] = df&#91;'high'].astype(float)\n    df&#91;'low'] = df&#91;'low'].astype(float)\n    df&#91;'close'] = df&#91;'close'].astype(float)\n    df&#91;'volume'] = df&#91;'volume'].astype(float)\n    \n    df.set_index('date', inplace=True)\n    return df\n\ndef calculate_moving_averages(data, short_window=5, long_window=20):\n    \"\"\"\u8ba1\u7b97\u79fb\u52a8\u5e73\u5747\u7ebf\"\"\"\n    # \u8ba1\u7b97\u77ed\u671f\u5747\u7ebf\uff085\u65e5\u5747\u7ebf\uff09\n    data&#91;'short_ma'] = data.loc&#91;:, 'close'].rolling(window=short_window).mean()\n    # \u8ba1\u7b97\u957f\u671f\u5747\u7ebf\uff0820\u65e5\u5747\u7ebf\uff09\n    data&#91;'long_ma'] = data.loc&#91;:, 'close'].rolling(window=long_window).mean()\n    return data\n\ndef generate_signals(data):\n    \"\"\"\u751f\u6210\u4ea4\u6613\u4fe1\u53f7\uff1a5\u65e5\u5747\u7ebf\u4e0a\u7a7f20\u65e5\u5747\u7ebf\u4e70\u5165\uff0c\u4e0b\u7a7f\u5356\u51fa\"\"\"\n    # \u521d\u59cb\u5316\u4fe1\u53f7\uff1a0\u8868\u793a\u65e0\u4fe1\u53f7\uff0c1\u8868\u793a\u4e70\u5165\uff0c-1\u8868\u793a\u5356\u51fa\n    data&#91;'signal'] = 0\n    \n    # \u8ba1\u7b97\u5747\u7ebf\u5dee\uff0c\u7528\u4e8e\u5224\u65ad\u91d1\u53c9\u6b7b\u53c9\n    data&#91;'ma_diff'] = data&#91;'short_ma'] - data&#91;'long_ma']\n    \n    # \u521b\u5efa\u4fe1\u53f7\u5217\n    # \u91d1\u53c9\uff1a\u77ed\u671f\u5747\u7ebf\u4e0a\u7a7f\u957f\u671f\u5747\u7ebf\uff08ma_diff\u4ece\u8d1f\u8f6c\u6b63\uff09\n    data.loc&#91;(data&#91;'ma_diff'] > 0) &amp; (data&#91;'ma_diff'].shift(1) &lt;= 0), 'signal'] = 1\n    # \u6b7b\u53c9\uff1a\u77ed\u671f\u5747\u7ebf\u4e0b\u7a7f\u957f\u671f\u5747\u7ebf\uff08ma_diff\u4ece\u6b63\u8f6c\u8d1f\uff09\n    data.loc&#91;(data&#91;'ma_diff'] &lt; 0) &amp; (data&#91;'ma_diff'].shift(1) >= 0), 'signal'] = -1\n    \n    return data\n\ndef backtest_strategy(data, initial_capital=100000):\n    \"\"\"\u56de\u6d4b\u7b56\u7565\"\"\"\n    # \u521d\u59cb\u5316\u8d44\u91d1\u548c\u6301\u4ed3\uff0c\u660e\u786e\u4f7f\u7528\u6d6e\u70b9\u6570\u7c7b\u578b\n    portfolio = pd.DataFrame(index=data.index).fillna(0.0)\n    portfolio&#91;'cash'] = float(initial_capital)\n    portfolio&#91;'shares'] = 0  # shares\u4fdd\u6301\u4e3a\u6574\u6570\n    portfolio&#91;'total'] = float(initial_capital)\n    \n    in_position = False  # \u662f\u5426\u6301\u4ed3\n    \n    for i in range(1, len(data)):\n        date = data.index&#91;i]\n        prev_date = data.index&#91;i-1]\n        \n        # \u590d\u5236\u524d\u4e00\u5929\u7684\u6301\u4ed3\u548c\u8d44\u91d1\u72b6\u6001\n        portfolio.loc&#91;date, 'cash'] = portfolio.loc&#91;prev_date, 'cash']\n        portfolio.loc&#91;date, 'shares'] = portfolio.loc&#91;prev_date, 'shares']\n        \n        # \u68c0\u67e5\u4ea4\u6613\u4fe1\u53f7\n        if data.loc&#91;date, 'signal'] == 1 and not in_position:\n            # \u4e70\u5165\u4fe1\u53f7\u4e14\u672a\u6301\u4ed3\uff0c\u6267\u884c\u4e70\u5165\n            price = data.loc&#91;date, 'close']\n            max_shares = int(portfolio.loc&#91;date, 'cash'] \/ price)\n            if max_shares > 0:\n                portfolio.loc&#91;date, 'shares'] = max_shares\n                portfolio.loc&#91;date, 'cash'] -= max_shares * price\n                in_position = True\n                print(f\"{date.date()} \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: {price:.2f}, \u4e70\u5165 {max_shares} \u80a1\")\n        \n        elif data.loc&#91;date, 'signal'] == -1 and in_position:\n            # \u5356\u51fa\u4fe1\u53f7\u4e14\u6301\u4ed3\uff0c\u6267\u884c\u5356\u51fa\n            price = data.loc&#91;date, 'close']\n            shares = portfolio.loc&#91;date, 'shares']\n            portfolio.loc&#91;date, 'cash'] += shares * price\n            portfolio.loc&#91;date, 'shares'] = 0\n            in_position = False\n            print(f\"{date.date()} \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: {price:.2f}, \u5356\u51fa {shares} \u80a1\")\n        \n        # \u8ba1\u7b97\u603b\u8d44\u4ea7\n        portfolio.loc&#91;date, 'total'] = portfolio.loc&#91;date, 'cash'] + portfolio.loc&#91;date, 'shares'] * data.loc&#91;date, 'close']\n    \n    # \u5c06\u56de\u6d4b\u7ed3\u679c\u5408\u5e76\u5230\u6570\u636e\u4e2d\n    data&#91;'portfolio'] = portfolio&#91;'total']\n    return data\n\ndef plot_results(data):\n    \"\"\"\u7ed8\u5236\u7ed3\u679c\u56fe\u8868\"\"\"\n    fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(16, 14), sharex=True)\n    \n    # \u4ef7\u683c\u548c\u5747\u7ebf\u56fe\n    ax1.plot(data.index, data&#91;'close'], label='\u6536\u76d8\u4ef7', linewidth=2)\n    ax1.plot(data.index, data&#91;'short_ma'], label='5\u65e5\u5747\u7ebf', color='blue', linewidth=1.5)\n    ax1.plot(data.index, data&#91;'long_ma'], label='20\u65e5\u5747\u7ebf', color='orange', linewidth=1.5)\n    ax1.scatter(data.index&#91;data&#91;'signal'] == 1], data&#91;'close']&#91;data&#91;'signal'] == 1], \n                marker='^', color='g', label='\u4e70\u5165\u4fe1\u53f7', zorder=3)\n    ax1.scatter(data.index&#91;data&#91;'signal'] == -1], data&#91;'close']&#91;data&#91;'signal'] == -1], \n                marker='v', color='r', label='\u5356\u51fa\u4fe1\u53f7', zorder=3)\n    ax1.set_title('\u80a1\u7968\u4ef7\u683c\u4e0e\u5747\u7ebf\u7b56\u7565\u4ea4\u6613\u4fe1\u53f7')\n    ax1.set_ylabel('\u4ef7\u683c (\u5143)')\n    ax1.legend()\n    ax1.grid(True)\n    \n    # \u8d44\u91d1\u66f2\u7ebf\n    ax2.plot(data.index, data&#91;'portfolio'], label='\u7b56\u7565\u8d44\u4ea7', color='b', linewidth=2)\n    # \u8ba1\u7b97\u4e70\u5165\u6301\u6709\u7b56\u7565\u7684\u8d44\u4ea7\n    initial_capital = data&#91;'portfolio'].iloc&#91;0]\n    buy_hold = initial_capital * (data&#91;'close'] \/ data&#91;'close'].iloc&#91;0])\n    ax2.plot(data.index, buy_hold, label='\u4e70\u5165\u6301\u6709', color='gray', linestyle='--', linewidth=2)\n    ax2.set_title('\u7b56\u7565\u8868\u73b0\u4e0e\u4e70\u5165\u6301\u6709\u5bf9\u6bd4')\n    ax2.set_xlabel('\u65e5\u671f')\n    ax2.set_ylabel('\u8d44\u4ea7 (\u5143)')\n    ax2.legend()\n    ax2.grid(True)\n    \n    # \u8bbe\u7f6ex\u8f74\u65e5\u671f\u683c\u5f0f\n    ax2.xaxis.set_major_locator(mdates.MonthLocator(interval=3))\n    ax2.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))\n    plt.xticks(rotation=45)\n    \n    plt.tight_layout()\n    plt.show()\n    \n    return fig\n\ndef calculate_performance_metrics(data):\n    \"\"\"\u8ba1\u7b97\u7ee9\u6548\u6307\u6807\"\"\"\n    initial_capital = data&#91;'portfolio'].iloc&#91;0]\n    final_capital = data&#91;'portfolio'].iloc&#91;-1]\n    \n    # \u8ba1\u7b97\u7b56\u7565\u603b\u6536\u76ca\n    total_return = (final_capital - initial_capital) \/ initial_capital * 100\n    \n    # \u8ba1\u7b97\u4e70\u5165\u6301\u6709\u603b\u6536\u76ca\n    initial_price = data&#91;'close'].iloc&#91;0]\n    final_price = data&#91;'close'].iloc&#91;-1]\n    buy_hold_return = (final_price - initial_price) \/ initial_price * 100\n    \n    # \u8ba1\u7b97\u4ea4\u6613\u6b21\u6570\n    buy_signals = sum(data&#91;'signal'] == 1)\n    sell_signals = sum(data&#91;'signal'] == -1)\n    \n    # \u8ba1\u7b97\u6301\u6709\u5929\u6570\n    days_held = len(data)\n    \n    # \u8ba1\u7b97\u5e74\u5316\u6536\u76ca\u7387\n    years = days_held \/ 252  # \u5047\u8bbe\u4e00\u5e74252\u4e2a\u4ea4\u6613\u65e5\n    annualized_return = (pow((final_capital \/ initial_capital), 1\/years) - 1) * 100 if years > 0 else 0\n    \n    print(\"\\n====== \u7b56\u7565\u7ee9\u6548\u6307\u6807 ======\")\n    print(f\"\u56de\u6d4b\u65f6\u95f4\u6bb5: {data.index&#91;0].date()} \u81f3 {data.index&#91;-1].date()}\")\n    print(f\"\u6301\u6709\u5929\u6570: {days_held} \u5929\")\n    print(f\"\u521d\u59cb\u8d44\u91d1: {initial_capital:.2f} \u5143\")\n    print(f\"\u6700\u7ec8\u8d44\u91d1: {final_capital:.2f} \u5143\")\n    print(f\"\u7b56\u7565\u603b\u6536\u76ca\u7387: {total_return:.2f}%\")\n    print(f\"\u4e70\u5165\u6301\u6709\u603b\u6536\u76ca\u7387: {buy_hold_return:.2f}%\")\n    print(f\"\u7b56\u7565\u5e74\u5316\u6536\u76ca\u7387: {annualized_return:.2f}%\")\n    print(f\"\u4e70\u5165\u4fe1\u53f7\u6b21\u6570: {buy_signals}\")\n    print(f\"\u5356\u51fa\u4fe1\u53f7\u6b21\u6570: {sell_signals}\")\n    \n    return {\n        'total_return': total_return,\n        'buy_hold_return': buy_hold_return,\n        'annualized_return': annualized_return,\n        'buy_signals': buy_signals,\n        'sell_signals': sell_signals,\n        'days_held': days_held\n    }\n\ndef main():\n    # \u8bbe\u7f6e\u80a1\u7968\u4ee3\u7801\u548c\u65e5\u671f\u8303\u56f4\uff08\u6700\u8fd13\u5e74\u6570\u636e\uff09\n    stock_code = \"sh.600938\"  # 600938\u7684\u8bc1\u5238\u4ee3\u7801\n    end_date = datetime.datetime.now().strftime(\"%Y-%m-%d\")\n    start_date = (datetime.datetime.now() - datetime.timedelta(days=2*365)).strftime(\"%Y-%m-%d\")\n    \n    print(f\"\u83b7\u53d6 {stock_code} \u4ece {start_date} \u5230 {end_date} \u7684\u6570\u636e...\")\n    \n    # \u83b7\u53d6\u80a1\u7968\u6570\u636e\n    data = get_stock_data(stock_code, start_date, end_date)\n    if data is None or len(data) == 0:\n        print(\"\u65e0\u6cd5\u83b7\u53d6\u8db3\u591f\u7684\u80a1\u7968\u6570\u636e\u8fdb\u884c\u5206\u6790\")\n        return\n    \n    # \u8ba1\u7b97\u79fb\u52a8\u5e73\u5747\u7ebf\n    data = calculate_moving_averages(data, short_window=5, long_window=20)\n    \n    # \u751f\u6210\u4ea4\u6613\u4fe1\u53f7\n    data = generate_signals(data)\n    \n    # \u56de\u6d4b\u7b56\u7565\n    data = backtest_strategy(data)\n    \n    # \u8ba1\u7b97\u5e76\u663e\u793a\u7ee9\u6548\u6307\u6807\n    metrics = calculate_performance_metrics(data)\n    \n    # \u7ed8\u5236\u7ed3\u679c\u56fe\u8868\n    plot_results(data)\n\nif __name__ == \"__main__\":\n    main()<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"534\" src=\"http:\/\/192.168.1.29\/wp-content\/uploads\/2025\/10\/stock_MA_stratagy-1024x534.png\" alt=\"\" class=\"wp-image-6459\" srcset=\"http:\/\/xc.ipyingshe.net:5347\/wp-content\/uploads\/2025\/10\/stock_MA_stratagy-1024x534.png 1024w, http:\/\/xc.ipyingshe.net:5347\/wp-content\/uploads\/2025\/10\/stock_MA_stratagy-300x157.png 300w, http:\/\/xc.ipyingshe.net:5347\/wp-content\/uploads\/2025\/10\/stock_MA_stratagy-768x401.png 768w, http:\/\/xc.ipyingshe.net:5347\/wp-content\/uploads\/2025\/10\/stock_MA_stratagy-1536x802.png 1536w, http:\/\/xc.ipyingshe.net:5347\/wp-content\/uploads\/2025\/10\/stock_MA_stratagy-2048x1069.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>2023-11-28 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 19.23, \u4e70\u5165 5200 \u80a1<br>2023-12-19 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 19.71, \u5356\u51fa 5200 \u80a1<br>2023-12-20 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 19.84, \u4e70\u5165 5166 \u80a1<br>2024-01-19 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 20.50, \u5356\u51fa 5166 \u80a1<br>2024-01-25 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 22.32, \u4e70\u5165 4744 \u80a1<br>2024-03-28 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 28.15, \u5356\u51fa 4744 \u80a1<br>2024-03-29 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 29.23, \u4e70\u5165 4569 \u80a1<br>2024-04-24 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 28.68, \u5356\u51fa 4569 \u80a1<br>2024-05-06 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 29.22, \u4e70\u5165 4484 \u80a1<br>2024-05-08 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 29.06, \u5356\u51fa 4484 \u80a1<br>2024-05-29 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 30.44, \u4e70\u5165 4281 \u80a1<br>2024-07-17 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 32.25, \u5356\u51fa 4281 \u80a1<br>2024-08-19 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 29.00, \u4e70\u5165 4761 \u80a1<br>2024-08-23 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 27.93, \u5356\u51fa 4761 \u80a1<br>2024-08-27 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 29.39, \u4e70\u5165 4524 \u80a1<br>2024-09-04 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 26.75, \u5356\u51fa 4524 \u80a1<br>2024-09-25 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 28.37, \u4e70\u5165 4266 \u80a1<br>2024-10-23 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 28.28, \u5356\u51fa 4266 \u80a1<br>2024-12-04 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 27.49, \u4e70\u5165 4389 \u80a1<br>2025-01-15 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 28.72, \u5356\u51fa 4389 \u80a1<br>2025-01-16 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 29.45, \u4e70\u5165 4280 \u80a1<br>2025-01-21 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 27.74, \u5356\u51fa 4280 \u80a1<br>2025-03-18 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 25.66, \u4e70\u5165 4627 \u80a1<br>2025-04-07 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 23.23, \u5356\u51fa 4627 \u80a1<br>2025-04-25 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 25.29, \u4e70\u5165 4250 \u80a1<br>2025-06-26 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 26.37, \u5356\u51fa 4250 \u80a1<br>2025-07-30 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 26.49, \u4e70\u5165 4231 \u80a1<br>2025-08-06 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 26.01, \u5356\u51fa 4231 \u80a1<br>2025-08-08 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 26.21, \u4e70\u5165 4198 \u80a1<br>2025-08-14 \u53d1\u51fa\u5356\u51fa\u4fe1\u53f7\uff0c\u4ef7\u683c: 25.80, \u5356\u51fa 4198 \u80a1<br>2025-09-03 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 26.24, \u4e70\u5165 4128 \u80a1<\/p>\n\n\n\n<p>====== \u7b56\u7565\u7ee9\u6548\u6307\u6807 ======<br>\u56de\u6d4b\u65f6\u95f4\u6bb5: 2023-10-16 \u81f3 2025-10-14<br>\u6301\u6709\u5929\u6570: 484 \u5929<br>\u521d\u59cb\u8d44\u91d1: 100000.00 \u5143<br>\u6700\u7ec8\u8d44\u91d1: 109489.57 \u5143<br>\u7b56\u7565\u603b\u6536\u76ca\u7387: 9.49%<br>\u4e70\u5165\u6301\u6709\u603b\u6536\u76ca\u7387: 27.07%<br>\u7b56\u7565\u5e74\u5316\u6536\u76ca\u7387: 4.83%<br>\u4e70\u5165\u4fe1\u53f7\u6b21\u6570: 16<br>\u5356\u51fa\u4fe1\u53f7\u6b21\u6570: 15<\/p>\n","protected":false},"excerpt":{"rendered":"<p>2023-11-28 \u53d1\u51fa\u4e70\u5165\u4fe1\u53f7\uff0c\u4ef7\u683c: 19.23, \u4e70\u5165 5200 \u80a120 <span class=\"readmore\"><a href=\"http:\/\/xc.ipyingshe.net:5347\/?p=6458\">Continue Reading<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,24],"tags":[],"class_list":["post-6458","post","type-post","status-publish","format-standard","hentry","category-2","category-24"],"_links":{"self":[{"href":"http:\/\/xc.ipyingshe.net:5347\/index.php?rest_route=\/wp\/v2\/posts\/6458","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/xc.ipyingshe.net:5347\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/xc.ipyingshe.net:5347\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/xc.ipyingshe.net:5347\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/xc.ipyingshe.net:5347\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6458"}],"version-history":[{"count":1,"href":"http:\/\/xc.ipyingshe.net:5347\/index.php?rest_route=\/wp\/v2\/posts\/6458\/revisions"}],"predecessor-version":[{"id":6460,"href":"http:\/\/xc.ipyingshe.net:5347\/index.php?rest_route=\/wp\/v2\/posts\/6458\/revisions\/6460"}],"wp:attachment":[{"href":"http:\/\/xc.ipyingshe.net:5347\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/xc.ipyingshe.net:5347\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6458"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/xc.ipyingshe.net:5347\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}