首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >我用AI写了个股市投资风格MBTI测试,文末附代码

我用AI写了个股市投资风格MBTI测试,文末附代码

作者头像
子晓聊技术
发布2026-04-23 20:51:12
发布2026-04-23 20:51:12
680
举报
文章被收录于专栏:子晓AI量化子晓AI量化

最近,MBTI(迈尔斯-布里格斯类型指标)刷爆了朋友圈,我抽了点空闲时间用AI写了股市版MBTI。

一、当 MBTI 遇上 K 线图

传统的 MBTI 测试关注的是我们的日常生活性格,但在投资领域,这四个维度被赋予了全新的金融含义。

通过我们对大量股民行为画像的分析,股市中的 MBTI 维度可以这样解读:

E vs I(外向 vs 内向):你的信息来源在哪里?

  • E 型股民: 热衷于参加各种投资沙龙,混迹各大股票论坛,喜欢和股友交流消息,情绪容易受群体感染,是“消息面”的忠实信徒。
  • I 型股民: 偏爱独处,喜欢独自研读财报和研报,对他人的推荐抱有怀疑态度,更相信自己的独立判断,是“孤独的深度研究者”。

S vs N(实感 vs 直觉):你更看重现实还是未来?

  • S 型股民: 务实派。紧盯市盈率(PE)、市净率(PB)、股息率,相信“历史会重演”,喜欢看得见摸得着的利润,是经典的“价值投资”拥趸。
  • N 型股民: 梦想家。关注商业模式、行业趋势、宏大的叙事,愿意为“未来的可能性”买单,哪怕现在亏损也没关系,是“成长股”猎手。

T vs F(思考 vs 情感):面对盈亏,你用脑还是用心?

  • T 型股民: 理性冷酷。市场只是数字游戏,亏损了就是逻辑证伪,砍仓毫不犹豫,不带有任何感情色彩。
  • F 型股民: 感性共情。对好公司有感情,亏损时不仅心疼钱,还觉得“辜负了信任”,容易因为同情心或希望而死扛。

J vs P(判断 vs 感知):你的交易系统是严格还是随性?

  • J 型股民: 计划狂。买入前设定好止损止盈点,严格按纪律执行,不喜欢意外,追求确定性和秩序感。
  • P 型股民: 灵活派。喜欢随机应变,看着盘面感觉不对就走,有机会就上,不喜欢被计划束缚,信奉“船小好调头”。

二、我们为什么要做这个测试?

因为在股市中,你的性格缺陷,就是你的财务漏洞。

  • 如果你是一个 情感型(F) 投资者,却妄图去做高波动的期货,那你很可能在情绪崩溃中爆仓;
  • 如果你是一个 感知型(P) 投资者,却非要学巴菲特做长线,那你很可能在股价波动中反复打脸,丢失筹码;
  • 如果你是一个 内向型(I) 投资者,却天天混在各大群里听消息,你很可能会成为被收割的“韭菜”。

这个测试不是为了给你贴标签,而是为了给你一面镜子

通过测试,你将获得一份专属的 《投资人格诊断书》

  1. 核心定位: 你的投资风格是什么?(如:技术分析派、价值成长派...)
  2. 维度雷达图: 直观看到你在理性、感性、规划、灵活上的倾向值。
  3. 优势与盲点: 你的性格让你擅长捕捉什么机会?又容易在什么地方栽跟头?
  4. 适配标的: 根据你的人格,推荐适合你的投资品种(是适合买蓝筹、科技股,还是适合做定投?)。

最后附上源代码

