{"id":1611,"date":"2024-11-09T07:09:00","date_gmt":"2024-11-08T23:09:00","guid":{"rendered":"https:\/\/blog.laoyulaoyu.top\/?p=1611"},"modified":"2024-10-15T21:17:49","modified_gmt":"2024-10-15T13:17:49","slug":"%e5%80%9f%e5%8a%a9%e5%b0%8f%e6%b3%a2%e5%8f%98%e6%8d%a2%e4%bf%a1%e5%8f%b7%ef%bc%8c%e9%a9%be%e9%a9%ad%e8%82%a1%e4%bb%b7%e6%b3%a2%e5%8a%a8","status":"publish","type":"post","link":"https:\/\/laoyulaoyu.com\/index.php\/2024\/11\/09\/%e5%80%9f%e5%8a%a9%e5%b0%8f%e6%b3%a2%e5%8f%98%e6%8d%a2%e4%bf%a1%e5%8f%b7%ef%bc%8c%e9%a9%be%e9%a9%ad%e8%82%a1%e4%bb%b7%e6%b3%a2%e5%8a%a8\/","title":{"rendered":"\u501f\u52a9\u5c0f\u6ce2\u53d8\u6362\u4fe1\u53f7\uff0c\u9a7e\u9a6d\u80a1\u4ef7\u6ce2\u52a8"},"content":{"rendered":"\n<p>\u4f5c\u8005\uff1a<a href=\"https:\/\/www.laoyulaoyu.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">\u8001\u4f59\u635e\u9c7c<\/a><\/p>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">\u539f\u521b\u4e0d\u6613\uff0c\u8f6c\u8f7d\u8bf7\u6807\u660e\u51fa\u5904\u53ca\u539f\u4f5c\u8005\u3002<\/mark><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.laoyulaoyu.com\/wp-content\/uploads\/2024\/10\/1015.png\" alt=\"\" class=\"wp-image-2511\"\/><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<pre class=\"wp-block-verse\"><strong>\u5199\u5728\u524d\u9762\u7684\u8bdd\uff1a<\/strong>\u672c\u6587\u5c06\u4ecb\u7ecd<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">\u5229\u7528 Python \u4e2d\u7684\u5c0f\u6ce2\u53d8\u6362\u5206\u6790\u80a1\u7968\u4ef7\u683c\u6ce2\u52a8<\/mark>\uff0c\u5e76\u901a\u8fc7\u8fde\u7eed\u5c0f\u6ce2\u53d8\u6362\uff08CWT\uff09\u63d0\u53d6\u7279\u5f81\uff0c\u4ee5\u8bc6\u522b\u6f5c\u5728\u7684\u4e70\u5165\u548c\u5356\u51fa\u4fe1\u53f7\u3002\u5728 Python \u5b9e\u73b0\u90e8\u5206\uff0c\u6211\u4f1a\u63d0\u4f9b\u5b8c\u6574\u7684\u4ee3\u7801\u793a\u4f8b\uff0c\u5305\u62ec\u8bbe\u7f6e\u73af\u5883\u3001\u83b7\u53d6\u80a1\u7968\u6570\u636e\u3001\u5e94\u7528 CWT\u3001\u63d0\u53d6\u4e70\u5356\u4fe1\u53f7\u4ee5\u53ca\u8bc6\u522b\u4fe1\u53f7\u4ea4\u53c9\u70b9\u3002\u6b64\u5916\uff0c\u8fd8\u544a\u8bc9\u5927\u5bb6\u5982\u4f55\u4f7f\u7528 matplotlib \u5e93\u5bf9\u4e70\u5165\u548c\u5356\u51fa\u4fe1\u53f7\u8fdb\u884c\u53ef\u89c6\u5316\uff0c\u5e76\u901a\u8fc7\u56de\u6eaf\u6d4b\u8bd5\u4f18\u5316\u5c0f\u6ce2\u53c2\u6570\u4ee5\u63d0\u9ad8\u4ea4\u6613\u7b56\u7565\u7684\u6027\u80fd\u3002<\/pre>\n<\/blockquote>\n\n\n\n<p id=\"3c1c\">\u80a1\u7968\u6da8\u6da8\u8dcc\u8dcc\uff0c\u5f62\u6210\u7684\u6a21\u5f0f\u548c\u8d70\u52bf\u5c31\u50cf\u6d77\u6d6a\u4e00\u6837\u96be\u4ee5\u9884\u6d4b\u3002\u7136\u800c\uff0c\u5c31\u50cf\u79d1\u5b66\u5bb6\u901a\u8fc7\u4e86\u89e3\u6d0b\u6d41\u6ce2\u52a8\u6765\u9884\u6d4b\u6d77\u6d6a\u7684\u8fd0\u52a8\u4e00\u6837\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u7528\u7c7b\u4f3c\u7684\u5de5\u5177\u6765\u89e3\u8bfb\u80a1\u5e02\u7684\u4e00\u4e9b\u89c4\u5f8b\u3002\u501f\u52a9\u5c0f\u6ce2\u53d8\u6362\u7684\u5a01\u529b\uff0c\u6211\u4eec\u5e0c\u671b\u80fd\u900f\u8fc7\u73b0\u8c61\u770b\u672c\u8d28\uff0c\u63a2\u5bfb\u63a8\u52a8\u80a1\u4ef7\u7684\u6df1\u5c42\u56e0\u7d20\u3002\u8fd9\u4e0d\u4ec5\u4ec5\u662f\u6570\u5b57\u4e0e\u6570\u636e\uff0c\u800c\u662f\u8981\u5c06\u62bd\u8c61\u8f6c\u5316\u4e3a\u5177\u4f53\uff0c\u4ece\u80a1\u7968\u770b\u4f3c\u65e0\u5e38\u7684\u884c\u4e3a\u4e2d\u627e\u5230\u5176\u8282\u594f\u4e0e\u7f18\u7531\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"7571\"><strong>\u4e00\u3001\u5c0f\u6ce2\u53d8\u6362\u7406\u8bba<\/strong><\/h2>\n\n\n\n<p id=\"161a\">\u5c31\u5176\u6838\u5fc3\u800c\u8a00\uff0c\u5c0f\u6ce2\u662f\u4e00\u79cd\u77ed\u6682\u7684\u632f\u8361\uff0c\u5176\u80fd\u91cf\u96c6\u4e2d\u5728\u65f6\u95f4\u4e0a\uff0c\u786e\u4fdd\u4e86\u5b83\u7684\u77ed\u6682\u6027\u548c\u6301\u7eed\u65f6\u95f4\u7684\u6709\u9650\u6027\u3002\u60f3\u8c61\u4e00\u4e0b\u6572\u51fb\u9f13\u58f0\uff1a\u4ea7\u751f\u7684\u58f0\u97f3\u5f88\u5f3a\u70c8\uff0c\u4f46\u5f88\u5feb\u5c31\u4f1a\u6d88\u5931\u3002\u5c0f\u6ce2\u7684\u8fd9\u79cd\u77ed\u6682\u7279\u6027\u4f7f\u5176\u975e\u5e38\u9002\u5408\u5206\u6790\u975e\u7a33\u6001\uff08\u5373\u5176\u7edf\u8ba1\u7279\u6027\u968f\u65f6\u95f4\u53d8\u5316\uff09\u7684\u91d1\u878d\u4fe1\u53f7\u3002\u5c0f\u6ce2\u53d8\u6362\u5c31\u50cf\u4e00\u4e2a\u663e\u5fae\u955c\uff0c\u53ef\u4ee5\u89c2\u5bdf\u80a1\u7968\u6570\u636e\u9519\u7efc\u590d\u6742\u7684\u7ec6\u8282\uff0c\u6355\u6349\u5176\u5927\u7684\u8d8b\u52bf\u548c\u5fae\u5c0f\u7684\u6ce2\u52a8\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"a598\"><strong>1.1 \u4e3a\u4ec0\u4e48\u4e0d\u9009\u5085\u7acb\u53f6\u53d8\u6362\uff1f<\/strong><\/h3>\n\n\n\n<p id=\"7683\">\u8bb8\u591a\u4eba\u53ef\u80fd\u4f1a\u60f3\uff0c\u4e3a\u4ec0\u4e48\u4e0d\u76f4\u63a5\u4f7f\u7528\u5085\u7acb\u53f6\u53d8\u6362\u8fd9\u4e00\u975e\u5e38\u6d41\u884c\u7684\u4fe1\u53f7\u5206\u6790\u5de5\u5177\u5462\uff1f\u5085\u7acb\u53f6\u53d8\u6362\u53ef\u5c06\u4fe1\u53f7\u5206\u89e3\u4e3a\u6b63\u5f26\u7ec4\u6210\u3002\u7136\u800c\uff0c\u5b83\u7684\u81f4\u547d\u5f31\u70b9\u662f\u65e0\u6cd5\u540c\u65f6\u63d0\u4f9b\u65f6\u95f4\u548c\u9891\u7387\u4fe1\u606f\u3002\u867d\u7136\u5b83\u80fd\u544a\u8bc9\u6211\u4eec\u5b58\u5728\u7684\u9891\u7387\uff0c\u4f46\u5f80\u5f80\u5ffd\u7565\u4e86\u8fd9\u4e9b\u9891\u7387\u51fa\u73b0\u7684\u65f6\u95f4\u3002\u4e0e\u5085\u91cc\u53f6\u53d8\u6362\u4e0d\u540c\uff0c\u5c0f\u6ce2\u53d8\u6362\u540c\u65f6\u6355\u6349\u9891\u7387\u548c\u65f6\u95f4\uff0c\u63d0\u4f9b\u4fe1\u53f7\u7684\u65f6\u9891\u8868\u793a\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"147b\"><strong>1.2 \u5c0f\u6ce2\u53d8\u6362\u7684\u672c\u8d28<\/strong><\/h3>\n\n\n\n<p id=\"5e4d\">\u5728\u6570\u5b66\u4e0a\uff0c\u5c0f\u6ce2\u53d8\u6362\u53ef\u4ee5\u8868\u793a\u4e3a\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image\" id=\"63e2\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.readmedium.com\/v2\/resize:fit:800\/1*FSxY3wEV_sxVKhLtD1Fr-Q.png\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>W <\/strong>\u662f\u6211\u4eec\u6bd4\u8f83\u7684\u7ed3\u679c\uff0c\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u76f8\u4f3c\u5ea6\u7684\u5ea6\u91cf\u3002<\/li>\n\n\n\n<li><strong>f (t) <\/strong>\u4ee3\u8868\u6211\u4eec\u7684\u80a1\u7968\u6570\u636e\u3002<\/li>\n\n\n\n<li><strong>\u03c8 (t) <\/strong>\u662f\u9009\u62e9\u7684\u5c0f\u6ce2\u6a21\u5f0f\u3002<\/li>\n<\/ul>\n\n\n\n<p id=\"d5cb\">\u5b9e\u8d28\u4e0a\uff0c\u6211\u4eec\u662f\u5728\u80a1\u7968\u6570\u636e f(t) \u4e0a\u79fb\u52a8\u5c0f\u6ce2 \u03c8\uff0c\u5bfb\u627e\u5b83\u4eec\u543b\u5408\u7684\u5730\u65b9\u3002\u8fd9\u5c31\u5f97\u5230\u4e86\u5c0f\u6ce2\u7cfb\u6570 W(b)\uff0c\u5b83\u544a\u8bc9\u6211\u4eec\u80a1\u7968\u6570\u636e\u5728\u6bcf\u4e2a\u65f6\u95f4\u70b9\u4e0e\u5c0f\u6ce2\u7684\u5339\u914d\u7a0b\u5ea6\u3002\u7b80\u5355\u5730\u8bf4\uff0c\u4efb\u4f55\u7ed9\u5b9a\u70b9\u7684\u5339\u914d\u5ea6\u8d8a\u9ad8\uff0cW \u7684\u503c\u5c31\u8d8a\u5927\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\" id=\"1c1f\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.readmedium.com\/v2\/resize:fit:800\/1*mtf1bJQyrYxmD6Xu3o_jew.gif\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\" id=\"4a88\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.readmedium.com\/v2\/resize:fit:800\/1*mBwCA9NR-u3GUXmiNkpObA.gif\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"47f5\">\u5728\u5c55\u793a\u7684\u53ef\u89c6\u5316\u6548\u679c\u4e2d\uff0c\u6211\u4eec\u770b\u5230\u4e86\u5c0f\u6ce2\u53d8\u6362\u5e94\u7528\u4e8e\u65f6\u95f4\u5e8f\u5217\u6570\u636e\uff08\u5982\u80a1\u7968\u4ef7\u683c\uff09\u7684\u673a\u5236\u3002\u5de6\u56fe\u662f\u8fde\u7eed\u5c0f\u6ce2\u53d8\u6362\uff08CWT\uff09\u5e94\u7528\u4e8e\u80a1\u7968\u6570\u636e\u7684\u751f\u52a8\u5199\u7167\u3002\u52a8\u753b\u7684\u6bcf\u4e00\u5e27\u90fd\u663e\u793a\u4e86\u4e0d\u540c\u5c3a\u5ea6\u7684\u5c0f\u6ce2\u7cfb\u6570\uff0c\u6355\u6349\u4e86\u4e0d\u540c\u65f6\u95f4\u8de8\u5ea6\u4e0b\u5b58\u5728\u7684\u6a21\u5f0f\u3002\u8f83\u5bbd\u7684\u5c0f\u6ce2\u68c0\u6d4b\u8f83\u957f\u671f\u7684\u8d8b\u52bf\uff0c\u800c\u8f83\u7a84\u7684\u5c0f\u6ce2\u5219\u5173\u6ce8\u77ed\u671f\u6ce2\u52a8\u3002<\/p>\n\n\n\n<p id=\"d7a6\">\u53f3\u4fa7\u662f\u5c0f\u6ce2\uff08\u672c\u4f8b\u4e2d\u4e3a Ricker \u5c0f\u6ce2\uff09\u5982\u4f55\u7a7f\u8d8a\u80a1\u7968\u4fe1\u53f7\u7684\u63cf\u8ff0\u3002\u5f53\u5c0f\u6ce2\u6ed1\u8fc7\u65f6\uff0c\u5b83\u4f1a\u4e0e\u80a1\u7968\u6570\u636e\u9010\u70b9\u76f8\u4e58\uff0c\u7136\u540e\u5c06\u6240\u5f97\u6570\u503c\u76f8\u52a0\uff0c\u5f97\u51fa\u4e00\u4e2a\u5355\u4e00\u7684\u7cfb\u6570\u3002\u4e0b\u9762\u7ed8\u5236\u4e86\u8fd9\u79cd &#8220;\u76f8\u5173\u6027&#8221;\uff0c\u7ea2\u70b9\u8868\u793a\u5c0f\u6ce2\u79fb\u52a8\u65f6\u7684\u5f53\u524d\u7cfb\u6570\u503c\u3002\u76f8\u5173\u6027\u56fe\u4e2d\u7684\u9ad8\u70b9\u8868\u793a\u5c0f\u6ce2\u4e0e\u80a1\u7968\u6570\u636e\u9ad8\u5ea6\u4e00\u81f4\u7684\u4f4d\u7f6e\uff0c\u6355\u6349\u7279\u5b9a\u7684\u6a21\u5f0f\u3002\u4ece\u672c\u8d28\u4e0a\u8bb2\uff0c\u8fd9\u4e00\u8fc7\u7a0b\u662f\u5728\u5e9e\u5927\u7684\u65f6\u95f4\u5e8f\u5217\u6570\u636e\u4e2d\u53d1\u6398\u5c40\u90e8\u6a21\u5f0f\u7684\u7cfb\u7edf\u65b9\u6cd5\uff0c\u63d0\u4f9b\u4e86\u5085\u7acb\u53f6\u53d8\u6362\u53ef\u80fd\u5ffd\u7565\u7684\u7ec6\u7c92\u5ea6\u89c6\u89d2\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"9e99\"><strong>\u4e8c\u3001\u7528 Python \u5b9e\u73b0<\/strong><\/h2>\n\n\n\n<p id=\"ce07\">\u73b0\u5728\uff0c\u6211\u4eec\u5c06\u6df1\u5165\u63a2\u8ba8\u5c0f\u6ce2\u53d8\u6362\u7684 Python \u5b9e\u73b0\uff0c\u4ee5\u4fbf\u4ece\u80a1\u7968\u6570\u636e\u4e2d\u63d0\u53d6\u4ea4\u6613\u8005\u548c\u6570\u636e\u79d1\u5b66\u5bb6\u53ef\u80fd\u611f\u5174\u8da3\u7684\u4e70\u5165\/\u5356\u51fa\u4fe1\u53f7\u3002\u4ee3\u7801\u91c7\u7528\u8fde\u7eed\u5c0f\u6ce2\u53d8\u6362\u6765\u63d0\u53d6\u80a1\u7968\u5386\u53f2\u6570\u636e\u4e2d\u53ef\u6307\u793a\u6f5c\u5728\u4e70\u5165\u6216\u5356\u51fa\u65f6\u523b\u7684\u7279\u5f81\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"7576\"><strong>2.1 \u8bbe\u7f6e\u73af\u5883<\/strong><\/h3>\n\n\n\n<p id=\"3f2a\">\u786e\u4fdd\u6709\u6240\u9700\u7684 Python \u5e93\u3002\u5982\u679c\u6ca1\u6709\uff0c\u53ef\u4ee5\u901a\u8fc7 pip \u5b89\u88c5\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>pip install numpy pandas matplotlib yfinance scipy<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"5921\"><strong>2.2 \u83b7\u53d6\u5e93\u5b58\u6570\u636e<\/strong><\/h3>\n\n\n\n<p id=\"55df\">\u4f7f\u7528\u96c5\u864e\u8d22\u7ecf <code>yfinance<\/code>&nbsp;\u5e93\uff0c\u6211\u4eec\u53ef\u4ee5\u8f7b\u677e\u83b7\u53d6\u80a1\u7968\u6570\u636e\u8fdb\u884c\u5206\u6790\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>import yfinance as yf\n\nticker = \"SIE.DE\"\nstock_data = yf.download(ticker, start=\"2018-01-01\", end=\"2023-12-30\")<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"450e\"><strong>2.3 \u5e94\u7528\u8fde\u7eed\u5c0f\u6ce2\u53d8\u6362 (CWT)<\/strong><\/h3>\n\n\n\n<p id=\"237e\">&nbsp;<code>scipy<\/code>\u5e93\u63d0\u4f9b\u4e86\u4f7f\u7528 Ricker \u5c0f\u6ce2\u8ba1\u7b97 CWT \u6240\u9700\u7684\u51fd\u6570\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>from scipy import signal\n\nwidths = np.arange(1, 15)\ncwt_result = signal.cwt(stock_data&#91;'Close'].values, signal.ricker, widths)<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"6584\"><strong>2.4 \u63d0\u53d6\u4e70\u5356\u4fe1\u53f7<\/strong><\/h3>\n\n\n\n<p id=\"114d\">\u4ece\u8ba1\u7b97\u51fa\u7684 CWT \u4e2d\u53ef\u4ee5\u63d0\u53d6\u6b63\u7cfb\u6570\u548c\u8d1f\u7cfb\u6570\uff0c\u5206\u522b\u8868\u793a\u80a1\u4ef7\u7684\u4e0a\u6da8\u548c\u4e0b\u8dcc\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>cwt_positive = np.where(cwt_result &gt; 0, cwt_result, 0)\ncwt_negative = np.where(cwt_result &lt; 0, cwt_result, 0)\n\nbuy_signal = pd.Series(np.sum(cwt_positive, axis=0), index=stock_data.index)\nsell_signal = pd.Series(-np.sum(cwt_negative, axis=0), index=stock_data.index)<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"b7a6\"><strong>2.5 \u8bc6\u522b\u4fe1\u53f7\u4ea4\u53c9\u70b9<\/strong><\/h3>\n\n\n\n<p id=\"e7b9\">\u4e70\u5165\u548c\u5356\u51fa\u4fe1\u53f7\u4e4b\u95f4\u7684\u4ea4\u53c9\u53ef\u80fd\u9884\u793a\u7740\u4ea4\u6613\u673a\u4f1a\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>cross_above = (buy_signal &gt;= sell_signal) &amp; (buy_signal.shift(1) &lt; sell_signal.shift(1))\ncross_below = (buy_signal &lt;= sell_signal) &amp; (buy_signal.shift(1) &gt; sell_signal.shift(1))<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"fc20\"><strong>2.6 \u53ef\u89c6\u5316<\/strong><\/h3>\n\n\n\n<p id=\"49ba\">\u53ef\u89c6\u5316\u8868\u793a\u6cd5\u53ef\u4ee5\u5bf9\u7167\u80a1\u7968\u7684\u5386\u53f2\u6570\u636e\uff0c\u66f4\u6e05\u6670\u5730\u663e\u793a\u4e70\u5165\/\u5356\u51fa\u65f6\u523b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>import matplotlib.pyplot as plt\n\nplt.figure(figsize=(30, 6))\nplt.plot(stock_data.index, stock_data&#91;'Close'], label='Close Prices', alpha=0.5)\nplt.scatter(stock_data.index&#91;cross_above], stock_data&#91;'Close']&#91;cross_above], label='Buy Signal', marker='^', color='g')\nplt.scatter(stock_data.index&#91;cross_below], stock_data&#91;'Close']&#91;cross_below], label='Sell Signal', marker='v', color='r')\nplt.title(f'{ticker} Historical Close Prices with Wavelet Transform Buy and Sell Signals')\nplt.legend()\nplt.show()<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"9a13\"><strong>2.7 \u5b8c\u6574\u7684 Python \u4ee3\u7801<\/strong><\/h3>\n\n\n\n<p id=\"bb1f\">\u5c06\u6240\u6709\u4ee3\u7801\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport yfinance as yf\nfrom scipy import signal\n\n# Download ASML.AS historical stock data\nticker = \"SIE.DE\"\nstock_data = yf.download(ticker, start=\"2018-01-01\", end=\"2023-12-30\")\n\n# Compute the Continuous Wavelet Transform (CWT) using the Ricker wavelet\nwidths = np.arange(1, 15)\ncwt_result = signal.cwt(stock_data&#91;'Close'].values, signal.ricker, widths)\n\n# Extract the relevant CWT coefficients for analysis\ncwt_positive = np.where(cwt_result &gt; 0, cwt_result, 0)\ncwt_negative = np.where(cwt_result &lt; 0, cwt_result, 0)\n\n# Calculate the buy and sell signals from the CWT coefficients\nbuy_signal = pd.Series(np.sum(cwt_positive, axis=0), index=stock_data.index)\nsell_signal = pd.Series(-np.sum(cwt_negative, axis=0), index=stock_data.index)\n\n# Identify buy and sell signal crossovers\ncross_above = (buy_signal &gt;= sell_signal) &amp; (buy_signal.shift(1) &lt; sell_signal.shift(1))\ncross_below = (buy_signal &lt;= sell_signal) &amp; (buy_signal.shift(1) &gt; sell_signal.shift(1))\n\n# Plot the stock prices and buy\/sell signals\nplt.figure(figsize=(30, 6))\nplt.plot(stock_data.index, stock_data&#91;'Close'], label='Close Prices', alpha=0.5)\nplt.scatter(stock_data.index&#91;cross_above], stock_data&#91;'Close']&#91;cross_above], label='Buy Signal', marker='^', color='g')\nplt.scatter(stock_data.index&#91;cross_below], stock_data&#91;'Close']&#91;cross_below], label='Sell Signal', marker='v', color='r')\nplt.title(f'{ticker} Historical Close Prices with Wavelet Transform Buy and Sell Signals')\nplt.legend()\nplt.show()<\/code><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\" id=\"7f5e\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.readmedium.com\/v2\/resize:fit:800\/1*KSprbH4tlqgMQMSG0MsbuQ.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>\u5982\u56fe\uff0c2018 \u5e74\u81f3 2023 \u5e74\u5386\u53f2\u6536\u76d8\u4ef7\u7684\u53ef\u89c6\u5316\uff0c\u4ee5\u53ca\u4f7f\u7528\u57fa\u672c CWT \u65b9\u6cd5\u901a\u8fc7\u5c0f\u6ce2\u53d8\u6362\u5f97\u51fa\u7684\u4e70\u5165\uff08\u7eff\u8272\u5411\u4e0a\u4e09\u89d2\u5f62\uff09\u548c\u5356\u51fa\uff08\u7ea2\u8272\u5411\u4e0b\u4e09\u89d2\u5f62\uff09\u4fe1\u53f7\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"a60a\"><strong><br>2.8 \u4f18\u5316\u53c2\u6570<\/strong><\/h3>\n\n\n\n<p id=\"3f1b\">\u867d\u7136\u5c0f\u6ce2\u53d8\u6362\u4e3a\u5206\u6790\u80a1\u7968\u6570\u636e\u548c\u751f\u6210\u4e70\u5356\u4fe1\u53f7\u63d0\u4f9b\u4e86\u4e00\u79cd\u521b\u65b0\u65b9\u6cd5\uff0c\u4f46\u5176\u6709\u6548\u6027\u5728\u5f88\u5927\u7a0b\u5ea6\u4e0a\u53d6\u51b3\u4e8e\u53c2\u6570\u7684\u9009\u62e9\uff1a\u5c0f\u6ce2\u7684\u5bbd\u5ea6\u548c\u9608\u503c\u3002\u8fd9\u4e9b\u53c2\u6570\u4f1a\u5f71\u54cd\u6211\u4eec\u7b56\u7565\u7684\u7075\u654f\u5ea6\u548c\u7279\u5f02\u6027\u3002<\/p>\n\n\n\n<p id=\"5a95\">\u5229\u7528\u4e0b\u9762\u7684\u4ee3\u7801\uff0c\u4f60\u53ef\u4ee5\u5b9e\u73b0\u4f18\u5316\u6280\u672f\uff0c\u7cfb\u7edf\u5730\u9009\u62e9\u6700\u4f73\u53c2\u6570\u3002\u5229\u7528\u56de\u6eaf\u6d4b\u8bd5\u529f\u80fd\uff0c\u6211\u4eec\u5c06\u6a21\u62df\u4e0d\u540c\u53c2\u6570\u7ec4\u5408\u4e0b\u7b56\u7565\u7684\u8fc7\u5f80\u8868\u73b0\u3002\u6700\u540e\uff0c\u6211\u4eec\u5c06\u5bf9\u7b56\u7565\u8fdb\u884c\u5fae\u8c03\uff0c\u4ee5\u6700\u5927\u9650\u5ea6\u5730\u63d0\u9ad8\u5386\u53f2\u4e1a\u7ee9\uff0c\u540c\u65f6\u7262\u8bb0\u4e00\u53e5\u683c\u8a00\uff1a\u8fc7\u53bb\u7684\u4e1a\u7ee9\u5e76\u4e0d\u4e00\u5b9a\u4ee3\u8868\u672a\u6765\u7684\u7ed3\u679c\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport yfinance as yf\nfrom scipy import signal\n\n# Download ASML.AS historical stock data\nticker = \"ASML.AS\"\nstock_data = yf.download(ticker, start=\"2018-01-01\", end=\"2023-12-30\")\n\n# Define parameter ranges\nwidths_range = np.arange(1, 15)\nthreshold_range = np.arange(0.1, 1.0, 0.1)\n\n# Store the best parameters and their performance\nbest_widths = None\nbest_threshold = None\nbest_performance = -np.inf\n\ndef backtest(stock_data, cross_above, cross_below):\n    # We'll start with one \"unit\" of cash\n    cash = 1.0  \n    stock = 0.0  \n    position = \"out\"  \n\n    # Go through each day in our data\n    for i in range(len(stock_data)):\n        # If we have a buy signal and we're not already holding the stock\n        if cross_above&#91;i] and position == \"out\":\n            # Buy the stock\n            stock += cash \/ stock_data&#91;'Close']&#91;i]\n            cash = 0.0\n            position = \"in\"\n        # If we have a sell signal and we're holding the stock\n        elif cross_below&#91;i] and position == \"in\":\n            # Sell the stock\n            cash += stock * stock_data&#91;'Close']&#91;i]\n            stock = 0.0\n            position = \"out\"\n\n    # Return our final portfolio value\n    if position == \"in\":\n        return cash + stock * stock_data&#91;'Close']&#91;-1]\n    else:\n        return cash\n\n# Go through each combination of parameters\nfor widths in widths_range:\n    for threshold in threshold_range:\n        # Compute the CWT\n        cwt_result = signal.cwt(stock_data&#91;'Close'].values, signal.ricker, &#91;widths])\n\n        # Extract relevant coefficients\n        cwt_positive = np.where(cwt_result &gt; threshold, cwt_result, 0)\n        cwt_negative = np.where(cwt_result &lt; -threshold, cwt_result, 0)\n\n        # Calculate signals\n        buy_signal = pd.Series(np.sum(cwt_positive, axis=0), index=stock_data.index)\n        sell_signal = pd.Series(-np.sum(cwt_negative, axis=0), index=stock_data.index)\n        cross_above = (buy_signal &gt;= sell_signal) &amp; (buy_signal.shift(1) &lt; sell_signal.shift(1))\n        cross_below = (buy_signal &lt;= sell_signal) &amp; (buy_signal.shift(1) &gt; sell_signal.shift(1))\n\n        # Calculate performance based on trading signals\n        performance = backtest(stock_data, cross_above, cross_below)\n\n        # Update best parameters if this performance is better\n        if performance &gt; best_performance:\n            best_performance = performance\n            best_widths = widths\n            best_threshold = threshold\n\n# Print the best parameters\nprint(f\"Best widths: {best_widths}\")\nprint(f\"Best threshold: {best_threshold}\")\nprint(f\"Best performance: {best_performance * 100}%\")\n\n# Recalculate the CWT and buy\/sell signals using the best parameters\ncwt_result = signal.cwt(stock_data&#91;'Close'].values, signal.ricker, &#91;best_widths])\ncwt_positive = np.where(cwt_result &gt; best_threshold, cwt_result, 0)\ncwt_negative = np.where(cwt_result &lt; -best_threshold, cwt_result, 0)\nbuy_signal = pd.Series(np.sum(cwt_positive, axis=0), index=stock_data.index)\nsell_signal = pd.Series(-np.sum(cwt_negative, axis=0), index=stock_data.index)\ncross_above = (buy_signal &gt;= sell_signal) &amp; (buy_signal.shift(1) &lt; sell_signal.shift(1))\ncross_below = (buy_signal &lt;= sell_signal) &amp; (buy_signal.shift(1) &gt; sell_signal.shift(1))\n\n# Plot the stock prices and buy\/sell signals\nplt.figure(figsize=(30, 6))\nplt.plot(stock_data.index, stock_data&#91;'Close'], label='Close Prices', alpha=0.5)\nplt.scatter(stock_data.index&#91;cross_above], stock_data&#91;'Close']&#91;cross_above], label='Buy Signal', marker='^', color='g')\nplt.scatter(stock_data.index&#91;cross_below], stock_data&#91;'Close']&#91;cross_below], label='Sell Signal', marker='v', color='r')\nplt.title(f'{ticker} Historical Close Prices with Wavelet Transform Buy and Sell Signals')\nplt.legend()\nplt.show()<\/code><\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft\" id=\"7a6e\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.readmedium.com\/v2\/resize:fit:800\/1*EI2maXvG0MSnErP_ADRUtQ.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p>\u5982\u56fe\u663e\u793a\uff0c\u6211\u4eec\u589e\u5f3a\u4e86 ASML.AS 2018 \u5e74\u81f3 2023 \u5e74\u5386\u53f2\u6536\u76d8\u4ef7\u7684\u53ef\u89c6\u5316\uff0c\u7a81\u51fa\u663e\u793a\u4e86\u4e3a\u63d0\u9ad8\u4ea4\u6613\u6027\u80fd\u800c\u4f18\u5316\u5c0f\u6ce2\u53d8\u6362\u53c2\u6570\u540e\u83b7\u5f97\u7684\u4e70\u5165\u548c\u5356\u51fa\u4fe1\u53f7\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"5eb2\"><strong><br>\u4e09\u3001\u89e3\u91ca\u548c\u5206\u6790<\/strong><\/h2>\n\n\n\n<p id=\"05eb\">\u5728\u5bf9\u80a1\u7968\u6570\u636e\u8fdb\u884c\u5c0f\u6ce2\u53d8\u6362\u5e76\u4f7f\u7528\u4f18\u5316\u53c2\u6570\u5bf9\u5176\u8fdb\u884c\u6539\u8fdb\u540e\uff0c\u6211\u4eec\u5f97\u5230\u4e86\u4e00\u7cfb\u5217\u4e70\u5165\u548c\u5356\u51fa\u4fe1\u53f7\u3002\u5982\u4e0b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5bf9\u5e02\u573a\u566a\u97f3\u7684\u654f\u611f\u6027\uff1a<\/strong>\u4e0e\u5176\u4ed6\u6280\u672f\u6307\u6807\u4e00\u6837\uff0c\u5c0f\u6ce2\u53d8\u6362\u4e5f\u4f1a\u53d7\u5230\u5e02\u573a\u566a\u97f3\u7684\u5f71\u54cd\u3002\u4e0d\u8fc7\uff0c\u5c0f\u6ce2\u53d8\u6362\u7684\u591a\u5c3a\u5ea6\u7279\u6027\u63d0\u4f9b\u4e86\u4e00\u5b9a\u7a0b\u5ea6\u7684\u5f39\u6027\uff0c\u4f7f\u5176\u80fd\u591f\u7a81\u51fa\u771f\u6b63\u7684\u6a21\u5f0f\uff0c\u540c\u65f6\u6709\u53ef\u80fd\u8fc7\u6ee4\u6389\u77ed\u671f\u6ce2\u52a8\u3002<\/li>\n\n\n\n<li><strong>\u5468\u671f\u6027\u6a21\u5f0f\uff1a<\/strong>\u80a1\u7968\u7ecf\u5e38\u8868\u73b0\u51fa\u5468\u671f\u6027\u884c\u4e3a&#8211;\u5b63\u5ea6\u8d22\u52a1\u62a5\u544a\u3001\u5e74\u5ea6\u5e02\u573a\u8d8b\u52bf\u7b49\u3002\u5c0f\u6ce2\u80fd\u591f\u6355\u6349\u4e0d\u540c\u5c3a\u5ea6\u7684\u6b64\u7c7b\u884c\u4e3a\uff0c\u5728\u9884\u6d4b\u672a\u6765\u8d70\u52bf\u65b9\u9762\u5177\u6709\u663e\u8457\u4f18\u52bf\u3002<\/li>\n\n\n\n<li><strong>\u6027\u80fd\u6307\u6807\uff1a<\/strong>\u867d\u7136\u6211\u4eec\u7684\u4f18\u5316\u63d0\u9ad8\u4e86\u5386\u53f2\u4e1a\u7ee9\uff0c\u4f46\u5728\u6837\u672c\u5916\u6570\u636e\u4e0a\u9a8c\u8bc1\u8be5\u7b56\u7565\u81f3\u5173\u91cd\u8981\u3002\u5386\u53f2\u6570\u636e\u4e0a\u7684\u8868\u73b0\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u672a\u6765\u4e5f\u4f1a\u51fa\u73b0\u7c7b\u4f3c\u7684\u7ed3\u679c\u3002\u610f\u8bc6\u5230\u6f5c\u5728\u7684\u8fc7\u5ea6\u62df\u5408\u81f3\u5173\u91cd\u8981\u3002<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"8cb4\"><strong>\u56db\u3001\u53ef\u80fd\u7684\u6539\u8fdb\u548c\u6269\u5c55<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u66ff\u4ee3\u5c0f\u6ce2\uff1a<\/strong>\u6211\u4eec\u4f7f\u7528\u7684\u662f Ricker \u5c0f\u6ce2\uff0c\u4f46\u5176\u4ed6\u4e00\u4e9b\u5c0f\u6ce2\u7cfb\u5217\uff0c\u5982 Daubechies \u6216 Haar\uff0c\u53ef\u80fd\u4f1a\u63d0\u4f9b\u4e0d\u540c\u7684\u89c1\u89e3\u3002\u63a2\u7d22\u8fd9\u4e9b\u5c0f\u6ce2\u53ef\u80fd\u662f\u4e00\u4e2a\u4ee4\u4eba\u5174\u594b\u7684\u9014\u5f84\u3002<\/li>\n\n\n\n<li><strong>\u7ed3\u5408\u5176\u4ed6\u6307\u6807\uff1a<\/strong>\u867d\u7136\u5c0f\u6ce2\u53d8\u6362\u63d0\u4f9b\u4e86\u4e00\u4e2a\u72ec\u7279\u7684\u89c6\u89d2\uff0c\u4f46\u5c06\u5176\u4e0e\u5176\u4ed6\u6280\u672f\u6307\u6807\u76f8\u7ed3\u5408\u53ef\u80fd\u4f1a\u52a0\u5f3a\u51b3\u7b56\u8fc7\u7a0b\u3002<\/li>\n\n\n\n<li><strong>\u673a\u5668\u5b66\u4e60\u96c6\u6210\uff1a<\/strong>\u5229\u7528\u673a\u5668\u5b66\u4e60\u7b97\u6cd5\u6709\u52a9\u4e8e\u66f4\u51c6\u786e\u5730\u9884\u6d4b\u4e70\u5356\u4fe1\u53f7\u3002\u5c0f\u6ce2\u7cfb\u6570\u53ef\u4f5c\u4e3a\u51b3\u7b56\u6811\u3001\u795e\u7ecf\u7f51\u7edc\u7b49\u6a21\u578b\u7684\u7279\u5f81\u3002<\/li>\n\n\n\n<li><strong>\u81ea\u9002\u5e94\u9608\u503c\u6cd5\uff1a<\/strong>\u4e0e\u9759\u6001\u9608\u503c\u76f8\u6bd4\uff0c\u9002\u5e94\u4e0d\u65ad\u53d8\u5316\u7684\u5e02\u573a\u6761\u4ef6\u7684\u52a8\u6001\u9608\u503c\u65b9\u6cd5\u53ef\u80fd\u4f1a\u63d0\u9ad8\u4fe1\u53f7\u7684\u53ef\u9760\u6027\u3002<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u4e94\u3001\u89c2\u70b9\u56de\u987e<\/strong><\/h2>\n\n\n\n<p>\u5c0f\u6ce2\u53d8\u6362\u4e3a\u5206\u6790\u80a1\u5e02\u6570\u636e\u63d0\u4f9b\u4e86\u4e00\u4e2a\u72ec\u7279\u7684\u89c6\u89d2\uff0c\u517c\u987e\u4e86\u65f6\u95f4\u548c\u9891\u7387\u7684\u6d1e\u5bdf\u529b\u3002\u867d\u7136\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e2a\u5168\u65b0\u7684\u89c6\u89d2\uff0c\u4f46\u8be5\u6280\u672f\u5e76\u975e\u4e07\u65e0\u4e00\u5931&#8211;\u9009\u62e9\u6b63\u786e\u7684\u53c2\u6570\u81f3\u5173\u91cd\u8981\u3002\u8fd9\u79cd\u65b9\u6cd5\u53ea\u662f\u4e86\u89e3\u5e02\u573a\u52a8\u5411\u7684\u4f17\u591a\u5de5\u5177\u4e4b\u4e00\u3002\u4ea4\u6613\u8005\u5e94\u5c06\u5c0f\u6ce2\u5206\u6790\u4e0e\u5176\u4ed6\u65b9\u6cd5\u76f8\u7ed3\u5408\uff0c\u4ee5\u83b7\u5f97\u66f4\u654f\u9510\u7684\u6d1e\u5bdf\u529b\u3002\u6211\u4eec\u7684\u5c0f\u6ce2\u5206\u6790\u4e4b\u65c5\u5f3a\u8c03\u4e86\u91d1\u878d\u7814\u7a76\u7684\u4e0d\u65ad\u521b\u65b0\uff0c\u59cb\u7ec8\u8ffd\u6c42\u66f4\u6e05\u6670\u7684\u7406\u89e3\u548c\u9884\u6d4b\u80fd\u529b\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5c0f\u6ce2\u53d8\u6362\u5728\u5904\u7406\u91d1\u878d\u65f6\u95f4\u5e8f\u5217\u6570\u636e\u65f6\u4f18\u4e8e\u5085\u7acb\u53f6\u53d8\u6362<\/strong>\uff0c\u56e0\u4e3a\u5b83\u80fd\u591f\u540c\u65f6\u6355\u6349\u65f6\u95f4\u548c\u9891\u7387\u4fe1\u606f\uff0c\u9002\u5e94\u91d1\u878d\u6570\u636e\u7684\u975e\u7a33\u6001\u7279\u6027\u3002<\/li>\n\n\n\n<li><strong>\u8fde\u7eed\u5c0f\u6ce2\u53d8\u6362\uff08CWT\uff09\u662f\u4e00\u79cd\u6709\u6548\u7684\u5de5\u5177<\/strong>\uff0c\u7528\u4e8e\u4ece\u80a1\u7968\u4ef7\u683c\u6570\u636e\u4e2d\u63d0\u53d6\u6f5c\u5728\u7684\u4e70\u5165\u548c\u5356\u51fa\u4fe1\u53f7\u3002<\/li>\n\n\n\n<li><strong>\u53c2\u6570\u9009\u62e9\u5bf9\u5c0f\u6ce2\u53d8\u6362\u7684\u6548\u679c\u81f3\u5173\u91cd\u8981<\/strong>\uff0c\u9700\u8981\u901a\u8fc7\u56de\u6eaf\u6d4b\u8bd5\u6765\u4f18\u5316\u5c0f\u6ce2\u7684\u5bbd\u5ea6\u548c\u9608\u503c\uff0c\u4ee5\u63d0\u9ad8\u4ea4\u6613\u7b56\u7565\u7684\u5386\u53f2\u6027\u80fd\u3002<\/li>\n\n\n\n<li><strong>\u5c0f\u6ce2\u53d8\u6362\u53ef\u4ee5\u4e0e\u5176\u4ed6\u6280\u672f\u5206\u6790\u65b9\u6cd5\u76f8\u7ed3\u5408<\/strong>\uff0c\u4f8b\u5982\u5176\u4ed6\u6280\u672f\u6307\u6807\u6216\u673a\u5668\u5b66\u4e60\u7b97\u6cd5\uff0c\u4ee5\u589e\u5f3a\u9884\u6d4b\u7684\u51c6\u786e\u6027\u548c\u53ef\u9760\u6027\u3002<\/li>\n\n\n\n<li><strong>\u5c0f\u6ce2\u5206\u6790\u5728\u91d1\u878d\u7814\u7a76\u4e2d\u662f\u4e00\u4e2a\u4e0d\u65ad\u53d1\u5c55\u7684\u9886\u57df<\/strong>\uff0c\u6709\u52a9\u4e8e\u66f4\u597d\u5730\u7406\u89e3\u5e02\u573a\u52a8\u6001\uff0c\u5e76\u63d0\u4f9b\u65b0\u7684\u9884\u6d4b\u5de5\u5177\u3002<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>\u611f\u8c22\u60a8\u9605\u8bfb\u5230\u6700\u540e\uff0c\u5e0c\u671b\u672c\u6587\u80fd\u7ed9\u60a8\u5e26\u6765\u65b0\u7684\u6536\u83b7\uff0c\u975e\u5e38\u611f\u8c22\u3002\u5982\u679c\u5bf9\u6587\u4e2d\u7684\u5185\u5bb9\u6709\u4efb\u4f55\u7591\u95ee\uff0c\u8bf7\u7ed9\u6211\u7559\u8a00\uff0c\u5fc5\u590d\u3002<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-cyan-bluish-gray-color\">\u672c<\/mark><\/strong><strong><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-cyan-bluish-gray-color\">\u6587\u5185\u5bb9\u4ec5\u4ec5\u662f\u6280\u672f\u63a2\u8ba8\u548c\u5b66\u4e60\uff0c\u5e76\u4e0d\u6784\u6210\u4efb\u4f55\u6295\u8d44\u5efa\u8bae\u3002<\/mark><\/strong><\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-cyan-bluish-gray-color\">\u8f6c\u53d1\u8bf7\u6ce8\u660e\u539f\u4f5c\u8005\u548c\u51fa\u5904\u3002<\/mark><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4f5c\u8005\uff1a\u8001\u4f59\u635e\u9c7c \u539f\u521b\u4e0d\u6613\uff0c\u8f6c\u8f7d\u8bf7\u6807\u660e\u51fa\u5904\u53ca\u539f\u4f5c\u8005\u3002&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/laoyulaoyu.com\/index.php\/2024\/11\/09\/%e5%80%9f%e5%8a%a9%e5%b0%8f%e6%b3%a2%e5%8f%98%e6%8d%a2%e4%bf%a1%e5%8f%b7%ef%bc%8c%e9%a9%be%e9%a9%ad%e8%82%a1%e4%bb%b7%e6%b3%a2%e5%8a%a8\/\">Continue reading<span class=\"screen-reader-text\">\u501f\u52a9\u5c0f\u6ce2\u53d8\u6362\u4fe1\u53f7\uff0c\u9a7e\u9a6d\u80a1\u4ef7\u6ce2\u52a8<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[4,5,6],"class_list":{"0":"post-1611","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"hentry","6":"category-aiinvest","7":"tag-ai","9":"tag-6","10":"entry"},"_links":{"self":[{"href":"https:\/\/laoyulaoyu.com\/index.php\/wp-json\/wp\/v2\/posts\/1611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/laoyulaoyu.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/laoyulaoyu.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/laoyulaoyu.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/laoyulaoyu.com\/index.php\/wp-json\/wp\/v2\/comments?post=1611"}],"version-history":[{"count":2,"href":"https:\/\/laoyulaoyu.com\/index.php\/wp-json\/wp\/v2\/posts\/1611\/revisions"}],"predecessor-version":[{"id":1613,"href":"https:\/\/laoyulaoyu.com\/index.php\/wp-json\/wp\/v2\/posts\/1611\/revisions\/1613"}],"wp:attachment":[{"href":"https:\/\/laoyulaoyu.com\/index.php\/wp-json\/wp\/v2\/media?parent=1611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/laoyulaoyu.com\/index.php\/wp-json\/wp\/v2\/categories?post=1611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/laoyulaoyu.com\/index.php\/wp-json\/wp\/v2\/tags?post=1611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}