作為一名投資者,我希望能依觀察清單,自動蒐集相關 市場新聞與公告整合,對新聞和公告進行分類,評估新聞和公告的重要性,設定優先級
好的,我會根據您的要求,針對市場新聞與公告整合功能進行邏輯思考,並不直接開發程式碼。以下是我的思考過程:
資料來源:
資料收集方式:
資料處理流程:
a. 根據觀察清單中的股票代碼篩選相關新聞和公告
b. 使用自然語言處理(NLP)技術進行文本分析,提取關鍵信息
c. 對新聞和公告進行分類(如:財務報告、重大事件、產品發布等)
d. 評估新聞和公告的重要性,設定優先級
資料儲存:
stock.news
來儲存收集到的新聞和公告用戶界面:
好的,我會根據您的要求進行系統開發。首先,讓我們創建一個新的模型來儲存新聞和公告資訊。
addons/personal_stock/models
目錄下創建一個新文件 stock_news.py
:from odoo import models, fields, api
class StockNews(models.Model):
_name = 'stock.news'
_description = '股票新聞和公告'
_order = 'publish_date desc, importance desc'
watchlist_id = fields.Many2one('stock.watchlist', string='觀察名單', required=True)
title = fields.Char('標題', required=True)
content = fields.Text('內容摘要')
source = fields.Char('來源')
publish_date = fields.Datetime('發布時間', required=True)
news_type = fields.Selection([
('financial_report', '財務報告'),
('major_event', '重大事件'),
('product_launch', '產品發布'),
('market_analysis', '市場分析'),
('other', '其他')
], string='新聞類型', required=True)
importance = fields.Selection([
('high', '高'),
('medium', '中'),
('low', '低')
], string='重要性', required=True)
url = fields.Char('原文連結')
@api.model
def create(self, vals):
# 在這裡可以添加創建新聞時的額外邏輯
return super(StockNews, self).create(vals)
addons/personal_stock/views/watchlist_views.xml
文件中添加一個新的頁籤來顯示相關新聞:addons/personal_stock/models/watchlist.py
文件中添加一個新的字段來關聯新聞:addons/personal_stock/views/stock_news_views.xml
:def fetch_anue_news(self):
self.ensure_one()
total_news = 0
page = 1
limit = 30
one_year_ago = datetime.now() - timedelta(days=365)
while True:
newslist_info = self.get_newslist_info(page, limit)
if not newslist_info:
break
total_news = newslist_info["total"]
for news in newslist_info["data"]:
publish_date = datetime.fromtimestamp(news["publishAt"])
if publish_date < one_year_ago:
break
news_url = f'https://news.cnyes.com/news/id/{news["newsId"]}'
existing_news = self.env['stock.news'].search([('url', '=', news_url)])
if not existing_news:
self.env['stock.news'].create({
'title': news["title"],
'content': news["summary"],
'url': news_url,
'publish_date': publish_date,
'source': '鉅亨網',
'news_type': 'other',
'importance': 'medium',
})
if len(newslist_info["data"]) < limit or publish_date < one_year_ago:
break
page += 1
self._cr.commit() # 提交事務
return {
'type': 'ir.actions.client',
'tag': 'display_notification',
'params': {
'title': '新聞更新',
'message': f'已成功從鉅亨網獲取並更新 {total_news} 條相關新聞',
'sticky': False,
}
}
@api.depends('title', 'content')
def _compute_importance(self):
important_keywords = ['重大', '突破', '創新高', '創新低', '大漲', '大跌', '收購', '合併', '破產', '違約']
for news in self:
importance_score = 0
# 關鍵詞匹配
text = news.title + ' ' + (news.content or '')
for keyword in important_keywords:
if keyword in text:
importance_score += 1
# 情感分析
blob = TextBlob(self.preprocess_text(text))
sentiment = blob.sentiment.polarity
if abs(sentiment) > 0.5:
importance_score += 1
# 根據分數設置重要性
if importance_score >= 2:
news.importance = 'high'
elif importance_score == 1:
news.importance = 'medium'
else:
news.importance = 'low'
@api.depends('title', 'content')
def _compute_news_type(self):
type_keywords = {
'financial_report': ['財報', '季報', '年報', '營收', '獲利'],
'major_event': ['重大事件', '重大訊息', '重大決策', '重大交易'],
'product_launch': ['新產品', '發表', '上市', '推出'],
'market_analysis': ['市場分析', '產業趨勢', '市場預測', '經濟展望']
}
for news in self:
text = news.title + ' ' + (news.content or '')
preprocessed_text = self.preprocess_text(text)
news_type = 'other'
max_count = 0
for type, keywords in type_keywords.items():
count = sum(1 for keyword in keywords if keyword in preprocessed_text)
if count > max_count:
max_count = count
news_type = type
news.news_type = news_type
def preprocess_text(self, text):
# 移除特殊字符和數字
text = re.sub(r'[^\w\s]', '', text)
text = re.sub(r'\d+', '', text)
# 分詞
words = jieba.cut(text)
return ' '.join(words)
本章探討了如何將市場新聞與公告整合進入個人投資管理系統。首先,根據使用者的需求,系統應該自動蒐集與觀察清單相關的股票新聞和公告。透過使用網路爬蟲、RSS訂閱或API介接,從台灣證券交易所、財經新聞網站等多個來源獲取資料。資料經過自然語言處理技術進行分類,如財務報告、重大事件、產品發布等,並評估其重要性,設定高、中、低優先級。
為了支援這一功能,我們新增了數據模型 stock.news
,用來儲存每則新聞和公告的標題、內容摘要、來源、發布時間、新聞類型和重要性等資訊。這些新聞將會與 stock.watchlist
觀察名單關聯,並在用戶界面的觀察清單中,透過一個新的「相關新聞」頁籤來展示,且支援篩選與排序功能,讓用戶能快速檢視與其投資相關的最新資訊。
https://github.com/kulius/odoo17_ithelp/tree/master/addons/personal_stock