|
|
|
点击关注↓↓↓,置顶+星标每天订阅,学习更多指标内容☼↓↓↓
想提前看剧本?我的野路子
最近这行情,题材跟电风扇一样转,一天一个样,前排吃肉的没你份,后排挨打的准有你。很多人估计都跟我一样,肉没吃到,巴掌挨结实了,心里窝火。
我就在琢磨,老是跟在人家屁股后面闻屁,能不能换个玩法?比如提前拿到剧本,找个靠谱的角落提前埋伏进去,等风来了再起飞。
这不,我盯上了财联社那个投资日历。里面把未来几个月可能炸裂的大事都给你排得明明白白,这玩意儿才是真正的宝藏地图啊。
前几天我不是分享了财联社的电报新闻系统吗,今天我把财联社的投资日历也撸下来可以不可以。
数据搞到手只是第一步,真正炸裂的是后面的操作。我直接把这堆未来事件灌给了deepseek,然后开始跟它下指令。
具体怎么玩?我写的prompt大概是这样的:
1. 分析这个事件的题材,判断它在市场上的“成色”如何,是属于能点燃情绪的爆款,还是纯凑数的垃圾。
2. 如果觉得有戏,就深挖一下背后的产业链,把相关的概念股给我扒出来,按核心受益程度排个序。
3. 再简单讲讲炒作的逻辑,这个题材的坑在哪,持续性有多长,别让人家一上来就接盘。
你别说,AI这玩意儿当个小弟还真挺好用。几秒钟就给你把活干完了,逻辑清晰,条理分明。相当于你雇了个不要工资的分析师,7x24小时待命。
这套玩法,说白了就是降维打击。普通散户还在为今天涨啥明天跌啥发愁,你已经提前一个月开始布局了。这市场,本质就是个信息不对称的赌场,谁能提前看一眼底牌,谁的赢面就大得多。
我把这个思路分享出来,你们觉得有搞头,自己也可以琢磨琢磨。技术细节就不展开了,免得有人说我炫耀。
另外我把这个抓取源码跟上次分享的财联社电报新闻结合一起,可以对比起来了。
不懂PY的也没关系,仓鼠哥打包为EXE,你直接下载使用就可以了。
- import streamlit as st
- import urllib.parse
- import hashlib
- import requests
- import pandas as pd
- from datetime import datetime, timedelta
- # 生成签名的函数
- def generate_sign(params):
- """生成签名:排序参数 -> URL编码 -> SHA1加密 -> MD5加密"""
- sorted_data = sorted(params.items(), key=lambda item: item[0])
- query_string = urllib.parse.urlencode(sorted_data)
- sha1_hash = hashlib.sha1(query_string.encode('utf-8')).hexdigest()
- sign = hashlib.md5(sha1_hash.encode('utf-8')).hexdigest()
- return sign
- # 获取财经日历数据
- def get_calendar_data():
- """获取财联社财经日历数据"""
- params = {
- 'app': 'CailianpressWeb',
- 'flag': '0',
- 'os': 'web',
- 'sv': '8.4.6',
- 'type': '0'
- }
- params['sign'] = generate_sign(params)
- url = 'https://www.cls.cn/api/calendar/web/list'
- headers = {
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
- "Referer": "https://www.cls.cn/",
- "Accept-Language": "zh-CN,zh;q=0.9",
- }
- try:
- response = requests.get(url, params=params, headers=headers, timeout=10)
- if response.status_code == 200:
- return response.json()
- else:
- st.error(f"请求失败,状态码: {response.status_code}")
- return None
- except Exception as e:
- st.error(f"请求出错: {str(e)}")
- return None
- # 处理数据
- def process_data(data):
- """处理API返回的数据"""
- if not data or 'data' not in data:
- return pd.DataFrame()
- processed_items = []
- for day_data in data['data']:
- calendar_day = day_data.get('calendar_day', '')
- week = day_data.get('week', '')
- for item in day_data.get('items', []):
- processed_item = {
- '日期': calendar_day,
- '星期': week,
- '标题': item.get('title', ''),
- '类型': item.get('type', ''),
- 'ID': item.get('id', '')
- }
- processed_items.append(processed_item)
- return pd.DataFrame(processed_items)
- # 主应用
- def main():
- # 标题和描述
- st.title("📅 财联社投资日历")
- st.markdown("---")
- raw_data = get_calendar_data()
- if raw_data and raw_data.get('code') == 200:
- df = process_data(raw_data)
- if not df.empty:
- # 搜索框
- search_term = st.text_input("🔍 搜索事件标题")
- if search_term:
- df = df[df['标题'].str.contains(search_term, case=False, na=False)]
- st.subheader("📋 事件列表")
- # 显示数据表格
- display_df = df[['日期', '星期', '标题']].copy()
- st.dataframe(
- display_df,
- # use_container_width=True,
- hide_index=True,
- column_config={
- "日期": st.column_config.TextColumn("日期", width="small"),
- "星期": st.column_config.TextColumn("星期", width="small"),
- "标题": st.column_config.TextColumn("标题", width="large")
- }
- )
- # 下载按钮
- csv = display_df.to_csv(index=False, encoding='utf-8-sig')
- st.download_button(
- label="📥 下载数据为CSV",
- data=csv,
- file_name=f"财经日历_{datetime.now().strftime('%Y%m%d')}.csv",
- mime="text/csv"
- )
- else:
- st.warning("没有找到相关数据")
- else:
- st.error("无法获取数据,请检查网络连接或稍后重试")
- # 页脚
- st.markdown("---")
- st.markdown(
- """
- <div style='text-align: center; color: gray;'>
- <p>数据来源:财联社 API | 更新时间:{} | 本应用仅用于学习交流</p>
- </div>
- """.format(datetime.now().strftime("%Y-%m-%d %H:%M:%S")),
- unsafe_allow_html=True
- )
- if __name__ == "__main__":
- main()
复制代码
|
|