代码语言:javascript
复制
"""
股市投资风格 MBTI 测试 - Streamlit 应用
基于投资行为分析你的MBTI人格类型
"""
import streamlit as st
import pandas as pd
from typing import Dict, List, Tuple
# 页面配置
st.set_page_config(
    page_title="股市投资风格 MBTI 测试",
    page_icon="📈",
    layout="centered",
    initial_sidebar_state="expanded"
)
# 自定义 CSS
st.markdown("""
<style>
    .main-header {
        text-align: center;
        padding: 2rem 0;
        background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
        color: white;
        border-radius: 10px;
        margin-bottom: 2rem;
    }
    .question-box {
        background: #f8f9fa;
        padding: 1.5rem;
        border-radius: 10px;
        margin: 1rem 0;
        border-left: 4px solid #1e3c72;
    }
    .result-card {
        background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
        padding: 2rem;
        border-radius: 15px;
        margin: 1rem 0;
    }
    .dimension-bar {
        height: 30px;
        border-radius: 15px;
        margin: 0.5rem 0;
        background: #e0e0e0;
        overflow: hidden;
    }
    .dimension-fill {
        height: 100%;
        border-radius: 15px;
        transition: width 0.5s ease;
    }
    .stButton>button {
        width: 100%;
        margin-top: 1rem;
    }
    .investment-style {
        background: #fff;
        padding: 1.5rem;
        border-radius: 10px;
        margin: 1rem 0;
        border-left: 4px solid #28a745;
    }
</style>
""", unsafe_allow_html=True)
# MBTI 维度定义
DIMENSIONS = {
    'E': '外向 (Extraversion)',
    'I': '内向 (Introversion)',
    'S': '实感 (Sensing)',
    'N': '直觉 (Intuition)',
    'T': '思考 (Thinking)',
    'F': '情感 (Feeling)',
    'J': '判断 (Judging)',
    'P': '感知 (Perceiving)'
}
# MBTI 投资风格描述
MBTI_TYPES = {
    'ISTJ': {
        'name': '稳健价值投资者',
        'description': '你是一个谨慎、有条理的投资者。喜欢深入研究公司的财务报表,关注基本面和估值。倾向于投资成熟、稳定的蓝筹股,追求长期稳健的收益。投资决策基于数据和逻辑,不喜欢冒险。',
        'investment_style': '价值投资、长期持有、注重安全边际',
        'strengths': ['风险控制能力强', '研究深入', '纪律性强', '长期视角'],
        'weaknesses': ['可能错过成长机会', '过于保守', '对新兴行业反应慢', '灵活性不足'],
        'suitable_stocks': ['蓝筹股', '高分红股票', '防御性行业', '指数基金']
    },
    'ISFJ': {
        'name': '守护型投资者',
        'description': '你是一个忠诚、有责任感的投资者。倾向于投资自己熟悉和信任的公司,关注企业的社会责任和长期价值。喜欢稳定的投资组合,避免过度交易。重视投资的安全性和可持续性。',
        'investment_style': '长期持有、关注企业价值、稳健投资',
        'strengths': ['耐心', '忠诚度高', '风险意识强', '关注长期'],
        'weaknesses': ['可能过于保守', '对变化反应慢', '容易错过机会', '过度依赖熟悉领域'],
        'suitable_stocks': ['消费龙头', '公用事业', '银行股', 'REITs']
    },
    'INFJ': {
        'name': '愿景型投资者',
        'description': '你是一个有洞察力的投资者。能够看到行业和公司的长期发展趋势,喜欢投资有使命感和愿景的企业。关注企业的文化和价值观,倾向于投资能够改变世界的公司。投资决策结合直觉和理性分析。',
        'investment_style': '长期成长投资、关注行业趋势、价值投资',
        'strengths': ['有远见', '洞察力强', '坚持原则', '长期思维'],
        'weaknesses': ['可能过于理想化', '对短期波动敏感', '容易受情绪影响', '难以接受亏损'],
        'suitable_stocks': ['科技龙头', '新能源', '医疗健康', 'ESG主题']
    },
    'INTJ': {
        'name': '战略型投资者',
        'description': '你是一个有战略眼光的投资者。喜欢深入研究行业和公司,构建长期投资策略。能够看到别人忽视的机会,投资决策基于深入分析和逻辑推理。倾向于投资有护城河和竞争优势的公司。',
        'investment_style': '深度研究、长期策略、价值成长',
        'strengths': ['分析能力强', '有战略眼光', '独立思考', '执行力强'],
        'weaknesses': ['可能过于自信', '难以接受不同观点', '对短期波动不敏感', '过度集中'],
        'suitable_stocks': ['科技股', '成长股', '行业龙头', '优质白马']
    },
    'ISTP': {
        'name': '技术型投资者',
        'description': '你是一个灵活、务实的投资者。喜欢研究技术分析和市场走势,能够快速适应市场变化。投资决策基于实时数据和市场信号,不拘泥于传统理论。善于发现短期交易机会。',
        'investment_style': '技术分析、短线交易、灵活应变',
        'strengths': ['适应力强', '技术分析能力', '反应快', '实用主义'],
        'weaknesses': ['可能过于频繁交易', '缺乏长期规划', '容易冲动', '忽视基本面'],
        'suitable_stocks': ['高波动股票', '题材股', '次新股', '可转债']
    },
    'ISFP': {
        'name': '直觉型投资者',
        'description': '你是一个敏感、灵活的投资者。投资决策往往基于直觉和市场感觉,能够感知市场情绪的变化。喜欢投资自己感兴趣和有感情连接的公司。不拘泥于固定的投资策略,保持开放的心态。',
        'investment_style': '直觉投资、灵活调整、关注市场情绪',
        'strengths': ['市场敏感度高', '灵活', '直觉准确', '开放心态'],
        'weaknesses': ['缺乏系统性', '容易受情绪影响', '难以坚持策略', '风险控制不足'],
        'suitable_stocks': ['消费股', '文化娱乐', '新兴概念', '自己熟悉的行业']
    },
    'INFP': {
        'name': '理想型投资者',
        'description': '你是一个有理想和价值观的投资者。倾向于投资符合自己价值观的公司,关注企业的社会责任和可持续发展。投资决策结合价值观和理性分析,希望投资能够产生积极影响。喜欢长期持有优质公司。',
        'investment_style': '价值投资、关注ESG、长期持有',
        'strengths': ['有原则', '长期视角', '价值观驱动', '耐心'],
        'weaknesses': ['可能过于理想化', '对短期波动敏感', '难以接受亏损', '选择范围受限'],
        'suitable_stocks': ['ESG主题', '新能源', '社会责任企业', '优质成长股']
    },
    'INTP': {
        'name': '分析型投资者',
        'description': '你是一个逻辑严密、善于分析的投资者。喜欢深入研究投资理论和市场机制,构建复杂的投资模型。投资决策基于严谨的分析和数据验证,不轻易相信市场传言。善于发现市场定价错误。',
        'investment_style': '量化分析、深度研究、套利交易',
        'strengths': ['逻辑性强', '分析能力', '独立思考', '善于发现机会'],
        'weaknesses': ['可能过度分析', '行动迟缓', '忽视市场情绪', '过于理论化'],
        'suitable_stocks': ['被低估股票', '套利机会', '量化策略', '复杂金融产品']
    },
    'ESTP': {
        'name': '机会型投资者',
        'description': '你是一个敏锐、行动力强的投资者。善于发现市场机会并快速行动,喜欢短线交易和波段操作。投资决策基于实时市场信息,不拘泥于长期规划。能够承受较大风险,追求高收益。',
        'investment_style': '短线交易、波段操作、机会主义',
        'strengths': ['行动力强', '市场敏感', '适应力强', '敢于冒险'],
        'weaknesses': ['可能过于冲动', '缺乏长期规划', '风险控制不足', '容易频繁交易'],
        'suitable_stocks': ['高波动股票', '题材股', '次新股', '期权期货']
    },
    'ESFP': {
        'name': '社交型投资者',
        'description': '你是一个喜欢交流和分享的投资者。投资决策往往受到朋友、社群和市场热点的影响。喜欢讨论投资话题,从他人那里获取信息和灵感。投资风格灵活,容易受市场情绪影响。',
        'investment_style': '跟风投资、社交投资、灵活调整',
        'strengths': ['信息来源广', '社交能力强', '灵活', '乐观'],
        'weaknesses': ['容易受他人影响', '缺乏独立思考', '可能追涨杀跌', '风险控制不足'],
        'suitable_stocks': ['热门题材', '市场热点', '朋友推荐', '社交媒体热门']
    },
    'ENFP': {
        'name': '探索型投资者',
        'description': '你是一个充满好奇心和热情的投资者。喜欢探索新的投资机会和领域,对新兴行业和创新公司特别感兴趣。投资决策结合直觉和热情,能够看到未来的可能性。投资组合多样化,不拘一格。',
        'investment_style': '成长投资、多元化投资、关注创新',
        'strengths': ['有远见', '热情', '多元化', '善于发现机会'],
        'weaknesses': ['可能过于分散', '缺乏纪律', '容易受情绪影响', '难以坚持策略'],
        'suitable_stocks': ['科技股', '创新企业', '新兴市场', '成长型基金']
    },
    'ENTP': {
        'name': '策略型投资者',
        'description': '你是一个善于辩论和创新的投资者。喜欢挑战传统投资观念,寻找独特的投资机会。投资决策基于创新思维和策略分析,善于发现市场定价错误。投资风格灵活多变,不拘一格。',
        'investment_style': '策略投资、套利交易、创新思维',
        'strengths': ['创新思维', '策略能力强', '善于辩论', '灵活'],
        'weaknesses': ['可能过于复杂', '缺乏耐心', '容易频繁调整', '风险控制不足'],
        'suitable_stocks': ['套利机会', '复杂策略', '被误解的股票', '特殊机会']
    },
    'ESTJ': {
        'name': '管理型投资者',
        'description': '你是一个有条理、有执行力的投资者。喜欢制定详细的投资计划并严格执行,投资决策基于系统分析和既定策略。重视投资组合的管理和优化,追求效率和纪律性。倾向于投资管理良好的公司。',
        'investment_style': '系统投资、纪律执行、组合管理',
        'strengths': ['有组织能力', '纪律性强', '执行力强', '系统化'],
        'weaknesses': ['可能过于僵化', '缺乏灵活性', '难以适应变化', '过度依赖系统'],
        'suitable_stocks': ['蓝筹股', '指数基金', 'ETF', '优质白马']
    },
    'ESFJ': {
        'name': '服务型投资者',
        'description': '你是一个乐于助人、有责任感的投资者。倾向于投资对社会有积极影响的公司,关注企业的社会责任。投资决策结合价值观和他人的建议,喜欢与朋友分享投资经验。重视投资的安全性和稳定性。',
        'investment_style': '价值投资、关注ESG、稳健投资',
        'strengths': ['有责任感', '关注社会价值', '善于合作', '稳健'],
        'weaknesses': ['可能过于保守', '容易受他人影响', '缺乏独立思考', '对变化反应慢'],
        'suitable_stocks': ['ESG主题', '消费龙头', '公用事业', '社会责任企业']
    },
    'ENFJ': {
        'name': '影响型投资者',
        'description': '你是一个有魅力、有影响力的投资者。喜欢与他人分享投资见解,能够影响和帮助他人做出投资决策。投资决策结合价值观和对他人的关注,倾向于投资有社会责任感的公司。重视投资的社会影响。',
        'investment_style': '价值投资、关注影响力、长期持有',
        'strengths': ['有影响力', '有同理心', '善于沟通', '有远见'],
        'weaknesses': ['可能过于关注他人', '容易受情绪影响', '难以接受亏损', '过度理想化'],
        'suitable_stocks': ['ESG主题', '社会责任企业', '影响力投资', '优质成长股']
    },
    'ENTJ': {
        'name': '领袖型投资者',
        'description': '你是一个有领导力、有战略眼光的投资者。喜欢制定宏大的投资策略并积极执行,投资决策基于深入分析和战略思考。能够看到市场的大趋势,善于把握重大投资机会。投资风格积极主动,追求卓越回报。',
        'investment_style': '战略投资、积极管理、追求卓越',
        'strengths': ['有领导力', '战略眼光', '执行力强', '自信'],
        'weaknesses': ['可能过于强势', '难以接受不同观点', '风险偏好高', '过度集中'],
        'suitable_stocks': ['行业龙头', '成长股', '科技股', '优质白马']
    }
}
# 股市投资风格测试问题
QUESTIONS = [
    # E vs I - 社交与能量来源
    {
        'dimension': 'EI',
        'question': '在股市投资中,你更倾向于:',
        'options': [
            '积极参与投资社区讨论,与他人分享观点',
            '独自研究和分析,不依赖他人意见'
        ]
    },
    {
        'dimension': 'EI',
        'question': '当你发现一个投资机会时,你会:',
        'options': [
            '立即告诉朋友,一起讨论和验证',
            '先自己深入研究,确认后再考虑分享'
        ]
    },
    {
        'dimension': 'EI',
        'question': '在投资决策过程中,你更喜欢:',
        'options': [
            '与他人讨论,听取不同意见',
            '独立思考,不受他人影响'
        ]
    },
    # S vs N - 信息收集方式
    {
        'dimension': 'SN',
        'question': '分析股票时,你更关注:',
        'options': [
            '具体的财务数据、市盈率、市净率等指标',
            '公司的商业模式、行业趋势和未来潜力'
        ]
    },
    {
        'dimension': 'SN',
        'question': '做投资决策时,你更看重:',
        'options': [
            '历史业绩和可验证的数据',
            '未来成长性和行业前景'
        ]
    },
    {
        'dimension': 'SN',
        'question': '你更相信:',
        'options': [
            '技术分析和历史走势',
            '基本面分析和行业逻辑'
        ]
    },
    # T vs F - 决策方式
    {
        'dimension': 'TF',
        'question': '面对投资亏损时,你会:',
        'options': [
            '理性分析原因,调整策略',
            '感到焦虑,考虑是否应该止损'
        ]
    },
    {
        'dimension': 'TF',
        'question': '选择股票时,你更看重:',
        'options': [
            '公司的盈利能力和估值水平',
            '公司的社会价值和影响力'
        ]
    },
    {
        'dimension': 'TF',
        'question': '做投资决策时,你更依赖:',
        'options': [
            '逻辑分析和客观数据',
            '直觉和市场情绪'
        ]
    },
    # J vs P - 生活方式
    {
        'dimension': 'JP',
        'question': '你的投资风格是:',
        'options': [
            '制定详细计划,严格执行',
            '灵活应对,根据市场变化调整'
        ]
    },
    {
        'dimension': 'JP',
        'question': '面对市场波动,你会:',
        'options': [
            '提前设定止损止盈点,按计划执行',
            '根据情况随时调整,保持灵活性'
        ]
    },
    {
        'dimension': 'JP',
        'question': '管理投资组合时,你更喜欢:',
        'options': [
            '定期调整和平衡,保持目标配置',
            '保持开放,根据机会灵活调整'
        ]
    }
]
def calculate_scores(answers: Dict[str, int]) -> Dict[str, int]:
    """计算各维度的得分"""
    scores = {
        'E': 0, 'I': 0,
        'S': 0, 'N': 0,
        'T': 0, 'F': 0,
        'J': 0, 'P': 0
    }
    for question_idx, answer in answers.items():
        question = QUESTIONS[int(question_idx)]
        dimension = question['dimension']
        if dimension == 'EI':
            if answer == 0:  # 第一个选项偏向E
                scores['E'] += 1
            else:  # 第二个选项偏向I
                scores['I'] += 1
        elif dimension == 'SN':
            if answer == 0:  # 第一个选项偏向S
                scores['S'] += 1
            else:  # 第二个选项偏向N
                scores['N'] += 1
        elif dimension == 'TF':
            if answer == 0:  # 第一个选项偏向T
                scores['T'] += 1
            else:  # 第二个选项偏向F
                scores['F'] += 1
        elif dimension == 'JP':
            if answer == 0:  # 第一个选项偏向J
                scores['J'] += 1
            else:  # 第二个选项偏向P
                scores['P'] += 1
    return scores
