Py学习  »  Python

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

子晓聊技术 • 2 月前 • 157 次点击  

有同学问我,怎么用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