尝试构建回测模块
This commit is contained in:
95
poetry.lock
generated
95
poetry.lock
generated
@@ -15,14 +15,14 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "akshare"
|
||||
version = "1.15.84"
|
||||
version = "1.15.85"
|
||||
description = "AKShare is an elegant and simple financial data interface library for Python, built for human beings!"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "akshare-1.15.84-py3-none-any.whl", hash = "sha256:437f12ba66236f2863292ae4d253f974de2fd99f7124e560b3cdd48a8be174b9"},
|
||||
{file = "akshare-1.15.84.tar.gz", hash = "sha256:51c025e2e582591f973a5d1fb9dd9a248164005ae547e9142ac771bae25153eb"},
|
||||
{file = "akshare-1.15.85-py3-none-any.whl", hash = "sha256:46c2c96027a9588d838c41b7613cef4cee049d9961f9d592fc8165ab4b460343"},
|
||||
{file = "akshare-1.15.85.tar.gz", hash = "sha256:fad37fe3684a8d026d8dab802580f393d69969d35fd23106c72757a6dab22f7a"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -223,6 +223,20 @@ files = [
|
||||
[package.extras]
|
||||
dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata"]
|
||||
|
||||
[[package]]
|
||||
name = "backtrader"
|
||||
version = "1.9.78.123"
|
||||
description = "BackTesting Engine"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "backtrader-1.9.78.123-py2.py3-none-any.whl", hash = "sha256:9a07a516b0de9155539a35c56e9404d8711dd7020b3d37b30495e83e1b9d5dfd"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
plotting = ["matplotlib"]
|
||||
|
||||
[[package]]
|
||||
name = "beautifulsoup4"
|
||||
version = "4.13.3"
|
||||
@@ -2975,6 +2989,64 @@ files = [
|
||||
{file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "scipy"
|
||||
version = "1.15.1"
|
||||
description = "Fundamental algorithms for scientific computing in Python"
|
||||
optional = false
|
||||
python-versions = ">=3.10"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "scipy-1.15.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:c64ded12dcab08afff9e805a67ff4480f5e69993310e093434b10e85dc9d43e1"},
|
||||
{file = "scipy-1.15.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5b190b935e7db569960b48840e5bef71dc513314cc4e79a1b7d14664f57fd4ff"},
|
||||
{file = "scipy-1.15.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:4b17d4220df99bacb63065c76b0d1126d82bbf00167d1730019d2a30d6ae01ea"},
|
||||
{file = "scipy-1.15.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:63b9b6cd0333d0eb1a49de6f834e8aeaefe438df8f6372352084535ad095219e"},
|
||||
{file = "scipy-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f151e9fb60fbf8e52426132f473221a49362091ce7a5e72f8aa41f8e0da4f25"},
|
||||
{file = "scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21e10b1dd56ce92fba3e786007322542361984f8463c6d37f6f25935a5a6ef52"},
|
||||
{file = "scipy-1.15.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5dff14e75cdbcf07cdaa1c7707db6017d130f0af9ac41f6ce443a93318d6c6e0"},
|
||||
{file = "scipy-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:f82fcf4e5b377f819542fbc8541f7b5fbcf1c0017d0df0bc22c781bf60abc4d8"},
|
||||
{file = "scipy-1.15.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:5bd8d27d44e2c13d0c1124e6a556454f52cd3f704742985f6b09e75e163d20d2"},
|
||||
{file = "scipy-1.15.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:be3deeb32844c27599347faa077b359584ba96664c5c79d71a354b80a0ad0ce0"},
|
||||
{file = "scipy-1.15.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:5eb0ca35d4b08e95da99a9f9c400dc9f6c21c424298a0ba876fdc69c7afacedf"},
|
||||
{file = "scipy-1.15.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:74bb864ff7640dea310a1377d8567dc2cb7599c26a79ca852fc184cc851954ac"},
|
||||
{file = "scipy-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:667f950bf8b7c3a23b4199db24cb9bf7512e27e86d0e3813f015b74ec2c6e3df"},
|
||||
{file = "scipy-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395be70220d1189756068b3173853029a013d8c8dd5fd3d1361d505b2aa58fa7"},
|
||||
{file = "scipy-1.15.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ce3a000cd28b4430426db2ca44d96636f701ed12e2b3ca1f2b1dd7abdd84b39a"},
|
||||
{file = "scipy-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fe1d95944f9cf6ba77aa28b82dd6bb2a5b52f2026beb39ecf05304b8392864b"},
|
||||
{file = "scipy-1.15.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c09aa9d90f3500ea4c9b393ee96f96b0ccb27f2f350d09a47f533293c78ea776"},
|
||||
{file = "scipy-1.15.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0ac102ce99934b162914b1e4a6b94ca7da0f4058b6d6fd65b0cef330c0f3346f"},
|
||||
{file = "scipy-1.15.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:09c52320c42d7f5c7748b69e9f0389266fd4f82cf34c38485c14ee976cb8cb04"},
|
||||
{file = "scipy-1.15.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:cdde8414154054763b42b74fe8ce89d7f3d17a7ac5dd77204f0e142cdc9239e9"},
|
||||
{file = "scipy-1.15.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c9d8fc81d6a3b6844235e6fd175ee1d4c060163905a2becce8e74cb0d7554ce"},
|
||||
{file = "scipy-1.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fb57b30f0017d4afa5fe5f5b150b8f807618819287c21cbe51130de7ccdaed2"},
|
||||
{file = "scipy-1.15.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:491d57fe89927fa1aafbe260f4cfa5ffa20ab9f1435025045a5315006a91b8f5"},
|
||||
{file = "scipy-1.15.1-cp312-cp312-win_amd64.whl", hash = "sha256:900f3fa3db87257510f011c292a5779eb627043dd89731b9c461cd16ef76ab3d"},
|
||||
{file = "scipy-1.15.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:100193bb72fbff37dbd0bf14322314fc7cbe08b7ff3137f11a34d06dc0ee6b85"},
|
||||
{file = "scipy-1.15.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:2114a08daec64980e4b4cbdf5bee90935af66d750146b1d2feb0d3ac30613692"},
|
||||
{file = "scipy-1.15.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6b3e71893c6687fc5e29208d518900c24ea372a862854c9888368c0b267387ab"},
|
||||
{file = "scipy-1.15.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:837299eec3d19b7e042923448d17d95a86e43941104d33f00da7e31a0f715d3c"},
|
||||
{file = "scipy-1.15.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82add84e8a9fb12af5c2c1a3a3f1cb51849d27a580cb9e6bd66226195142be6e"},
|
||||
{file = "scipy-1.15.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:070d10654f0cb6abd295bc96c12656f948e623ec5f9a4eab0ddb1466c000716e"},
|
||||
{file = "scipy-1.15.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:55cc79ce4085c702ac31e49b1e69b27ef41111f22beafb9b49fea67142b696c4"},
|
||||
{file = "scipy-1.15.1-cp313-cp313-win_amd64.whl", hash = "sha256:c352c1b6d7cac452534517e022f8f7b8d139cd9f27e6fbd9f3cbd0bfd39f5bef"},
|
||||
{file = "scipy-1.15.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0458839c9f873062db69a03de9a9765ae2e694352c76a16be44f93ea45c28d2b"},
|
||||
{file = "scipy-1.15.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:af0b61c1de46d0565b4b39c6417373304c1d4f5220004058bdad3061c9fa8a95"},
|
||||
{file = "scipy-1.15.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:71ba9a76c2390eca6e359be81a3e879614af3a71dfdabb96d1d7ab33da6f2364"},
|
||||
{file = "scipy-1.15.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14eaa373c89eaf553be73c3affb11ec6c37493b7eaaf31cf9ac5dffae700c2e0"},
|
||||
{file = "scipy-1.15.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f735bc41bd1c792c96bc426dece66c8723283695f02df61dcc4d0a707a42fc54"},
|
||||
{file = "scipy-1.15.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2722a021a7929d21168830790202a75dbb20b468a8133c74a2c0230c72626b6c"},
|
||||
{file = "scipy-1.15.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc7136626261ac1ed988dca56cfc4ab5180f75e0ee52e58f1e6aa74b5f3eacd5"},
|
||||
{file = "scipy-1.15.1.tar.gz", hash = "sha256:033a75ddad1463970c96a88063a1df87ccfddd526437136b6ee81ff0312ebdf6"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
numpy = ">=1.23.5,<2.5"
|
||||
|
||||
[package.extras]
|
||||
dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"]
|
||||
doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.16.5)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"]
|
||||
test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
|
||||
|
||||
[[package]]
|
||||
name = "send2trash"
|
||||
version = "1.8.3"
|
||||
@@ -3208,6 +3280,21 @@ numpy = "*"
|
||||
test = ["pandas", "pytest", "pytest-cov"]
|
||||
ujson = ["ujson (>=5.5.0)"]
|
||||
|
||||
[[package]]
|
||||
name = "ta-lib"
|
||||
version = "0.6.3"
|
||||
description = "Python wrapper for TA-Lib"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "ta_lib-0.6.3.tar.gz", hash = "sha256:0c628db09b3fab6e5c26979e608b674e7aecc10359c82ba8d53f729767a856ac"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
numpy = "*"
|
||||
setuptools = "*"
|
||||
|
||||
[[package]]
|
||||
name = "tabulate"
|
||||
version = "0.9.0"
|
||||
@@ -3498,4 +3585,4 @@ test = ["pytest", "pytest-cov"]
|
||||
[metadata]
|
||||
lock-version = "2.1"
|
||||
python-versions = "^3.12"
|
||||
content-hash = "9fbcdd3a9fba083ae2a2138f3b82492b3559f8dcd3a7fde8ab521f36387327af"
|
||||
content-hash = "40ca96657ad381e086f3ea182f88c07ff7d44daa425efe1942266d112701c0ba"
|
||||
|
||||
@@ -14,6 +14,9 @@ jupyter = "^1.1.1"
|
||||
matplotlib = "^3.10.0"
|
||||
prophet = "^1.1.6"
|
||||
mplfinance = "^0.12.10b0"
|
||||
scipy = "^1.15.1"
|
||||
ta-lib = "^0.6.3"
|
||||
backtrader = "^1.9.78.123"
|
||||
|
||||
|
||||
[build-system]
|
||||
|
||||
37
回测/backtrader.ipynb
Normal file
37
回测/backtrader.ipynb
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "initial_id",
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
""
|
||||
]
|
||||
}
|
||||
],
|
||||
"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
|
||||
}
|
||||
587
材料准备/ta-lib.ipynb
Normal file
587
材料准备/ta-lib.ipynb
Normal file
@@ -0,0 +1,587 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"id": "initial_id",
|
||||
"metadata": {
|
||||
"collapsed": true,
|
||||
"ExecuteTime": {
|
||||
"end_time": "2025-02-11T06:31:19.433336Z",
|
||||
"start_time": "2025-02-11T06:31:18.884130Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"\n",
|
||||
"# source_df = \\\n",
|
||||
"# pd.read_csv(\"C:\\\\Users\\\\lanyuanxiaoyao\\\\SynologyDrive\\\\data\\\\Tushare\\\\日线行情 1990-2024\\\\分组行情\\\\000001.SZ.csv\") \\\n",
|
||||
"source_df = pd.read_csv(\"/Users/lanyuanxiaoyao/SynologyDrive/data/Tushare/日线行情 1990-2024/分组行情/600519.SH.csv\") \\\n",
|
||||
" [[\"trade_date\", \"vol\", \"open_qfq\", \"close_qfq\", \"high_qfq\", \"low_qfq\", \"macd\", \"macd_dif\", \"macd_dea\"]]\n",
|
||||
"df = pd.DataFrame()\n",
|
||||
"df[[\"date\", \"volume\", \"open\", \"close\", \"high\", \"low\", \"macd\", \"macd_dif\", \"macd_dea\"]] = \\\n",
|
||||
" source_df[[\"trade_date\", \"vol\", \"open_qfq\", \"close_qfq\", \"high_qfq\", \"low_qfq\", \"macd\", \"macd_dif\", \"macd_dea\"]]\n",
|
||||
"df[\"datetime\"] = pd.to_datetime(df[\"date\"], format=\"%Y%m%d\")\n",
|
||||
"df[\"datetime_text\"] = df[\"datetime\"].apply(lambda x: x.strftime(\"%Y%m%d\"))\n",
|
||||
"df.sort_values(by='datetime', inplace=True)\n",
|
||||
"df"
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
" date volume open close high low \\\n",
|
||||
"2187 20010827 406318.00 4.23675 4.36443 4.63820 4.03295 \n",
|
||||
"2188 20010828 129647.79 4.29568 4.52525 4.54244 4.24902 \n",
|
||||
"2189 20010829 53252.75 4.53999 4.46632 4.54244 4.43195 \n",
|
||||
"2190 20010830 48013.06 4.45405 4.55472 4.60505 4.41967 \n",
|
||||
"2191 20010831 23231.48 4.56086 4.54367 4.61856 4.51789 \n",
|
||||
"... ... ... ... ... ... ... \n",
|
||||
"2182 20241225 17123.39 1538.80000 1530.00000 1538.80000 1526.10000 \n",
|
||||
"2183 20241226 18286.51 1534.00000 1527.79000 1538.78000 1523.00000 \n",
|
||||
"2184 20241227 20759.32 1528.90000 1528.97000 1536.00000 1519.50000 \n",
|
||||
"2185 20241230 25129.82 1533.97000 1525.00000 1543.96000 1525.00000 \n",
|
||||
"2186 20241231 39354.45 1525.40000 1524.00000 1545.00000 1522.01000 \n",
|
||||
"\n",
|
||||
" macd macd_dif macd_dea datetime datetime_text \n",
|
||||
"2187 0.000 0.000 0.000 2001-08-27 20010827 \n",
|
||||
"2188 0.021 0.013 0.003 2001-08-28 20010828 \n",
|
||||
"2189 0.025 0.018 0.006 2001-08-29 20010829 \n",
|
||||
"2190 0.037 0.029 0.010 2001-08-30 20010830 \n",
|
||||
"2191 0.042 0.036 0.016 2001-08-31 20010831 \n",
|
||||
"... ... ... ... ... ... \n",
|
||||
"2182 5.430 5.063 2.348 2024-12-25 20241225 \n",
|
||||
"2183 4.192 4.968 2.872 2024-12-26 20241226 \n",
|
||||
"2184 3.295 4.931 3.283 2024-12-27 20241227 \n",
|
||||
"2185 1.993 4.529 3.533 2024-12-30 20241230 \n",
|
||||
"2186 0.880 4.083 3.643 2024-12-31 20241231 \n",
|
||||
"\n",
|
||||
"[5591 rows x 11 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>date</th>\n",
|
||||
" <th>volume</th>\n",
|
||||
" <th>open</th>\n",
|
||||
" <th>close</th>\n",
|
||||
" <th>high</th>\n",
|
||||
" <th>low</th>\n",
|
||||
" <th>macd</th>\n",
|
||||
" <th>macd_dif</th>\n",
|
||||
" <th>macd_dea</th>\n",
|
||||
" <th>datetime</th>\n",
|
||||
" <th>datetime_text</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>2187</th>\n",
|
||||
" <td>20010827</td>\n",
|
||||
" <td>406318.00</td>\n",
|
||||
" <td>4.23675</td>\n",
|
||||
" <td>4.36443</td>\n",
|
||||
" <td>4.63820</td>\n",
|
||||
" <td>4.03295</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>2001-08-27</td>\n",
|
||||
" <td>20010827</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2188</th>\n",
|
||||
" <td>20010828</td>\n",
|
||||
" <td>129647.79</td>\n",
|
||||
" <td>4.29568</td>\n",
|
||||
" <td>4.52525</td>\n",
|
||||
" <td>4.54244</td>\n",
|
||||
" <td>4.24902</td>\n",
|
||||
" <td>0.021</td>\n",
|
||||
" <td>0.013</td>\n",
|
||||
" <td>0.003</td>\n",
|
||||
" <td>2001-08-28</td>\n",
|
||||
" <td>20010828</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2189</th>\n",
|
||||
" <td>20010829</td>\n",
|
||||
" <td>53252.75</td>\n",
|
||||
" <td>4.53999</td>\n",
|
||||
" <td>4.46632</td>\n",
|
||||
" <td>4.54244</td>\n",
|
||||
" <td>4.43195</td>\n",
|
||||
" <td>0.025</td>\n",
|
||||
" <td>0.018</td>\n",
|
||||
" <td>0.006</td>\n",
|
||||
" <td>2001-08-29</td>\n",
|
||||
" <td>20010829</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2190</th>\n",
|
||||
" <td>20010830</td>\n",
|
||||
" <td>48013.06</td>\n",
|
||||
" <td>4.45405</td>\n",
|
||||
" <td>4.55472</td>\n",
|
||||
" <td>4.60505</td>\n",
|
||||
" <td>4.41967</td>\n",
|
||||
" <td>0.037</td>\n",
|
||||
" <td>0.029</td>\n",
|
||||
" <td>0.010</td>\n",
|
||||
" <td>2001-08-30</td>\n",
|
||||
" <td>20010830</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2191</th>\n",
|
||||
" <td>20010831</td>\n",
|
||||
" <td>23231.48</td>\n",
|
||||
" <td>4.56086</td>\n",
|
||||
" <td>4.54367</td>\n",
|
||||
" <td>4.61856</td>\n",
|
||||
" <td>4.51789</td>\n",
|
||||
" <td>0.042</td>\n",
|
||||
" <td>0.036</td>\n",
|
||||
" <td>0.016</td>\n",
|
||||
" <td>2001-08-31</td>\n",
|
||||
" <td>20010831</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",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2182</th>\n",
|
||||
" <td>20241225</td>\n",
|
||||
" <td>17123.39</td>\n",
|
||||
" <td>1538.80000</td>\n",
|
||||
" <td>1530.00000</td>\n",
|
||||
" <td>1538.80000</td>\n",
|
||||
" <td>1526.10000</td>\n",
|
||||
" <td>5.430</td>\n",
|
||||
" <td>5.063</td>\n",
|
||||
" <td>2.348</td>\n",
|
||||
" <td>2024-12-25</td>\n",
|
||||
" <td>20241225</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2183</th>\n",
|
||||
" <td>20241226</td>\n",
|
||||
" <td>18286.51</td>\n",
|
||||
" <td>1534.00000</td>\n",
|
||||
" <td>1527.79000</td>\n",
|
||||
" <td>1538.78000</td>\n",
|
||||
" <td>1523.00000</td>\n",
|
||||
" <td>4.192</td>\n",
|
||||
" <td>4.968</td>\n",
|
||||
" <td>2.872</td>\n",
|
||||
" <td>2024-12-26</td>\n",
|
||||
" <td>20241226</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2184</th>\n",
|
||||
" <td>20241227</td>\n",
|
||||
" <td>20759.32</td>\n",
|
||||
" <td>1528.90000</td>\n",
|
||||
" <td>1528.97000</td>\n",
|
||||
" <td>1536.00000</td>\n",
|
||||
" <td>1519.50000</td>\n",
|
||||
" <td>3.295</td>\n",
|
||||
" <td>4.931</td>\n",
|
||||
" <td>3.283</td>\n",
|
||||
" <td>2024-12-27</td>\n",
|
||||
" <td>20241227</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2185</th>\n",
|
||||
" <td>20241230</td>\n",
|
||||
" <td>25129.82</td>\n",
|
||||
" <td>1533.97000</td>\n",
|
||||
" <td>1525.00000</td>\n",
|
||||
" <td>1543.96000</td>\n",
|
||||
" <td>1525.00000</td>\n",
|
||||
" <td>1.993</td>\n",
|
||||
" <td>4.529</td>\n",
|
||||
" <td>3.533</td>\n",
|
||||
" <td>2024-12-30</td>\n",
|
||||
" <td>20241230</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2186</th>\n",
|
||||
" <td>20241231</td>\n",
|
||||
" <td>39354.45</td>\n",
|
||||
" <td>1525.40000</td>\n",
|
||||
" <td>1524.00000</td>\n",
|
||||
" <td>1545.00000</td>\n",
|
||||
" <td>1522.01000</td>\n",
|
||||
" <td>0.880</td>\n",
|
||||
" <td>4.083</td>\n",
|
||||
" <td>3.643</td>\n",
|
||||
" <td>2024-12-31</td>\n",
|
||||
" <td>20241231</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"<p>5591 rows × 11 columns</p>\n",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"execution_count": 2
|
||||
},
|
||||
{
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2025-02-11T06:33:12.365001Z",
|
||||
"start_time": "2025-02-11T06:33:12.329227Z"
|
||||
}
|
||||
},
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"import talib\n",
|
||||
"\n",
|
||||
"dif, dea, hist = talib.MACD(df[\"close\"], fastperiod=12, slowperiod=26, signalperiod=9)\n",
|
||||
"\n",
|
||||
"# 将结果添加到数据框\n",
|
||||
"df['DIF'] = dif\n",
|
||||
"df['DEA'] = dea\n",
|
||||
"df['MACD'] = hist\n",
|
||||
"\n",
|
||||
"#根据close列计算macd值\n",
|
||||
"talib.SMA(df[\"close\"], timeperiod=26, step=10)\n",
|
||||
"\n",
|
||||
"df"
|
||||
],
|
||||
"id": "72b1c0c3f57e8b8e",
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
" date volume open close high low \\\n",
|
||||
"2187 20010827 406318.00 4.23675 4.36443 4.63820 4.03295 \n",
|
||||
"2188 20010828 129647.79 4.29568 4.52525 4.54244 4.24902 \n",
|
||||
"2189 20010829 53252.75 4.53999 4.46632 4.54244 4.43195 \n",
|
||||
"2190 20010830 48013.06 4.45405 4.55472 4.60505 4.41967 \n",
|
||||
"2191 20010831 23231.48 4.56086 4.54367 4.61856 4.51789 \n",
|
||||
"... ... ... ... ... ... ... \n",
|
||||
"2182 20241225 17123.39 1538.80000 1530.00000 1538.80000 1526.10000 \n",
|
||||
"2183 20241226 18286.51 1534.00000 1527.79000 1538.78000 1523.00000 \n",
|
||||
"2184 20241227 20759.32 1528.90000 1528.97000 1536.00000 1519.50000 \n",
|
||||
"2185 20241230 25129.82 1533.97000 1525.00000 1543.96000 1525.00000 \n",
|
||||
"2186 20241231 39354.45 1525.40000 1524.00000 1545.00000 1522.01000 \n",
|
||||
"\n",
|
||||
" macd macd_dif macd_dea datetime datetime_text DIF DEA \\\n",
|
||||
"2187 0.000 0.000 0.000 2001-08-27 20010827 NaN NaN \n",
|
||||
"2188 0.021 0.013 0.003 2001-08-28 20010828 NaN NaN \n",
|
||||
"2189 0.025 0.018 0.006 2001-08-29 20010829 NaN NaN \n",
|
||||
"2190 0.037 0.029 0.010 2001-08-30 20010830 NaN NaN \n",
|
||||
"2191 0.042 0.036 0.016 2001-08-31 20010831 NaN NaN \n",
|
||||
"... ... ... ... ... ... ... ... \n",
|
||||
"2182 5.430 5.063 2.348 2024-12-25 20241225 5.062711 2.347629 \n",
|
||||
"2183 4.192 4.968 2.872 2024-12-26 20241226 4.967756 2.871654 \n",
|
||||
"2184 3.295 4.931 3.283 2024-12-27 20241227 4.930880 3.283499 \n",
|
||||
"2185 1.993 4.529 3.533 2024-12-30 20241230 4.529101 3.532620 \n",
|
||||
"2186 0.880 4.083 3.643 2024-12-31 20241231 4.082931 3.642682 \n",
|
||||
"\n",
|
||||
" MACD \n",
|
||||
"2187 NaN \n",
|
||||
"2188 NaN \n",
|
||||
"2189 NaN \n",
|
||||
"2190 NaN \n",
|
||||
"2191 NaN \n",
|
||||
"... ... \n",
|
||||
"2182 2.715082 \n",
|
||||
"2183 2.096102 \n",
|
||||
"2184 1.647381 \n",
|
||||
"2185 0.996481 \n",
|
||||
"2186 0.440249 \n",
|
||||
"\n",
|
||||
"[5591 rows x 14 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>date</th>\n",
|
||||
" <th>volume</th>\n",
|
||||
" <th>open</th>\n",
|
||||
" <th>close</th>\n",
|
||||
" <th>high</th>\n",
|
||||
" <th>low</th>\n",
|
||||
" <th>macd</th>\n",
|
||||
" <th>macd_dif</th>\n",
|
||||
" <th>macd_dea</th>\n",
|
||||
" <th>datetime</th>\n",
|
||||
" <th>datetime_text</th>\n",
|
||||
" <th>DIF</th>\n",
|
||||
" <th>DEA</th>\n",
|
||||
" <th>MACD</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>2187</th>\n",
|
||||
" <td>20010827</td>\n",
|
||||
" <td>406318.00</td>\n",
|
||||
" <td>4.23675</td>\n",
|
||||
" <td>4.36443</td>\n",
|
||||
" <td>4.63820</td>\n",
|
||||
" <td>4.03295</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>2001-08-27</td>\n",
|
||||
" <td>20010827</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2188</th>\n",
|
||||
" <td>20010828</td>\n",
|
||||
" <td>129647.79</td>\n",
|
||||
" <td>4.29568</td>\n",
|
||||
" <td>4.52525</td>\n",
|
||||
" <td>4.54244</td>\n",
|
||||
" <td>4.24902</td>\n",
|
||||
" <td>0.021</td>\n",
|
||||
" <td>0.013</td>\n",
|
||||
" <td>0.003</td>\n",
|
||||
" <td>2001-08-28</td>\n",
|
||||
" <td>20010828</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2189</th>\n",
|
||||
" <td>20010829</td>\n",
|
||||
" <td>53252.75</td>\n",
|
||||
" <td>4.53999</td>\n",
|
||||
" <td>4.46632</td>\n",
|
||||
" <td>4.54244</td>\n",
|
||||
" <td>4.43195</td>\n",
|
||||
" <td>0.025</td>\n",
|
||||
" <td>0.018</td>\n",
|
||||
" <td>0.006</td>\n",
|
||||
" <td>2001-08-29</td>\n",
|
||||
" <td>20010829</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2190</th>\n",
|
||||
" <td>20010830</td>\n",
|
||||
" <td>48013.06</td>\n",
|
||||
" <td>4.45405</td>\n",
|
||||
" <td>4.55472</td>\n",
|
||||
" <td>4.60505</td>\n",
|
||||
" <td>4.41967</td>\n",
|
||||
" <td>0.037</td>\n",
|
||||
" <td>0.029</td>\n",
|
||||
" <td>0.010</td>\n",
|
||||
" <td>2001-08-30</td>\n",
|
||||
" <td>20010830</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2191</th>\n",
|
||||
" <td>20010831</td>\n",
|
||||
" <td>23231.48</td>\n",
|
||||
" <td>4.56086</td>\n",
|
||||
" <td>4.54367</td>\n",
|
||||
" <td>4.61856</td>\n",
|
||||
" <td>4.51789</td>\n",
|
||||
" <td>0.042</td>\n",
|
||||
" <td>0.036</td>\n",
|
||||
" <td>0.016</td>\n",
|
||||
" <td>2001-08-31</td>\n",
|
||||
" <td>20010831</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</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",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2182</th>\n",
|
||||
" <td>20241225</td>\n",
|
||||
" <td>17123.39</td>\n",
|
||||
" <td>1538.80000</td>\n",
|
||||
" <td>1530.00000</td>\n",
|
||||
" <td>1538.80000</td>\n",
|
||||
" <td>1526.10000</td>\n",
|
||||
" <td>5.430</td>\n",
|
||||
" <td>5.063</td>\n",
|
||||
" <td>2.348</td>\n",
|
||||
" <td>2024-12-25</td>\n",
|
||||
" <td>20241225</td>\n",
|
||||
" <td>5.062711</td>\n",
|
||||
" <td>2.347629</td>\n",
|
||||
" <td>2.715082</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2183</th>\n",
|
||||
" <td>20241226</td>\n",
|
||||
" <td>18286.51</td>\n",
|
||||
" <td>1534.00000</td>\n",
|
||||
" <td>1527.79000</td>\n",
|
||||
" <td>1538.78000</td>\n",
|
||||
" <td>1523.00000</td>\n",
|
||||
" <td>4.192</td>\n",
|
||||
" <td>4.968</td>\n",
|
||||
" <td>2.872</td>\n",
|
||||
" <td>2024-12-26</td>\n",
|
||||
" <td>20241226</td>\n",
|
||||
" <td>4.967756</td>\n",
|
||||
" <td>2.871654</td>\n",
|
||||
" <td>2.096102</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2184</th>\n",
|
||||
" <td>20241227</td>\n",
|
||||
" <td>20759.32</td>\n",
|
||||
" <td>1528.90000</td>\n",
|
||||
" <td>1528.97000</td>\n",
|
||||
" <td>1536.00000</td>\n",
|
||||
" <td>1519.50000</td>\n",
|
||||
" <td>3.295</td>\n",
|
||||
" <td>4.931</td>\n",
|
||||
" <td>3.283</td>\n",
|
||||
" <td>2024-12-27</td>\n",
|
||||
" <td>20241227</td>\n",
|
||||
" <td>4.930880</td>\n",
|
||||
" <td>3.283499</td>\n",
|
||||
" <td>1.647381</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2185</th>\n",
|
||||
" <td>20241230</td>\n",
|
||||
" <td>25129.82</td>\n",
|
||||
" <td>1533.97000</td>\n",
|
||||
" <td>1525.00000</td>\n",
|
||||
" <td>1543.96000</td>\n",
|
||||
" <td>1525.00000</td>\n",
|
||||
" <td>1.993</td>\n",
|
||||
" <td>4.529</td>\n",
|
||||
" <td>3.533</td>\n",
|
||||
" <td>2024-12-30</td>\n",
|
||||
" <td>20241230</td>\n",
|
||||
" <td>4.529101</td>\n",
|
||||
" <td>3.532620</td>\n",
|
||||
" <td>0.996481</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2186</th>\n",
|
||||
" <td>20241231</td>\n",
|
||||
" <td>39354.45</td>\n",
|
||||
" <td>1525.40000</td>\n",
|
||||
" <td>1524.00000</td>\n",
|
||||
" <td>1545.00000</td>\n",
|
||||
" <td>1522.01000</td>\n",
|
||||
" <td>0.880</td>\n",
|
||||
" <td>4.083</td>\n",
|
||||
" <td>3.643</td>\n",
|
||||
" <td>2024-12-31</td>\n",
|
||||
" <td>20241231</td>\n",
|
||||
" <td>4.082931</td>\n",
|
||||
" <td>3.642682</td>\n",
|
||||
" <td>0.440249</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"<p>5591 rows × 14 columns</p>\n",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"execution_count": 3
|
||||
}
|
||||
],
|
||||
"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
|
||||
}
|
||||
@@ -3,28 +3,28 @@
|
||||
{
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2025-02-10T14:37:48.747081Z",
|
||||
"start_time": "2025-02-10T14:37:48.743083Z"
|
||||
"end_time": "2025-02-11T02:51:57.789440Z",
|
||||
"start_time": "2025-02-11T02:51:57.208223Z"
|
||||
}
|
||||
},
|
||||
"cell_type": "code",
|
||||
"source": "import pandas as pd",
|
||||
"id": "6a10e07f5f498bc6",
|
||||
"outputs": [],
|
||||
"execution_count": 27
|
||||
"execution_count": 1
|
||||
},
|
||||
{
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2025-02-10T14:54:43.071056Z",
|
||||
"start_time": "2025-02-10T14:54:43.027108Z"
|
||||
"end_time": "2025-02-11T03:14:30.972240Z",
|
||||
"start_time": "2025-02-11T03:14:30.857326Z"
|
||||
}
|
||||
},
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"# source_df = pd.read_csv(\"/Users/lanyuanxiaoyao/Documents/日线行情/000001.SZ.csv\") \\\n",
|
||||
"source_df = \\\n",
|
||||
" pd.read_csv(\"C:\\\\Users\\\\lanyuanxiaoyao\\\\SynologyDrive\\\\data\\\\Tushare\\\\日线行情 1990-2024\\\\分组行情\\\\000001.SZ.csv\") \\\n",
|
||||
"# source_df = \\\n",
|
||||
"# pd.read_csv(\"C:\\\\Users\\\\lanyuanxiaoyao\\\\SynologyDrive\\\\data\\\\Tushare\\\\日线行情 1990-2024\\\\分组行情\\\\000001.SZ.csv\") \\\n",
|
||||
"source_df = pd.read_csv(\"/Users/lanyuanxiaoyao/SynologyDrive/data/Tushare/日线行情 1990-2024/分组行情/600519.SH.csv\") \\\n",
|
||||
" [[\"trade_date\", \"vol\", \"open_qfq\", \"close_qfq\", \"high_qfq\", \"low_qfq\", \"macd\", \"macd_dif\", \"macd_dea\"]]\n",
|
||||
"df = pd.DataFrame()\n",
|
||||
"df[[\"date\", \"volume\", \"open\", \"close\", \"high\", \"low\", \"macd\", \"macd_dif\", \"macd_dea\"]] = \\\n",
|
||||
@@ -39,33 +39,33 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
" date volume open close high low macd \\\n",
|
||||
"0 19910404 3.00 0.38158 0.38158 0.38158 0.38158 0.000 \n",
|
||||
"1 19910405 2.00 0.37970 0.37970 0.37970 0.37970 0.000 \n",
|
||||
"2 19910408 2.00 0.37595 0.37595 0.37595 0.37595 -0.001 \n",
|
||||
"3 19910409 4.00 0.37407 0.37407 0.37407 0.37407 -0.001 \n",
|
||||
"4 19910410 15.00 0.37219 0.37219 0.37219 0.37219 -0.002 \n",
|
||||
"... ... ... ... ... ... ... ... \n",
|
||||
"3813 20241225 1475282.94 11.86000 11.92000 12.02000 11.84000 0.050 \n",
|
||||
"3814 20241226 1000074.70 11.92000 11.86000 11.93000 11.78000 0.051 \n",
|
||||
"3815 20241227 1290012.28 11.87000 11.83000 11.90000 11.66000 0.044 \n",
|
||||
"3816 20241230 1351846.36 11.78000 11.95000 11.97000 11.78000 0.052 \n",
|
||||
"3817 20241231 1475367.33 11.93000 11.70000 11.99000 11.70000 0.020 \n",
|
||||
" date volume open close high low \\\n",
|
||||
"2187 20010827 406318.00 4.23675 4.36443 4.63820 4.03295 \n",
|
||||
"2188 20010828 129647.79 4.29568 4.52525 4.54244 4.24902 \n",
|
||||
"2189 20010829 53252.75 4.53999 4.46632 4.54244 4.43195 \n",
|
||||
"2190 20010830 48013.06 4.45405 4.55472 4.60505 4.41967 \n",
|
||||
"2191 20010831 23231.48 4.56086 4.54367 4.61856 4.51789 \n",
|
||||
"... ... ... ... ... ... ... \n",
|
||||
"2182 20241225 17123.39 1538.80000 1530.00000 1538.80000 1526.10000 \n",
|
||||
"2183 20241226 18286.51 1534.00000 1527.79000 1538.78000 1523.00000 \n",
|
||||
"2184 20241227 20759.32 1528.90000 1528.97000 1536.00000 1519.50000 \n",
|
||||
"2185 20241230 25129.82 1533.97000 1525.00000 1543.96000 1525.00000 \n",
|
||||
"2186 20241231 39354.45 1525.40000 1524.00000 1545.00000 1522.01000 \n",
|
||||
"\n",
|
||||
" macd_dif macd_dea datetime datetime_text \n",
|
||||
"0 0.000 0.000 1991-04-04 19910404 \n",
|
||||
"1 0.000 0.000 1991-04-05 19910405 \n",
|
||||
"2 -0.001 0.000 1991-04-08 19910408 \n",
|
||||
"3 -0.001 0.000 1991-04-09 19910409 \n",
|
||||
"4 -0.002 -0.001 1991-04-10 19910410 \n",
|
||||
"... ... ... ... ... \n",
|
||||
"3813 0.080 0.055 2024-12-25 20241225 \n",
|
||||
"3814 0.087 0.062 2024-12-26 20241226 \n",
|
||||
"3815 0.089 0.067 2024-12-27 20241227 \n",
|
||||
"3816 0.100 0.074 2024-12-30 20241230 \n",
|
||||
"3817 0.086 0.076 2024-12-31 20241231 \n",
|
||||
" macd macd_dif macd_dea datetime datetime_text \n",
|
||||
"2187 0.000 0.000 0.000 2001-08-27 20010827 \n",
|
||||
"2188 0.021 0.013 0.003 2001-08-28 20010828 \n",
|
||||
"2189 0.025 0.018 0.006 2001-08-29 20010829 \n",
|
||||
"2190 0.037 0.029 0.010 2001-08-30 20010830 \n",
|
||||
"2191 0.042 0.036 0.016 2001-08-31 20010831 \n",
|
||||
"... ... ... ... ... ... \n",
|
||||
"2182 5.430 5.063 2.348 2024-12-25 20241225 \n",
|
||||
"2183 4.192 4.968 2.872 2024-12-26 20241226 \n",
|
||||
"2184 3.295 4.931 3.283 2024-12-27 20241227 \n",
|
||||
"2185 1.993 4.529 3.533 2024-12-30 20241230 \n",
|
||||
"2186 0.880 4.083 3.643 2024-12-31 20241231 \n",
|
||||
"\n",
|
||||
"[8022 rows x 11 columns]"
|
||||
"[5591 rows x 11 columns]"
|
||||
],
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
@@ -101,74 +101,74 @@
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>19910404</td>\n",
|
||||
" <td>3.00</td>\n",
|
||||
" <td>0.38158</td>\n",
|
||||
" <td>0.38158</td>\n",
|
||||
" <td>0.38158</td>\n",
|
||||
" <td>0.38158</td>\n",
|
||||
" <th>2187</th>\n",
|
||||
" <td>20010827</td>\n",
|
||||
" <td>406318.00</td>\n",
|
||||
" <td>4.23675</td>\n",
|
||||
" <td>4.36443</td>\n",
|
||||
" <td>4.63820</td>\n",
|
||||
" <td>4.03295</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>1991-04-04</td>\n",
|
||||
" <td>19910404</td>\n",
|
||||
" <td>2001-08-27</td>\n",
|
||||
" <td>20010827</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1</th>\n",
|
||||
" <td>19910405</td>\n",
|
||||
" <td>2.00</td>\n",
|
||||
" <td>0.37970</td>\n",
|
||||
" <td>0.37970</td>\n",
|
||||
" <td>0.37970</td>\n",
|
||||
" <td>0.37970</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>1991-04-05</td>\n",
|
||||
" <td>19910405</td>\n",
|
||||
" <th>2188</th>\n",
|
||||
" <td>20010828</td>\n",
|
||||
" <td>129647.79</td>\n",
|
||||
" <td>4.29568</td>\n",
|
||||
" <td>4.52525</td>\n",
|
||||
" <td>4.54244</td>\n",
|
||||
" <td>4.24902</td>\n",
|
||||
" <td>0.021</td>\n",
|
||||
" <td>0.013</td>\n",
|
||||
" <td>0.003</td>\n",
|
||||
" <td>2001-08-28</td>\n",
|
||||
" <td>20010828</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2</th>\n",
|
||||
" <td>19910408</td>\n",
|
||||
" <td>2.00</td>\n",
|
||||
" <td>0.37595</td>\n",
|
||||
" <td>0.37595</td>\n",
|
||||
" <td>0.37595</td>\n",
|
||||
" <td>0.37595</td>\n",
|
||||
" <td>-0.001</td>\n",
|
||||
" <td>-0.001</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>1991-04-08</td>\n",
|
||||
" <td>19910408</td>\n",
|
||||
" <th>2189</th>\n",
|
||||
" <td>20010829</td>\n",
|
||||
" <td>53252.75</td>\n",
|
||||
" <td>4.53999</td>\n",
|
||||
" <td>4.46632</td>\n",
|
||||
" <td>4.54244</td>\n",
|
||||
" <td>4.43195</td>\n",
|
||||
" <td>0.025</td>\n",
|
||||
" <td>0.018</td>\n",
|
||||
" <td>0.006</td>\n",
|
||||
" <td>2001-08-29</td>\n",
|
||||
" <td>20010829</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3</th>\n",
|
||||
" <td>19910409</td>\n",
|
||||
" <td>4.00</td>\n",
|
||||
" <td>0.37407</td>\n",
|
||||
" <td>0.37407</td>\n",
|
||||
" <td>0.37407</td>\n",
|
||||
" <td>0.37407</td>\n",
|
||||
" <td>-0.001</td>\n",
|
||||
" <td>-0.001</td>\n",
|
||||
" <td>0.000</td>\n",
|
||||
" <td>1991-04-09</td>\n",
|
||||
" <td>19910409</td>\n",
|
||||
" <th>2190</th>\n",
|
||||
" <td>20010830</td>\n",
|
||||
" <td>48013.06</td>\n",
|
||||
" <td>4.45405</td>\n",
|
||||
" <td>4.55472</td>\n",
|
||||
" <td>4.60505</td>\n",
|
||||
" <td>4.41967</td>\n",
|
||||
" <td>0.037</td>\n",
|
||||
" <td>0.029</td>\n",
|
||||
" <td>0.010</td>\n",
|
||||
" <td>2001-08-30</td>\n",
|
||||
" <td>20010830</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>4</th>\n",
|
||||
" <td>19910410</td>\n",
|
||||
" <td>15.00</td>\n",
|
||||
" <td>0.37219</td>\n",
|
||||
" <td>0.37219</td>\n",
|
||||
" <td>0.37219</td>\n",
|
||||
" <td>0.37219</td>\n",
|
||||
" <td>-0.002</td>\n",
|
||||
" <td>-0.002</td>\n",
|
||||
" <td>-0.001</td>\n",
|
||||
" <td>1991-04-10</td>\n",
|
||||
" <td>19910410</td>\n",
|
||||
" <th>2191</th>\n",
|
||||
" <td>20010831</td>\n",
|
||||
" <td>23231.48</td>\n",
|
||||
" <td>4.56086</td>\n",
|
||||
" <td>4.54367</td>\n",
|
||||
" <td>4.61856</td>\n",
|
||||
" <td>4.51789</td>\n",
|
||||
" <td>0.042</td>\n",
|
||||
" <td>0.036</td>\n",
|
||||
" <td>0.016</td>\n",
|
||||
" <td>2001-08-31</td>\n",
|
||||
" <td>20010831</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>...</th>\n",
|
||||
@@ -185,87 +185,87 @@
|
||||
" <td>...</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3813</th>\n",
|
||||
" <th>2182</th>\n",
|
||||
" <td>20241225</td>\n",
|
||||
" <td>1475282.94</td>\n",
|
||||
" <td>11.86000</td>\n",
|
||||
" <td>11.92000</td>\n",
|
||||
" <td>12.02000</td>\n",
|
||||
" <td>11.84000</td>\n",
|
||||
" <td>0.050</td>\n",
|
||||
" <td>0.080</td>\n",
|
||||
" <td>0.055</td>\n",
|
||||
" <td>17123.39</td>\n",
|
||||
" <td>1538.80000</td>\n",
|
||||
" <td>1530.00000</td>\n",
|
||||
" <td>1538.80000</td>\n",
|
||||
" <td>1526.10000</td>\n",
|
||||
" <td>5.430</td>\n",
|
||||
" <td>5.063</td>\n",
|
||||
" <td>2.348</td>\n",
|
||||
" <td>2024-12-25</td>\n",
|
||||
" <td>20241225</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3814</th>\n",
|
||||
" <th>2183</th>\n",
|
||||
" <td>20241226</td>\n",
|
||||
" <td>1000074.70</td>\n",
|
||||
" <td>11.92000</td>\n",
|
||||
" <td>11.86000</td>\n",
|
||||
" <td>11.93000</td>\n",
|
||||
" <td>11.78000</td>\n",
|
||||
" <td>0.051</td>\n",
|
||||
" <td>0.087</td>\n",
|
||||
" <td>0.062</td>\n",
|
||||
" <td>18286.51</td>\n",
|
||||
" <td>1534.00000</td>\n",
|
||||
" <td>1527.79000</td>\n",
|
||||
" <td>1538.78000</td>\n",
|
||||
" <td>1523.00000</td>\n",
|
||||
" <td>4.192</td>\n",
|
||||
" <td>4.968</td>\n",
|
||||
" <td>2.872</td>\n",
|
||||
" <td>2024-12-26</td>\n",
|
||||
" <td>20241226</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3815</th>\n",
|
||||
" <th>2184</th>\n",
|
||||
" <td>20241227</td>\n",
|
||||
" <td>1290012.28</td>\n",
|
||||
" <td>11.87000</td>\n",
|
||||
" <td>11.83000</td>\n",
|
||||
" <td>11.90000</td>\n",
|
||||
" <td>11.66000</td>\n",
|
||||
" <td>0.044</td>\n",
|
||||
" <td>0.089</td>\n",
|
||||
" <td>0.067</td>\n",
|
||||
" <td>20759.32</td>\n",
|
||||
" <td>1528.90000</td>\n",
|
||||
" <td>1528.97000</td>\n",
|
||||
" <td>1536.00000</td>\n",
|
||||
" <td>1519.50000</td>\n",
|
||||
" <td>3.295</td>\n",
|
||||
" <td>4.931</td>\n",
|
||||
" <td>3.283</td>\n",
|
||||
" <td>2024-12-27</td>\n",
|
||||
" <td>20241227</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3816</th>\n",
|
||||
" <th>2185</th>\n",
|
||||
" <td>20241230</td>\n",
|
||||
" <td>1351846.36</td>\n",
|
||||
" <td>11.78000</td>\n",
|
||||
" <td>11.95000</td>\n",
|
||||
" <td>11.97000</td>\n",
|
||||
" <td>11.78000</td>\n",
|
||||
" <td>0.052</td>\n",
|
||||
" <td>0.100</td>\n",
|
||||
" <td>0.074</td>\n",
|
||||
" <td>25129.82</td>\n",
|
||||
" <td>1533.97000</td>\n",
|
||||
" <td>1525.00000</td>\n",
|
||||
" <td>1543.96000</td>\n",
|
||||
" <td>1525.00000</td>\n",
|
||||
" <td>1.993</td>\n",
|
||||
" <td>4.529</td>\n",
|
||||
" <td>3.533</td>\n",
|
||||
" <td>2024-12-30</td>\n",
|
||||
" <td>20241230</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3817</th>\n",
|
||||
" <th>2186</th>\n",
|
||||
" <td>20241231</td>\n",
|
||||
" <td>1475367.33</td>\n",
|
||||
" <td>11.93000</td>\n",
|
||||
" <td>11.70000</td>\n",
|
||||
" <td>11.99000</td>\n",
|
||||
" <td>11.70000</td>\n",
|
||||
" <td>0.020</td>\n",
|
||||
" <td>0.086</td>\n",
|
||||
" <td>0.076</td>\n",
|
||||
" <td>39354.45</td>\n",
|
||||
" <td>1525.40000</td>\n",
|
||||
" <td>1524.00000</td>\n",
|
||||
" <td>1545.00000</td>\n",
|
||||
" <td>1522.01000</td>\n",
|
||||
" <td>0.880</td>\n",
|
||||
" <td>4.083</td>\n",
|
||||
" <td>3.643</td>\n",
|
||||
" <td>2024-12-31</td>\n",
|
||||
" <td>20241231</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"<p>8022 rows × 11 columns</p>\n",
|
||||
"<p>5591 rows × 11 columns</p>\n",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
"execution_count": 35,
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"execution_count": 35
|
||||
"execution_count": 9
|
||||
},
|
||||
{
|
||||
"metadata": {
|
||||
@@ -923,13 +923,15 @@
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"daily_df = df.copy()[[\"datetime\", \"volume\", \"open\", \"close\", \"high\", \"low\"]]\n",
|
||||
"monthly_df = daily_df.groupby(pd.Grouper(key='datetime', freq='ME')).agg({\n",
|
||||
"monthly_df = daily_df.groupby(pd.Grouper(key='datetime', freq='ME')).agg(\n",
|
||||
" {\n",
|
||||
" \"volume\": \"sum\",\n",
|
||||
" \"open\": \"first\",\n",
|
||||
" \"close\": \"last\",\n",
|
||||
" \"high\": \"max\",\n",
|
||||
" \"low\": \"min\",\n",
|
||||
"})\n",
|
||||
" }\n",
|
||||
")\n",
|
||||
"monthly_df.reset_index(inplace=True)\n",
|
||||
"monthly_df.set_index('datetime', inplace=True)\n",
|
||||
"monthly_df"
|
||||
@@ -1152,6 +1154,217 @@
|
||||
"2.在上述筛选出的月份中,找出那些该月份的前一个月的MACD值小于0的月份"
|
||||
],
|
||||
"id": "8a98fd3bbe6cfffb"
|
||||
},
|
||||
{
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2025-02-11T03:14:36.513645Z",
|
||||
"start_time": "2025-02-11T03:14:36.474163Z"
|
||||
}
|
||||
},
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"daily_df = df.copy()\n",
|
||||
"import pandas as pd\n",
|
||||
"import talib\n",
|
||||
"import numpy as np\n",
|
||||
"from scipy.signal import argrelextrema\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# 假设daily_df已经导入,列名为datetime, open, close, high, low\n",
|
||||
"# 代码中会直接使用daily_df\n",
|
||||
"\n",
|
||||
"# 步骤1: 计算月线行情和月线的MACD\n",
|
||||
"# 首先需要将日线行情转换为月线行情\n",
|
||||
"def calculate_monthly_data(daily_df):\n",
|
||||
" \"\"\"\n",
|
||||
" 将日线行情转换为月线行情\n",
|
||||
" datetime: 转换为日期的月初\n",
|
||||
" open: 每个月的第一个交易日的开盘价\n",
|
||||
" close: 每个月的最后一个交易日的收盘价\n",
|
||||
" high: 每个月的最高价\n",
|
||||
" low: 每个月的最低价\n",
|
||||
" \"\"\"\n",
|
||||
" # 将datetime列转换为日期格式\n",
|
||||
" daily_df['datetime'] = pd.to_datetime(daily_df['datetime'])\n",
|
||||
"\n",
|
||||
" # 按月份分组\n",
|
||||
" monthly_df = daily_df.groupby(pd.Grouper(key='datetime', freq='M')).agg(\n",
|
||||
" {\n",
|
||||
" 'open': 'first',\n",
|
||||
" 'close': 'last',\n",
|
||||
" 'high': 'max',\n",
|
||||
" 'low': 'min'\n",
|
||||
" }\n",
|
||||
" )\n",
|
||||
" return monthly_df\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# 计算月线的MACD指标\n",
|
||||
"def calculate_monthly_macd(monthly_df):\n",
|
||||
" \"\"\"\n",
|
||||
" 计算月线的MACD指标,包括DIF, DEA和MACD柱状图值\n",
|
||||
" \"\"\"\n",
|
||||
" # 获取收盘价序列\n",
|
||||
" close_prices = monthly_df['close'].values\n",
|
||||
"\n",
|
||||
" # 计算MACD\n",
|
||||
" dif, dea, hist = talib.MACD(close_prices, fastperiod=12, slowperiod=26, signalperiod=9)\n",
|
||||
"\n",
|
||||
" # 将结果添加到数据框\n",
|
||||
" monthly_df['DIF'] = dif\n",
|
||||
" monthly_df['DEA'] = dea\n",
|
||||
" monthly_df['MACD'] = hist\n",
|
||||
"\n",
|
||||
" return monthly_df\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# 筛选出符合条件的月份\n",
|
||||
"def filter_monthly_macd(monthly_df):\n",
|
||||
" \"\"\"\n",
|
||||
" 筛选出满足条件的月份:\n",
|
||||
" DIF和DEA均在0轴上方,且MACD值大于0并且小于DIF和DEA\n",
|
||||
" \"\"\"\n",
|
||||
" # 定义筛选条件\n",
|
||||
" condition = (monthly_df['DIF'] > 0) & \\\n",
|
||||
" (monthly_df['DEA'] > 0) & \\\n",
|
||||
" (monthly_df['MACD'] > 0) & \\\n",
|
||||
" (monthly_df['MACD'] < monthly_df['DIF']) & \\\n",
|
||||
" (monthly_df['MACD'] < monthly_df['DEA'])\n",
|
||||
"\n",
|
||||
" # 筛选符合条件的月份\n",
|
||||
" filtered_months = monthly_df[condition]\n",
|
||||
" return filtered_months\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# 步骤2: 进一步筛选符合条件的月份\n",
|
||||
"def further_filter_months(filtered_months, monthly_df):\n",
|
||||
" \"\"\"\n",
|
||||
" 在步骤1筛选出的月份中,进一步筛选:\n",
|
||||
" 1. 该月份的前一个月的MACD值小于0\n",
|
||||
" 2. 该月份前几个月MACD值经历了从下降(至少连续下降超过2个月)再回升的第一个月\n",
|
||||
" \"\"\"\n",
|
||||
" # 合并所有月份的数据\n",
|
||||
" merged_df = monthly_df.merge(\n",
|
||||
" filtered_months[['DIF', 'DEA', 'MACD']],\n",
|
||||
" left_index=True, right_index=True,\n",
|
||||
" how='left', suffixes=('', '_filtered')\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" # 条件1: 前一个月的MACD值小于0\n",
|
||||
" condition1 = merged_df['MACD_filtered'].shift(1) < 0\n",
|
||||
"\n",
|
||||
" # 条件2: 前几个月MACD经历了从下降超过2个月再回升的第一个月\n",
|
||||
" # 使用rolling窗口检查是否连续下降超过2个月,然后回升\n",
|
||||
" # 创建一个标志,表示是否处于连续下降状态\n",
|
||||
" merged_df['macd_diff'] = merged_df['MACD_filtered'].diff()\n",
|
||||
" merged_df['descending'] = merged_df['macd_diff'] < 0\n",
|
||||
"\n",
|
||||
" # 使用rolling窗口计算连续下降超过2个月\n",
|
||||
" merged_df['consecutive_desc'] = merged_df['descending'].rolling(window=3).sum() >= 2\n",
|
||||
"\n",
|
||||
" # 检查前一个月是否在连续下降,当前月是否回升\n",
|
||||
" condition2 = (merged_df['consecutive_desc'].shift(1)) & \\\n",
|
||||
" (merged_df['macd_diff'] > 0)\n",
|
||||
"\n",
|
||||
" # 筛选满足条件的月份\n",
|
||||
" further_filtered = merged_df[condition1 | condition2]\n",
|
||||
"\n",
|
||||
" # 返回筛选出的月份的索引(日期)\n",
|
||||
" return further_filtered.index.tolist()\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# 步骤3: 在日线行情中判断峰值\n",
|
||||
"def find_dayline_peaks(further_filtered_months, daily_df):\n",
|
||||
" \"\"\"\n",
|
||||
" 在步骤2筛选出的月份中,从下一个月开始,在日线行情中找到前两个峰值\n",
|
||||
" \"\"\"\n",
|
||||
" # 确保日线行情已经按日期排序\n",
|
||||
" daily_df = daily_df.sort_values(by='datetime')\n",
|
||||
"\n",
|
||||
" # 将日线行情的索引设置为datetime\n",
|
||||
" daily_df.set_index('datetime', inplace=True)\n",
|
||||
"\n",
|
||||
" # 初始化结果列表\n",
|
||||
" result_dates = []\n",
|
||||
"\n",
|
||||
" for month in further_filtered_months:\n",
|
||||
" # 获取下一个月的起始日期\n",
|
||||
" next_month_start = month + pd.offsets.MonthBegin(1)\n",
|
||||
" next_month_end = month + pd.offsets.MonthEnd(2) # 可能需要调整范围\n",
|
||||
"\n",
|
||||
" # 截取日线行情数据\n",
|
||||
" period_df = daily_df.loc[next_month_start:next_month_end]\n",
|
||||
"\n",
|
||||
" # 找到收盘价的峰值\n",
|
||||
" # 使用scipy的argrelextrema函数找到相对高点\n",
|
||||
" peak_indices = argrelextrema(period_df['close'].values, np.greater, order=5)[0]\n",
|
||||
" if len(peak_indices) >= 2:\n",
|
||||
" # 获取前两个峰值\n",
|
||||
" first_peak = peak_indices[0]\n",
|
||||
" second_peak = peak_indices[1]\n",
|
||||
"\n",
|
||||
" # 比较两个峰值\n",
|
||||
" if period_df['close'].iloc[second_peak] > period_df['close'].iloc[first_peak]:\n",
|
||||
" result_dates.append(period_df.index[second_peak])\n",
|
||||
"\n",
|
||||
" return result_dates\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# 步骤4: 输出结果\n",
|
||||
"def main(daily_df):\n",
|
||||
" # 步骤1: 计算月线行情和MACD\n",
|
||||
" monthly_df = calculate_monthly_data(daily_df.copy())\n",
|
||||
" monthly_df = calculate_monthly_macd(monthly_df)\n",
|
||||
"\n",
|
||||
" # 步骤1: 筛选出符合条件的月份\n",
|
||||
" filtered_months = filter_monthly_macd(monthly_df)\n",
|
||||
"\n",
|
||||
" if filtered_months.empty:\n",
|
||||
" print(\"没有满足步骤1条件的月份\")\n",
|
||||
" return\n",
|
||||
"\n",
|
||||
" # 步骤2: 进一步筛选符合条件的月份\n",
|
||||
" further_filtered_months = further_filter_months(filtered_months, monthly_df)\n",
|
||||
"\n",
|
||||
" if not further_filtered_months:\n",
|
||||
" print(\"没有满足步骤2条件的月份\")\n",
|
||||
" return\n",
|
||||
"\n",
|
||||
" # 步骤3: 在日线行情中查找峰值\n",
|
||||
" result_dates = find_dayline_peaks(further_filtered_months, daily_df)\n",
|
||||
"\n",
|
||||
" # 输出结果\n",
|
||||
" if result_dates:\n",
|
||||
" print(\"满足条件的日期:\")\n",
|
||||
" for date in result_dates:\n",
|
||||
" print(date.date())\n",
|
||||
" else:\n",
|
||||
" print(\"没有找到符合条件的日期\")\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"main(daily_df)"
|
||||
],
|
||||
"id": "46bd60b709f637a2",
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"满足条件的日期:\n",
|
||||
"2005-09-16\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"/var/folders/7h/w0cmp4zj6mn9br_6nyj310m40000gn/T/ipykernel_60768/2739124595.py:26: FutureWarning: 'M' is deprecated and will be removed in a future version, please use 'ME' instead.\n",
|
||||
" monthly_df = daily_df.groupby(pd.Grouper(key='datetime', freq='M')).agg(\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"execution_count": 10
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
|
||||
Reference in New Issue
Block a user