def determine_mbti_type(scores: Dict[str, int]) -> str:
    """根据得分确定MBTI类型"""
    mbti = ''
    mbti += 'E' if scores['E'] >= scores['I'] else 'I'
    mbti += 'S' if scores['S'] >= scores['N'] else 'N'
    mbti += 'T' if scores['T'] >= scores['F'] else 'F'
    mbti += 'J' if scores['J'] >= scores['P'] else 'P'
    return mbti
def render_welcome_page():
    """渲染欢迎页面"""
    st.markdown('<div class="main-header"><h1>📈 股市投资风格 MBTI 测试</h1><p>通过投资行为分析你的性格类型</p></div>',
                unsafe_allow_html=True)
    st.markdown("""
    ### 📋 关于测试
    这是一个基于投资行为的 MBTI 人格测试。通过分析你在股市投资中的行为模式、决策方式和思维习惯,来揭示你的性格类型。
    测试将评估你在以下四个维度上的偏好:
    - **E vs I** - 外向 vs 内向:你在投资中如何获取信息和能量
    - **S vs N** - 实感 vs 直觉:你如何收集和分析投资信息
    - **T vs F** - 思考 vs 情感:你如何做投资决策
    - **J vs P** - 判断 vs 感知:你如何管理投资组合
    ### ⏱️ 测试说明
    - 共 12 道题目,全部与股市投资相关
    - 每道题有 2 个选项
    - 选择最符合你真实投资行为的答案
    - 测试时间约 3-5 分钟
    ### 💡 温馨提示
    - 请根据你实际的投资行为回答,而不是理想中的行为
    - 选择最自然、最符合你日常投资习惯的答案
    - 没有对错之分,每种投资风格都有其优势和适用场景
    - 测试结果仅供参考,不构成投资建议
    """)
    if st.button("开始测试", key="start_test", use_container_width=True):
        st.session_state.current_page = 'test'
        st.session_state.current_question = 0
        st.session_state.answers = {}
        st.rerun()
