fix some issue

This commit is contained in:
blade 2025-08-04 21:43:18 +08:00
parent 89d06d9fbd
commit e0bf2bbbfb
5 changed files with 15 additions and 5 deletions

1
.gitignore vendored
View File

@ -4,3 +4,4 @@
core/db/__pycache__/db_market_data.cpython-312.pyc core/db/__pycache__/db_market_data.cpython-312.pyc
core/biz/__pycache__/metrics_calculation.cpython-312.pyc core/biz/__pycache__/metrics_calculation.cpython-312.pyc
core/biz/__pycache__/market_data_monitor.cpython-312.pyc core/biz/__pycache__/market_data_monitor.cpython-312.pyc
core/db/__pycache__/db_market_data.cpython-312.pyc

View File

@ -102,6 +102,7 @@ class MetricsCalculation:
KDJ_K < 30, KDJ_D < 30, KDJ_J < 20: 超卖 KDJ_K < 30, KDJ_D < 30, KDJ_J < 20: 超卖
否则为"徘徊" 否则为"徘徊"
""" """
logging.info("设置KDJ形态")
# 初始化kdj_pattern列 # 初始化kdj_pattern列
df["kdj_pattern"] = "徘徊" df["kdj_pattern"] = "徘徊"
@ -150,6 +151,7 @@ class MetricsCalculation:
使用20个周期的滚动窗口计算相对统计特征避免绝对阈值过于严格的问题 使用20个周期的滚动窗口计算相对统计特征避免绝对阈值过于严格的问题
""" """
logging.info("设置均线多空和发散")
data["ma_long_short"] = "震荡" data["ma_long_short"] = "震荡"
data["ma_divergence"] = "未知" data["ma_divergence"] = "未知"
@ -464,6 +466,7 @@ class MetricsCalculation:
超卖价格接近下轨且KDJ超卖 超卖价格接近下轨且KDJ超卖
震荡其他情况 震荡其他情况
""" """
logging.info("设置BOLL形态")
# 初始化boll_pattern列 # 初始化boll_pattern列
df["boll_pattern"] = "震荡" df["boll_pattern"] = "震荡"
@ -539,6 +542,7 @@ class MetricsCalculation:
- K线实体或影线较长 - K线实体或影线较长
- 超长K线实体和影线都很长 - 超长K线实体和影线都很长
""" """
logging.info("设置K线长度")
# 检查必要的列是否存在 # 检查必要的列是否存在
required_columns = ["close", "open", "high", "low"] required_columns = ["close", "open", "high", "low"]
missing_columns = [col for col in required_columns if col not in df.columns] missing_columns = [col for col in required_columns if col not in df.columns]
@ -645,6 +649,7 @@ class MetricsCalculation:
- 超大实体实体占比70%-90% - 超大实体实体占比70%-90%
- 光头光脚实体占比>90%非一字情况 - 光头光脚实体占比>90%非一字情况
""" """
logging.info("设置K线形状")
# 检查必要的列是否存在 # 检查必要的列是否存在
required_columns = ["close", "open", "high", "low"] required_columns = ["close", "open", "high", "low"]
missing_columns = [col for col in required_columns if col not in df.columns] missing_columns = [col for col in required_columns if col not in df.columns]
@ -840,6 +845,8 @@ class MetricsCalculation:
"avg_price_range", "avg_price_range",
"std_price_range", "std_price_range",
"price_range_zscore", "price_range_zscore",
"price_range_ratio_p75",
"price_range_zscore_p75",
] ]
df.drop(columns=temp_columns, inplace=True) df.drop(columns=temp_columns, inplace=True)

View File

@ -478,7 +478,7 @@ class DBMarketData:
:param start: 开始时间 :param start: 开始时间
:param end: 结束时间 :param end: 结束时间
""" """
if start is None or end is None: if start is None and end is None:
sql = """ sql = """
SELECT * FROM crypto_market_data SELECT * FROM crypto_market_data
WHERE symbol = :symbol AND bar = :bar WHERE symbol = :symbol AND bar = :bar

View File

@ -88,20 +88,21 @@ class MarketDataMain:
logging.error(f"开始时间格式错误: {start}") logging.error(f"开始时间格式错误: {start}")
return None return None
# 如果bar为5m, 15m: # 如果bar为5m, 15m, 30m:
# end_time_ts与start_time_ts相差超过1天则按照1天为单位 # end_time_ts与start_time_ts相差超过1天则按照1天为单位
# 如果bar为1H, 4H, # 如果bar为1H, 4H,
# end_time_ts与start_time_ts相差超过5天则按照5天为单位 # end_time_ts与start_time_ts相差超过5天则按照5天为单位
# 如果bar为1D, 则end_time_ts与start_time_ts相差超过10天则按照10天为单位 # 如果bar为1D, 则end_time_ts与start_time_ts相差超过10天则按照10天为单位
# 获取数据直到end_time_ts # 获取数据直到end_time_ts
threshold = None threshold = None
if bar in ["5m", "15m"]: if bar in ["5m", "15m", "30m"]:
threshold = 86400000 threshold = 86400000
elif bar in ["1H", "4H"]: elif bar in ["1H", "4H"]:
threshold = 432000000 threshold = 432000000
elif bar == "1D": elif bar == "1D":
threshold = 864000000 threshold = 864000000
get_data = False
min_start_time_ts = start_time_ts min_start_time_ts = start_time_ts
while start_time_ts < end_time_ts: while start_time_ts < end_time_ts:
current_start_time_ts = end_time_ts - threshold current_start_time_ts = end_time_ts - threshold
@ -212,10 +213,11 @@ class MarketDataMain:
current_min_start_time_ts = data["timestamp"].min() current_min_start_time_ts = data["timestamp"].min()
if current_min_start_time_ts < min_start_time_ts: if current_min_start_time_ts < min_start_time_ts:
min_start_time_ts = current_min_start_time_ts min_start_time_ts = current_min_start_time_ts
get_data = True
if current_start_time_ts == start_time_ts: if current_start_time_ts == start_time_ts:
break break
end_time_ts = current_start_time_ts end_time_ts = current_start_time_ts
if min_start_time_ts is not None: if min_start_time_ts is not None and get_data:
# 补充技术指标数据 # 补充技术指标数据
# 获得min_start_time_ts之前30条数据 # 获得min_start_time_ts之前30条数据
logging.info(f"开始补充技术指标数据: {symbol} {bar}") logging.info(f"开始补充技术指标数据: {symbol} {bar}")
@ -223,7 +225,7 @@ class MarketDataMain:
symbol, bar, min_start_time_ts, 30 symbol, bar, min_start_time_ts, 30
) )
if before_data is not None and len(before_data) > 0: if before_data is not None and len(before_data) > 0:
earliest_timestamp = before_data[0]["timestamp"] earliest_timestamp = before_data[-1]["timestamp"]
else: else:
earliest_timestamp = min_start_time_ts earliest_timestamp = min_start_time_ts
handle_data = self.db_market_data.query_market_data_by_symbol_bar( handle_data = self.db_market_data.query_market_data_by_symbol_bar(