社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【Python技术】怎么管理自己的问财多策略

子晓聊技术 • 2 周前 • 40 次点击  

有同学问我,怎么用Python实现策略选股,  我其实自己用得很low的,就是用的问财自然语句管理我的不同策略。不管是  竞价模式、 盘中追涨模式、一进二模式 ,  我就是用自然语句实现的。
虽然我知道 一些同学 是用聚宽因子 或QMT因子、 或通达信选股实现。 每个人的习惯不一样, 选择自己习惯的方式就好了。  需要注意的一点,问财的自然语句 需要自己确认语句稳定性,因为一些问法 问财不一定能正确识别。 对于严谨的同学,完全可以自己用 财务因子、情绪因子、资金因子 自行用Python代码实现选股。
也许有同学会说,用同花顺APP分组也可以做到这点,为啥这里用界面实现。 其实你的策略一旦稳定, 你后期完全可以用Python语言借助miniqmt自动交易的。
我之前写过问财+miniqmt自动交易的文章,以及问财+miniqmt的文章, 感兴趣的同学可以翻一翻。 如果需要miniqmt开户,可以找我咨询。 

相关文章推荐:
我让AI辅助编写了问财QMT自动交易系统
利用问财、miniqmt打造一款属于自己的量化交易系统

题外话:
我写的文章很杂, 比如库 akshare、 tushare、 miniqmt、mootdx、pywencai等有在用,其实这些工具我在不同的阶段都有用到部分。  tushare这1周出问题,一些同学慌了,没有备用方案。 
就像股票投资名言, 不要把鸡蛋放在同一个篮子里。 我们做技术的也一样,也要有备用技术方案。  就像我之前写的问财选股,我还专门写了一套 东方财富条件选股做备用。

这里贴一下完整代码,参考下思路, 具体根据自己的实际情况改造。 备注:如果发现格式有多余的特殊字符,用普通浏览器打开复制应该没问题。 希望我的分享对大家有所帮助
import streamlit as stimport pandas as pdimport jsonimport osimport pywencai# 初始化Session Stateif 'strategies' not in st.session_state:    st.session_state.strategies = {}if 'last_result' not in st.session_state:    st.session_state.last_result = None# 策略存储文件名STRATEGY_FILE = "wencai_strategies.json"# 加载策略def load_strategies():    if os.path.exists(STRATEGY_FILE):        with open(STRATEGY_FILE, 'r'as f:            st.session_state.strategies = json.load(f)# 保存策略def save_strategies():    with open(STRATEGY_FILE, 'w'as f:        json.dump(st.session_state.strategies, f, indent=2)# 执行问财查询def run_wencai_query(query_str):    """执行问财查询并返回结果"""    try:        if not query_str:            st.warning("查询条件不能为空")            return None        # 使用pywencai执行查询        result = pywencai.get(query=query_str)        return result    except Exception as e:        st.error(f"查询失败: {str(e)}")        return None# 页面布局st.set_page_config(    page_title="问财策略查询工具",    page_icon="📊",    layout="wide")# 加载策略load_strategies()# 侧边栏 - 策略管理with st.sidebar:


    
    st.header("📋 策略管理")    # 添加新策略    with st.expander("➕ 添加新策略", expanded=False):        with st.form("add_strategy"):            strategy_name = st.text_input("策略名称", key="strategy_name")            condition = st.text_area("完整查询语句", key="condition_input",                                     help="例如: ROE连续三年大于10%,净利率同比增长超过20%,市盈率小于30")            submit = st.form_submit_button("保存策略")            if submit and strategy_name:                if strategy_name in st.session_state.strategies:                    st.warning("该策略名称已存在!")                elif not condition.strip():                    st.warning("请输入查询语句")                else:                    st.session_state.strategies[strategy_name] = {                        "query": condition.strip(),                        "last_used": pd.Timestamp.now().strftime("%Y-%m-%d %H:%M:%S")                    }                    save_strategies()                    st.success(f"策略 '{strategy_name}' 已保存!")    # 策略列表    st.divider()    st.subheader("已保存策略")    if not st.session_state.strategies:        st.info("暂无策略,请添加新策略")    else:        for name, details in list(st.session_state.strategies.items()):            col1, col2 = st.columns([0.70.3])            with col1:                st.markdown(f"**{name}**")                st.caption(f"最后使用: {details['last_used']}")            with col2:                if st.button("删除", key=f"del_{name}"):                    del st.session_state.strategies[name]                    save_strategies()                    st.rerun()# 主面板st.title("📊 问财策略查询")# 策略选择和查询执行if st.session_state.strategies:    # 策略选择    selected_strategy = st.selectbox(        "选择策略",        list(st.session_state.strategies.keys()),        index=0    )    # 显示策略详情    strategy_details = st.session_state.strategies[selected_strategy]    query_str = strategy_details["query"]    st.subheader("策略详情")    st.info(f"**策略名称**: {selected_strategy}")    st.code(query_str, language="sql")    # 编辑策略按钮    with st.expander("✏️ 编辑策略", expanded=False):        new_query = st.text_area("修改查询语句", value=query_str, height=150)        if st.button("💾 保存修改", key=f"update_{selected_strategy}"):            st.session_state.strategies[selected_strategy]["query"] = new_query.strip()            save_strategies()            st.success("策略已更新!")            st.rerun()    # 执行查询    if st.button("🚀 执行查询"type="primary", key="run_query"):        with st.spinner(f"执行中... 正在查询 {selected_strategy}"):            # 更新最后使用时间            st.session_state.strategies[selected_strategy]["last_used"] = pd.Timestamp.now().strftime(                "%Y-%m-%d %H:%M:%S")            save_strategies()            # 执行查询            result = run_wencai_query(query_str)            if result is not None:                if not


    
 result.empty:                    st.session_state.last_result = result                    st.session_state.last_strategy = selected_strategy                    st.session_state.last_query = query_str                else:                    st.info("未找到匹配的结果")# 显示结果区域if st.session_state.last_result is not None:    st.divider()    st.subheader(f"查询结果: {st.session_state.last_strategy}")    # 显示查询语句    st.info(f"**查询语句**: {st.session_state.last_query}")    df = st.session_state.last_result    # 简单数据预处理    if '代码' in df.columns:        df['代码'] = df['代码'].astype(str).str.zfill(6)    # 结果展示    st.dataframe(df, height=600)    # 下载按钮    csv = df.to_csv(index=False).encode('utf-8')    st.download_button(        label="下载CSV",        data=csv,        file_name=f"wencai_{st.session_state.last_strategy.replace(' ''_')}.csv",        mime='text/csv'    )else:    st.info("请选择策略后执行查询,或使用直接查询功能")

如果我的分享对你投资有所帮助,不吝啬给个点赞关注呗。

如果对每日复盘感兴趣,欢迎关注我另外一个号。重在市场理解(大盘情绪、 热门概念板块、 热门个股), 技术只是辅助。  另外每天板块RPS变化也会在盘后更新在这个号上。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/185807
 
40 次点击