def render_test_page():
    """渲染测试页面"""
    st.markdown('<div class="main-header"><h1>📈 股市投资风格 MBTI 测试</h1></div>', unsafe_allow_html=True)
    # 进度条
    progress = (st.session_state.current_question + 1) / len(QUESTIONS)
    st.progress(progress)
    st.markdown(f"<p style='text-align: center;'>问题 {st.session_state.current_question + 1} / {len(QUESTIONS)}</p>",
                unsafe_allow_html=True)
    # 显示当前问题
    question = QUESTIONS[st.session_state.current_question]
    st.markdown(f'<div class="question-box"><h3>{question["question"]}</h3></div>', unsafe_allow_html=True)
    # 选项按钮
    col1, col2 = st.columns(2)
    with col1:
        if st.button(question['options'][0], key=f"option_{st.session_state.current_question}_0",
                     use_container_width=True):
            st.session_state.answers[str(st.session_state.current_question)] = 0
            next_question()
    with col2:
        if st.button(question['options'][1], key=f"option_{st.session_state.current_question}_1",
                     use_container_width=True):
            st.session_state.answers[str(st.session_state.current_question)] = 1
            next_question()
    # 返回按钮
    if st.session_state.current_question > 0:
        if st.button("← 上一题", key="prev_question", use_container_width=True):
            st.session_state.current_question -= 1
            st.rerun()
