feat: complete trading system with FastAPI backend, web frontend, and auto-analysis
This commit is contained in:
118
llm_sentiment_agent.py
Normal file
118
llm_sentiment_agent.py
Normal file
@@ -0,0 +1,118 @@
|
||||
"""
|
||||
llm_sentiment_agent.py — 通过Agent生成舆情数据
|
||||
|
||||
用法:
|
||||
python3 llm_sentiment_agent.py --generate 中芯国际 2024-06-01 2024-06-30
|
||||
|
||||
这会产生一个请求,你可以复制给Agent来获取情绪分析
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def generate_prompt(stock_name, date_range):
|
||||
"""生成给Agent的舆情分析请求"""
|
||||
|
||||
# 模拟新闻标题(实际应从新闻API获取)
|
||||
mock_news = {
|
||||
"中芯国际": [
|
||||
"中芯国际Q2营收超预期,先进制程占比提升",
|
||||
"半导体行业复苏迹象明显,中芯产能利用率回升",
|
||||
"大基金增持中芯国际,看好长期发展",
|
||||
"美国制裁影响有限,中芯国产替代加速"
|
||||
],
|
||||
"平安好医生": [
|
||||
"平安好医生亏损收窄,互联网医疗政策利好",
|
||||
"医保支付接入线上问诊,行业迎来拐点",
|
||||
"阿里健康京东健康竞争加剧,市场份额受挤压"
|
||||
],
|
||||
"叮当健康": [
|
||||
"叮当健康持续亏损,即时配送成本居高不下",
|
||||
"医药电商价格战激烈,盈利前景不明"
|
||||
],
|
||||
"中原建业": [
|
||||
"房地产销售持续下滑,代建业务需求萎缩",
|
||||
"中原建业股价创历史新低,流动性危机隐现"
|
||||
],
|
||||
"阅文集团": [
|
||||
"《庆余年2》热播带动阅文IP变现增长",
|
||||
"网文改编影视剧大获成功,版权收入提升",
|
||||
"短视频冲击长文字阅读,用户增长放缓"
|
||||
],
|
||||
"泰升集团": [
|
||||
"港股小盘股流动性枯竭,泰升集团成交低迷",
|
||||
"地产业务不温不火,缺乏催化剂"
|
||||
]
|
||||
}
|
||||
|
||||
news = mock_news.get(stock_name, ["暂无相关新闻"])
|
||||
|
||||
prompt = f"""请分析【{stock_name}】在 {date_range} 期间的市场情绪。
|
||||
|
||||
新闻标题:
|
||||
{chr(10).join(['- ' + n for n in news])}
|
||||
|
||||
请给出:
|
||||
1. 整体情绪倾向(极度悲观/悲观/中性/乐观/极度乐观)
|
||||
2. 情绪分数(-5到+5的整数,0为中性)
|
||||
3. 主要影响因素(政策/业绩/行业/竞争等)
|
||||
4. 未来1个月预期
|
||||
|
||||
返回JSON格式:
|
||||
{{
|
||||
"sentiment_score": 0,
|
||||
"sentiment_label": "中性",
|
||||
"factors": ["因素1", "因素2"],
|
||||
"outlook": "短期震荡"
|
||||
}}
|
||||
"""
|
||||
return prompt
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='通过Agent生成舆情数据')
|
||||
parser.add_argument('--generate', nargs=3, metavar=('STOCK', 'START', 'END'),
|
||||
help='生成舆情分析请求,如:--generate 中芯国际 2024-06-01 2024-06-30')
|
||||
parser.add_argument('--example', action='store_true', help='显示示例输出')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.generate:
|
||||
stock, start, end = args.generate
|
||||
prompt = generate_prompt(stock, f"{start} ~ {end}")
|
||||
print("=" * 60)
|
||||
print("📋 请将以下内容发送给Agent(我):")
|
||||
print("=" * 60)
|
||||
print()
|
||||
print(prompt)
|
||||
print()
|
||||
print("=" * 60)
|
||||
print("📥 收到回复后,将JSON结果保存到 data/llm_sentiment.json")
|
||||
|
||||
elif args.example:
|
||||
example = {
|
||||
"中芯国际": {
|
||||
"2024-06-15": {
|
||||
"sentiment_score": 3,
|
||||
"sentiment_label": "乐观",
|
||||
"factors": ["业绩超预期", "行业复苏"],
|
||||
"outlook": "短期看涨",
|
||||
"source": "agent_analysis"
|
||||
}
|
||||
}
|
||||
}
|
||||
print("示例输出格式(保存到 data/llm_sentiment.json):")
|
||||
print(json.dumps(example, indent=2, ensure_ascii=False))
|
||||
else:
|
||||
print("LLM舆情Agent接口")
|
||||
print("\n用法:")
|
||||
print(" python3 llm_sentiment_agent.py --generate 中芯国际 2024-06-01 2024-06-30")
|
||||
print(" python3 llm_sentiment_agent.py --example")
|
||||
print("\n提示:")
|
||||
print(" 1. 先用 --generate 产生请求内容")
|
||||
print(" 2. 将内容发给Agent(我)获取分析")
|
||||
print(" 3. 把返回的JSON保存到 data/llm_sentiment.json")
|
||||
print(" 4. 运行 stock_backtest_v7.py 时会自动读取")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user