分拆了index
This commit is contained in:
+1
-138
@@ -2128,144 +2128,7 @@ def debug_replay_structure():
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)})
|
||||
|
||||
@app.route('/api/filter_stocks', methods=['POST'])
|
||||
def filter_stocks():
|
||||
"""筛选满足条件的A股股票"""
|
||||
try:
|
||||
data = request.get_json()
|
||||
start_time = data.get('start_time')
|
||||
end_time = data.get('end_time')
|
||||
timeframe = data.get('timeframe', '1d')
|
||||
fx_strength_threshold = data.get('fx_strength_threshold', 1.0)
|
||||
|
||||
if not start_time or not end_time:
|
||||
return jsonify({'error': '开始时间和结束时间不能为空'})
|
||||
|
||||
# 获取所有A股股票列表,如果失败则使用热门股票作为备用
|
||||
stock_list = []
|
||||
data_source = ""
|
||||
try:
|
||||
stock_list = china_stock.get_stock_list()
|
||||
if stock_list and len(stock_list) > 0:
|
||||
data_source = "完整股票列表"
|
||||
else:
|
||||
raise Exception("获取到的股票列表为空")
|
||||
except Exception as e:
|
||||
try:
|
||||
popular_stocks = china_stock.get_popular_stocks()
|
||||
stock_list = [{'symbol': stock['symbol'], 'name': stock['name']} for stock in popular_stocks]
|
||||
data_source = "热门股票列表"
|
||||
except Exception as e2:
|
||||
# 检查是否是网络连接问题
|
||||
if "timeout" in str(e).lower() or "connection" in str(e).lower() or "network" in str(e).lower():
|
||||
return jsonify({
|
||||
'error': '网络连接超时,无法获取股票数据。请检查网络连接后重试。',
|
||||
'error_type': 'network_error',
|
||||
'suggestion': '请确保网络连接正常,或稍后重试。'
|
||||
})
|
||||
else:
|
||||
return jsonify({'error': f'无法获取股票列表: {str(e)}'})
|
||||
|
||||
if not stock_list:
|
||||
return jsonify({
|
||||
'error': '无法获取股票列表,请检查网络连接后重试',
|
||||
'error_type': 'network_error',
|
||||
'suggestion': '请确保网络连接正常,或稍后重试。'
|
||||
})
|
||||
|
||||
results = []
|
||||
processed_count = 0
|
||||
total_count = len(stock_list)
|
||||
failed_count = 0
|
||||
|
||||
for stock in stock_list:
|
||||
try:
|
||||
symbol = stock['symbol']
|
||||
name = stock['name']
|
||||
processed_count += 1
|
||||
|
||||
# 获取股票K线数据
|
||||
df = get_a_stock_kl_data(symbol, timeframe, start_time=start_time, end_time=end_time)
|
||||
|
||||
if df is None or len(df) < 3:
|
||||
failed_count += 1
|
||||
# 如果连续失败太多,可能是网络问题
|
||||
if failed_count > 10 and len(results) == 0:
|
||||
return jsonify({
|
||||
'error': '网络连接不稳定,无法获取股票数据。请检查网络连接后重试。',
|
||||
'error_type': 'network_error',
|
||||
'processed_count': processed_count,
|
||||
'failed_count': failed_count
|
||||
})
|
||||
continue
|
||||
|
||||
# 进行缠论分析
|
||||
analysis_result = analyze_chan(df, symbol, timeframe)
|
||||
|
||||
if not analysis_result or 'klc_fx_info' not in analysis_result:
|
||||
continue
|
||||
|
||||
klc_fx_info = analysis_result['klc_fx_info']
|
||||
|
||||
# 检查最近2个KLC是否有满足条件的分型
|
||||
recent_klcs = klc_fx_info[-2:] if len(klc_fx_info) >= 2 else klc_fx_info
|
||||
|
||||
for klc_info in recent_klcs:
|
||||
fx_strength = klc_info.get('fx_strength', 0)
|
||||
fx_type = klc_info.get('fx_type', 'UNKNOWN')
|
||||
|
||||
# 检查是否满足条件:分型强度>=阈值 且 分型类型不为UNKNOWN
|
||||
if fx_strength >= fx_strength_threshold and fx_type != 'UNKNOWN':
|
||||
# 获取当前价格(最新收盘价)
|
||||
current_price = df['close'].iloc[-1] if len(df) > 0 else None
|
||||
fx_price = klc_info.get('price', 0)
|
||||
|
||||
# 计算涨跌幅
|
||||
change_percent = 0
|
||||
if current_price and fx_price and fx_price > 0:
|
||||
change_percent = ((current_price - fx_price) / fx_price) * 100
|
||||
|
||||
# 格式化分型类型显示
|
||||
fx_type_display = format_fx_type(fx_type)
|
||||
|
||||
results.append({
|
||||
'symbol': symbol,
|
||||
'name': name,
|
||||
'fx_time': klc_info.get('time', ''),
|
||||
'fx_type': fx_type_display,
|
||||
'fx_strength': fx_strength,
|
||||
'fx_price': fx_price,
|
||||
'current_price': current_price,
|
||||
'change_percent': change_percent
|
||||
})
|
||||
break # 找到一个满足条件的就跳出循环
|
||||
|
||||
except Exception as e:
|
||||
failed_count += 1
|
||||
continue
|
||||
|
||||
# 按分型强度降序排列
|
||||
results.sort(key=lambda x: x['fx_strength'], reverse=True)
|
||||
|
||||
return jsonify({
|
||||
'results': results,
|
||||
'total_processed': processed_count,
|
||||
'total_found': len(results),
|
||||
'failed_count': failed_count,
|
||||
'data_source': data_source,
|
||||
'message': f'使用{data_source}进行筛选,共处理{processed_count}只股票,找到{len(results)}只满足条件的股票'
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
# 检查是否是网络连接问题
|
||||
if "timeout" in str(e).lower() or "connection" in str(e).lower() or "network" in str(e).lower():
|
||||
return jsonify({
|
||||
'error': '网络连接超时,请检查网络连接后重试。',
|
||||
'error_type': 'network_error',
|
||||
'suggestion': '请确保网络连接正常,或稍后重试。'
|
||||
})
|
||||
else:
|
||||
return jsonify({'error': str(e)})
|
||||
# 已移除:/api/filter_stocks 路由
|
||||
|
||||
def get_uncompleted_seg_list(seg_list, client_tz):
|
||||
"""获取未完成线段列表,正确处理倒数第二个和最后一个未完成线段"""
|
||||
|
||||
Reference in New Issue
Block a user