def next_question():
    """进入下一题"""
    if st.session_state.current_question < len(QUESTIONS) - 1:
        st.session_state.current_question += 1
        st.rerun()
    else:
        st.session_state.current_page = 'result'
        st.rerun()
def render_result_page():
    """渲染结果页面"""
    st.markdown('<div class="main-header"><h1>🎉 测试完成!</h1></div>', unsafe_allow_html=True)
    # 计算得分
    scores = calculate_scores(st.session_state.answers)
    mbti_type = determine_mbti_type(scores)
    # 显示结果
    result_info = MBTI_TYPES[mbti_type]
    st.markdown(
        f'<div class="result-card"><h2 style="text-align: center;">{mbti_type} - {result_info["name"]}</h2></div>',
        unsafe_allow_html=True)
    st.markdown(f"""
    ### 📝 投资风格描述
    {result_info['description']}
    """)
    # 投资风格标签
    st.markdown(f'<div class="investment-style"><h3>💼 投资风格:{result_info["investment_style"]}</h3></div>',
                unsafe_allow_html=True)
    # 显示各维度得分
    st.markdown("### 📊 维度分析")
    # E vs I
    e_percent = scores['E'] / (scores['E'] + scores['I']) * 100 if (scores['E'] + scores['I']) > 0 else 50
    i_percent = 100 - e_percent
    st.markdown(f"**外向 (E) vs 内向 (I)** - 投资中的信息获取方式")
    st.markdown(
        f'<div class="dimension-bar"><div class="dimension-fill" style="width: {e_percent}%; background: #1e3c72;"></div></div>',
        unsafe_allow_html=True)
    st.markdown(f"<p>E: {e_percent:.1f}% | I: {i_percent:.1f}%</p>", unsafe_allow_html=True)
    # S vs N
    s_percent = scores['S'] / (scores['S'] + scores['N']) * 100 if (scores['S'] + scores['N']) > 0 else 50
    n_percent = 100 - s_percent
    st.markdown(f"**实感 (S) vs 直觉 (N)** - 投资信息分析方式")
    st.markdown(
        f'<div class="dimension-bar"><div class="dimension-fill" style="width: {s_percent}%; background: #2a5298;"></div></div>',
        unsafe_allow_html=True)
    st.markdown(f"<p>S: {s_percent:.1f}% | N: {n_percent:.1f}%</p>", unsafe_allow_html=True)
    # T vs F
    t_percent = scores['T'] / (scores['T'] + scores['F']) * 100 if (scores['T'] + scores['F']) > 0 else 50
    f_percent = 100 - t_percent
    st.markdown(f"**思考 (T) vs 情感 (F)** - 投资决策方式")
    st.markdown(
        f'<div class="dimension-bar"><div class="dimension-fill" style="width: {t_percent}%; background: #28a745;"></div></div>',
        unsafe_allow_html=True)
    st.markdown(f"<p>T: {t_percent:.1f}% | F: {f_percent:.1f}%</p>", unsafe_allow_html=True)
    # J vs P
    j_percent = scores['J'] / (scores['J'] + scores['P']) * 100 if (scores['J'] + scores['P']) > 0 else 50
    p_percent = 100 - j_percent
    st.markdown(f"**判断 (J) vs 感知 (P)** - 投资组合管理方式")
    st.markdown(
        f'<div class="dimension-bar"><div class="dimension-fill" style="width: {j_percent}%; background: #ffc107;"></div></div>',
        unsafe_allow_html=True)
    st.markdown(f"<p>J: {j_percent:.1f}% | P: {p_percent:.1f}%</p>", unsafe_allow_html=True)
    # 优势和劣势
    col1, col2 = st.columns(2)
    with col1:
        st.markdown("### ✅ 投资优势")
        for strength in result_info['strengths']:
            st.markdown(f"- {strength}")
    with col2:
        st.markdown("### ⚠️ 需要注意")
        for weakness in result_info['weaknesses']:
            st.markdown(f"- {weakness}")
    # 适合的股票类型
    st.markdown("### 🎯 适合的投资标的")
    suitable_stocks = "、".join(result_info['suitable_stocks'])
    st.markdown(f"<p>{suitable_stocks}</p>", unsafe_allow_html=True)
    # 免责声明
    st.markdown("---")
    st.markdown("""
    ### ⚠️ 免责声明
    - 本测试仅供娱乐和自我了解,不构成任何投资建议
    - 投资有风险,入市需谨慎
    - 请根据自身风险承受能力和投资目标做出决策
    - 建议结合专业投资顾问的意见进行投资
    """)
    # 重新测试按钮
    if st.button("重新测试", key="retake_test", use_container_width=True):
        st.session_state.current_page = 'welcome'
        st.session_state.current_question = 0
        st.session_state.answers = {}
        st.rerun()
def main():
    """主函数"""
    # 初始化 session state
    if 'current_page' not in st.session_state:
        st.session_state.current_page = 'welcome'
    if 'current_question' not in st.session_state:
        st.session_state.current_question = 0
    if 'answers' not in st.session_state:
        st.session_state.answers = {}
    # 根据当前页面渲染不同内容
    if st.session_state.current_page == 'welcome':
        render_welcome_page()
    elif st.session_state.current_page == 'test':
        render_test_page()
    elif st.session_state.current_page == 'result':
        render_result_page()
if __name__ == '__main__':
    main()

选择适合自己性格的交易方式

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子晓聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、当 MBTI 遇上 K 线图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档