This commit is contained in:
aaron 2025-09-19 21:09:32 +08:00
parent 07eea6ca14
commit 1d7f510fc6
7 changed files with 10 additions and 18 deletions

View File

@ -56,7 +56,7 @@ strategy:
enabled: true # 是否启用K线形态策略
min_entity_ratio: 0.55 # 前两根阳线实体最小占振幅比例55%
final_yang_min_ratio: 0.40 # 最后阳线实体最小占振幅比例40%
timeframes: ["1h", "daily", "weekly"] # 支持的时间周期
timeframes: ["daily", "weekly"] # 支持的时间周期
scan_stocks_count: 5000 # 扫描股票数量限制
analysis_days: 60 # 分析的历史天数
follow_up_days: 30 # 后续强势验证天数形态完成后N天内不回踩阴线高点且不跌破EMA20

View File

@ -71,7 +71,7 @@ strategy:
enabled: true # 是否启用K线形态策略
min_entity_ratio: 0.55 # 前两根阳线实体最小占振幅比例55%
final_yang_min_ratio: 0.40 # 最后阳线实体最小占振幅比例40%
timeframes: ["1h", "daily", "weekly"] # 支持的时间周期
timeframes: ["daily", "weekly"] # 支持的时间周期
scan_stocks_count: 100 # Docker环境默认扫描股票数量
analysis_days: 60 # 分析的历史天数
follow_up_days: 30 # 后续强势验证天数形态完成后N天内不回踩阴线高点且不跌破EMA20

View File

@ -334,7 +334,7 @@ class ADataFetcher:
stock_code: 股票代码
start_date: 开始日期
end_date: 结束日期
period: 数据周期 ('1h', 'daily', 'weekly', 'monthly')
period: 数据周期 ('daily', 'weekly', 'monthly')
Returns:
历史行情DataFrame
@ -348,7 +348,6 @@ class ADataFetcher:
# 根据周期设置k_type参数
k_type_map = {
'1h': 60, # 1小时线(60分钟)
'daily': 1, # 日线
'weekly': 2, # 周线
'monthly': 3 # 月线

View File

@ -283,13 +283,7 @@ class KLinePatternStrategy:
end_date = datetime.now().strftime('%Y-%m-%d')
for timeframe in self.timeframes:
# 针对1小时周期调整分析天数避免数据量过大
if timeframe == '1h':
# 1小时数据只分析最近7天
analysis_days = min(days, 7)
else:
analysis_days = days
analysis_days = days
start_date = (datetime.now() - timedelta(days=analysis_days)).strftime('%Y-%m-%d')
logger.info(f"🔍 分析股票: {stock_code}({stock_name}) | 周期: {timeframe}")

View File

@ -107,8 +107,8 @@
<span class="badge badge-light-primary">{{ signal.strategy_name }}</span>
</td>
<td>
<span class="badge bg-{% if signal.timeframe == 'daily' %}primary{% elif signal.timeframe == '1h' %}info{% else %}success{% endif %}">
{{ 'D' if signal.timeframe == 'daily' else ('1H' if signal.timeframe == '1h' else 'W') }}
<span class="badge bg-{% if signal.timeframe == 'daily' %}primary{% else %}success{% endif %}">
{{ 'D' if signal.timeframe == 'daily' else 'W' }}
</span>
</td>
<td class="text-muted">{{ signal.signal_date | datetime_format('%m-%d') }}</td>

View File

@ -96,8 +96,8 @@
</div>
</td>
<td>
<span class="badge bg-{% if alert.timeframe == 'daily' %}primary{% elif alert.timeframe == '1h' %}info{% else %}success{% endif %}">
{{ '日线' if alert.timeframe == 'daily' else ('1小时' if alert.timeframe == '1h' else '周线') }}
<span class="badge bg-{% if alert.timeframe == 'daily' %}primary{% else %}success{% endif %}">
{{ '日线' if alert.timeframe == 'daily' else '周线' }}
</span>
</td>
<td class="text-muted">{{ alert.original_signal_date | datetime_format('%Y-%m-%d') }}</td>

View File

@ -18,7 +18,6 @@
<option value="">所有周期</option>
<option value="daily" {% if timeframe == 'daily' or not timeframe %}selected{% endif %}>日线</option>
<option value="weekly" {% if timeframe == 'weekly' %}selected{% endif %}>周线</option>
<option value="1h" {% if timeframe == '1h' %}selected{% endif %}>1小时</option>
</select>
<select name="days" class="form-select form-select-sm">
@ -96,8 +95,8 @@
<span class="badge badge-light-primary">{{ signal.strategy_name }}</span>
</td>
<td>
<span class="badge bg-{% if signal.timeframe == 'daily' %}primary{% elif signal.timeframe == '1h' %}info{% else %}success{% endif %}">
{{ '日线' if signal.timeframe == 'daily' else ('1小时' if signal.timeframe == '1h' else '周线') }}
<span class="badge bg-{% if signal.timeframe == 'daily' %}primary{% else %}success{% endif %}">
{{ '日线' if signal.timeframe == 'daily' else '周线' }}
</span>
</td>
<td class="text-muted">{{ signal.signal_date | datetime_format('%Y-%m-%d') }}</td>