From 0f5129786093ab17fddc340115958a03a8f2db7d Mon Sep 17 00:00:00 2001 From: jackyu66git Date: Mon, 8 Dec 2025 11:02:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0A=E8=82=A1=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 10244 -> 10244 bytes ChanBI.py | 3 ++- TF_DF.py | 6 +++-- web/.DS_Store | Bin 6148 -> 8196 bytes web/tests/test_cn_stock_data_fetch.py | 33 ++++++++++++++++++++++++++ 5 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 web/tests/test_cn_stock_data_fetch.py diff --git a/.DS_Store b/.DS_Store index 7928c3d89e7ef3c636e3e7822c699259519a692d..57e53c0be72cf07f59fba2a59fef28aa83d9bc43 100644 GIT binary patch delta 1228 zcmZn(XbG6$&*-o*U^hRb!(<+TjrH6N@jzI>P|1+YkO;&X45=WIoOHwBY^_Fg zI|R6x>)C+epU;rTkj9Y7kdERFMh;h?LKJyq7rVJ`ELt214tF#)2-o3K19J%j11r!9 z#s!o23CmADAi@En1&|$~VPte^@_u1C5oDV;)N*JFIP8dSpWxc%Fj7nF}0|MZky!MQS?G|G=n4wkLC$$kU=Iun%#lMOaNhtw1rt%RsC7 z4ou!EkqZp_VqhKsC8tz|Toe~FFsXpU9!VbAWhu??6Q4Z*rxp}5kW&UOH3)}*!k$54 zvYcd~0{2WeAe)(?9O#lHWScUTG8>%>k5BHG6laIA*Gft-@odsUEw#&0p}@f-|4-bNovIqnFRNWm(>Uyy-h%pZoy=S1as z%7TmXa`N-ifhIF<-Xp1KVbHh2Jcb6U9V@XyD*LCII}5dPx8P diff --git a/ChanBI.py b/ChanBI.py index c2fe292..3d3fde7 100644 --- a/ChanBI.py +++ b/ChanBI.py @@ -66,7 +66,7 @@ class ChanBI(): self.end_klc = klc self.set_is_sure(True, sure_klc.end_time) self.end_time = klc.end_time - #print(self.start_time, klc.start_time, klc.fx, "This bi is ended") + print(self.start_time, klc.fx, "This bi is ended", len(self.klc_list), klc.index - self.start_klc.index) def set_is_sure(self, is_sure, time): self.is_sure = is_sure self.sure_time = time @@ -90,6 +90,7 @@ class ChanBI(): break if not added: self.klc_list.append(klc) + #print(self.start_time, klc.start_time) self.cal_macdhist() self.cal_macd_div() def append_klc_list(self, klc_list): diff --git a/TF_DF.py b/TF_DF.py index 6c811ab..5d88479 100644 --- a/TF_DF.py +++ b/TF_DF.py @@ -123,12 +123,12 @@ class TF_DF(): return klu_state_list def check_fx(self, klc): if klc.pre and klc.next: - if klc.high > klc.pre.high and klc.high > klc.next.high and klc.low > klc.pre.low and klc.low > klc.next.low and klc.signal > 0: + if klc.high > klc.pre.high and klc.high > klc.next.high and klc.low > klc.pre.low and klc.low > klc.next.low: #if (klc.close > klc.ema52 or klc.next.close > klc.next.ema52) and klc.macd > 0: klc.set_fx(Chan_FX_TYPE.TOP) #print(klc.start_time, klc.end_time,klc.next.start_time, klc.next.end_time, klc.macd, klc.state, klc.fx, "TOP") return Chan_FX_TYPE.TOP - elif klc.low < klc.pre.low and klc.low < klc.next.low and klc.high < klc.pre.high and klc.high < klc.next.high and klc.signal < 0: + elif klc.low < klc.pre.low and klc.low < klc.next.low and klc.high < klc.pre.high and klc.high < klc.next.high: #if (klc.close < klc.ema52 or klc.next.close < klc.next.ema52) and klc.macd < 0: klc.set_fx(Chan_FX_TYPE.BOTTOM) #print(klc.start_time, klc.end_time,klc.next.start_time, klc.next.end_time, klc.macd, klc.state, klc.fx, "BOTTOM") @@ -834,6 +834,8 @@ class TF_DF(): fx = Chan_FX_TYPE.UNKNOWN # Do nothing if fx == Chan_FX_TYPE.UNKNOWN: + if len(bi_list) > 0: + bi_list[-1].add_klc(klc) continue if len(bi_list) > 0 and klc.end_klu: last_bi = bi_list[-1] diff --git a/web/.DS_Store b/web/.DS_Store index 0e37fdca78499bf5d7af67b25ee6998de467cc3d..4fdc9a72b5f2134ca1ba6c368435ac002bc94aea 100644 GIT binary patch delta 288 zcmZoMXmOBWU|?W$DortDU;r^WfEYvza8E20o2aMAD6=tOH}hr%jz7$c**Q2SHn1?t zZ02EMVbVOAGds^P>$oFOF)KqJLpnnykgUkfPjN}g$xi|q1y!-xl8uFtF>SIPdu=@{ zLkUAFLotvn&Pg{6PR`FQ0ICE6-o-!yNj5j%1#Zr_lOLwK6hdu+>qoW;yNZGgWE&KK v7EE>)5#8+1v!9tuf*Z(n1^IKcAjfy+$^0Uoll^%(I2a*8z_2-a&=ggF}!RC=CPx h+(5z=WWmP5@640=WjsOFF)%@_2Dye|b3D%+W&oUbAua#_ diff --git a/web/tests/test_cn_stock_data_fetch.py b/web/tests/test_cn_stock_data_fetch.py new file mode 100644 index 0000000..eaeb155 --- /dev/null +++ b/web/tests/test_cn_stock_data_fetch.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +import sys +from pathlib import Path + +import pytest + +# 将项目根目录加入 sys.path,确保可以直接导入业务代码 +ROOT_DIR = Path(__file__).resolve().parents[4] +if str(ROOT_DIR) not in sys.path: + sys.path.append(str(ROOT_DIR)) + +from user_data.Chan.web.cn_stock_data import ChinaStockData + + +@pytest.mark.network +def test_cn_stock_data_fetch(): + """简单的联通性测试,确认能否通过 akshare 拉取A股K线数据。""" + data_client = ChinaStockData() + + try: + df = data_client.get_kl_data(symbol="600519", timeframe="1d", limit=20) + except Exception as exc: # pragma: no cover - 旨在提示网络/依赖问题 + pytest.skip(f"无法调用数据接口,可能是网络或依赖问题:{exc}") + + if df is None or df.empty: + pytest.skip("未获取到任何数据,可能是网络异常或接口限制。") + + expected_cols = {"date", "open", "high", "low", "close", "volume"} + missing_cols = expected_cols - set(df.columns) + assert not missing_cols, f"返回数据缺少列: {missing_cols}" + +