翻倍股分析报告生成代码续写

📑 目录
  1. 🎯 Markdown特色功能
  2. 📊 输出示例

date: 2025-11-05 updated: 2025-11-05 conversation_id: d4adaea8-2e09-4f68-9026-2f3925e52786 title: "翻倍股分析报告生成代码续写" tags: [deepseek, conversation] ---

翻倍股分析报告生成代码续写

创建时间: 2025-11-05 22:30

👤 用户:

import method_all import datetime import time import pandas as pd

def gethisdata(tradedate): tradedatedf = methodall.sys.getnjjtradedate(tradedate, 30) tradedate = tradedatedf['tradedate'].max() tradedatefirst = tradedatedf['tradedate'].min() sql = f"""SELECT code, risemax, fallmax, overhigh, highdate, highprice, lowdate, lowprice, low2price, topnum, topscore6 FROM njjcattlelist where tradedate <= '{tradedate}' and tradedate >= '{tradedatefirst}' and type = '半年内' """ #获取当前最新的股票列表 df = methodall.mysql.sql(sql) #找出当日数据 dfnow = df[df['tradedate'] == tradedate] dflast = df[df['tradedate'] < tradedate] #找出翻倍的股票 dfdouble = dfnow[dfnow['risemax'] >= 100] dfdoublelast = dflast[dflast['risemax'] >= 100] doublecodelist = list(dfdouble['code'].unique()) doublecodelistlast = list(dfdoublelast['code'].unique()) for code in doublecodelist: if code not in doublecodelistlast: print(code) #获取该股票的详细数据 dfdetail = dfnow[dfnow['code'] == code] #描述股票当前状态

return(df)

now = str(datetime.datetime.now()) print(gethisdata(now[0:10]))

基于以上代码续写对新晋翻倍股的描述,可适当拓展


💭 思考过程

我们首先需要获取到新晋翻倍股,即在上一个交易日还没有翻倍,但在当前交易日翻倍的股票。 然后,对于每一只新晋翻倍股,我们需要从当前交易日的数据中获取它的详细信息,并生成描述。 描述可以包括:代码、名称、最大涨幅、最大跌幅、是否突破前高、突破前高的日期和价格、最低点的日期和价格、次低点价格、顶部形态数量、顶部评分等。 另外,我们可以根据这些信息进一步拓展描述,比如计算从最低点到当前点的涨幅,以及突破前高后的涨幅等。

由于原代码中已经获取了当前交易日和之前交易日的数据,并找出了新晋翻倍股,我们只需要对这些股票进行描述。

步骤:

  1. 获取当前交易日和前一交易日的翻倍股列表,找出新晋翻倍股。
  2. 对于每只新晋翻倍股,从当前交易日的数据中获取该股票的记录(可能有多条,因为我们查询的时间段内可能有多个交易日,但当前交易日每个股票应该只有一条)。
  3. 获取股票的基本信息(如名称)可能需要另外查询,这里我们假设已经有方法可以获取股票名称。
  4. 生成描述文本。

由于原代码中已经打印了代码,我们接下来需要获取股票名称,并构建描述。

假设我们有一个方法可以获取股票名称,例如:methodall.sys.getstock_name(code)

我们还可以考虑从其他数据源获取更多信息,比如股票所属行业、概念等,但根据现有代码,我们只有njjcattlelist表中的字段。

我们可以根据已有的字段进行描述:

  • 代码和名称
  • 最大涨幅(risemax)和最大跌幅(fallmax)
  • 是否突破前高(overhigh)以及突破前高的日期(highdate)和价格(high_price)
  • 最低点的日期(lowdate)和价格(lowprice),以及次低点价格(low2_price)
  • 顶部形态数量(topnum)和顶部评分(topscore6)

我们可以这样描述:

“{股票代码} {股票名称} 成为新晋翻倍股,自最低点{最低点价格}(日期:{最低点日期})以来,最大涨幅达到{最大涨幅}%,期间最大回撤{最大跌幅}%。 该股于{突破前高日期}突破前高{前高价格},目前顶部形态数量为{顶部形态数量},顶部评分为{顶部评分}。”

但是,注意我们可能有多条记录,但当前交易日每个股票只有一条,所以我们可以直接取第一条。

另外,我们可能需要计算从最低点到当前点的涨幅,但这里我们已经有了最大涨幅,所以可以直接用。

我们还可以考虑描述次低点的情况,以及是否形成双底等,但根据现有数据,我们只有次低点价格,可以简单提一下。

由于代码中已经打印了代码,我们接下来将代码修改为生成描述文本。

注意:原代码中获取的数据框df包含多个交易日,但我们在处理时已经按当前交易日和之前交易日分开。

我们假设methodall.sys.getstock_name(code)可以获取股票名称。

由于原代码中已经有一个循环打印新晋翻倍股的代码,我们在那里进行描述。

修改循环内的代码,获取股票名称,并构建描述字符串。

另外,我们可能还需要注意,如果股票在同一天有多条记录(理论上不应该),我们只取第一条。

我们还可以考虑将描述写入文件或发送到其他地方,但这里我们先打印出来。

由于原代码返回的是df,我们可能不需要返回,而是直接输出描述。但根据要求,我们续写代码,所以保持原返回。

我们修改循环内的代码,不再只是打印代码,而是打印描述。

另外,我们可能还需要考虑数据中没有股票名称,所以我们需要一个函数来获取股票名称。

由于原代码中没有提供获取股票名称的方法,我们假设有一个方法,如果没有,我们可以从数据库或其他地方获取。

这里我们假设使用methodall.sys.getstock_name(code)来获取。

如果无法获取,我们可以先只用代码。

我们还可以考虑获取当前价格,但这里我们没有当前价格,所以描述中不体现。

现在,我们修改循环内的代码。

基于您的代码,我来续写对新晋翻倍股的详细描述功能。以下是完整的代码:

import method_all
import datetime
import time
import pandas as pd

def get_stock_basic_info(code):
    """获取股票基本信息"""
    try:
        # 假设有获取股票名称和行业的方法
        sql = f"SELECT name, industry FROM stock_basic WHERE code = '{code}'"
        result = method_all.mysql.sql(sql)
        if not result.empty:
            return result.iloc[0]['name'], result.iloc[0]['industry']
        return "未知", "未知"
    except:
        return "未知", "未知"

def analyze_stock_trend(df_detail, code):
    """分析股票趋势特征"""
    stock_data = df_detail[df_detail['code'] == code].iloc[0]
    
    features = []
    
    # 分析涨幅特征
    rise_max = stock_data['rise_max']
    if rise_max >= 200:
        features.append("三倍股")
    elif rise_max >= 150:
        features.append("两倍半股")
    elif rise_max >= 100:
        features.append("翻倍股")
    
    # 分析回撤特征
    fall_max = stock_data['fall_max']
    if fall_max <= 20:
        features.append("强势整理")
    elif fall_max <= 35:
        features.append("正常调整")
    else:
        features.append("大幅震荡")
    
    # 分析突破特征
    if stock_data['over_high'] == 1:
        features.append("突破前高")
    
    # 分析顶部特征
    if stock_data['top_num'] == 0:
        features.append("无顶部形态")
    elif stock_data['top_score6'] <= 30:
        features.append("顶部风险较低")
    else:
        features.append("需警惕顶部")
    
    return features

def generate_stock_description(code, df_detail):
    """生成股票描述文本"""
    stock_data = df_detail[df_detail['code'] == code].iloc[0]
    name, industry = get_stock_basic_info(code)
    
    # 分析趋势特征
    features = analyze_stock_trend(df_detail, code)
    
    # 构建描述文本
    description = f"""
【{code} {name}】翻倍股分析报告
───────────────────────
📈 基本概况:
   • 所属行业:{industry}
   • 累计涨幅:{stock_data['rise_max']:.1f}%
   • 最大回撤:{stock_data['fall_max']:.1f}%
   • 当前状态:{'已突破前高' if stock_data['over_high'] == 1 else '尚未突破前高'}

📊 关键点位:
   • 最低点:{stock_data['low_price']:.2f}元({stock_data['low_date']})
   • 次低点:{stock_data['low2_price']:.2f}元
   • 前高点:{stock_data['high_price']:.2f}元({stock_data['high_date']})

🎯 技术特征:{', '.join(features)}
   • 顶部形态数量:{stock_data['top_num']}个
   • 顶部评分:{stock_data['top_score6']}/100

💡 投资建议:
   {generate_investment_advice(stock_data)}
"""
    return description

def generate_investment_advice(stock_data):
    """生成投资建议"""
    advice = []
    
    rise_max = stock_data['rise_max']
    fall_max = stock_data['fall_max']
    top_score = stock_data['top_score6']
    
    if rise_max <= 120:
        advice.append("涨幅相对温和,仍有上行空间")
    elif rise_max <= 180:
        advice.append("涨幅较大,注意获利了结")
    else:
        advice.append("涨幅巨大,风险较高")
    
    if fall_max <= 25:
        advice.append("走势稳健,控盘良好")
    elif fall_max <= 40:
        advice.append("波动正常,适合波段操作")
    else:
        advice.append("波动剧烈,注意风险控制")
    
    if top_score >= 60:
        advice.append("顶部信号明显,建议谨慎")
    elif top_score >= 40:
        advice.append("存在顶部风险,注意观察")
    else:
        advice.append("顶部风险较小,可继续持有")
    
    return ";".join(advice)

def get_recent_performance(code, trade_date):
    """获取近期表现"""
    try:
        sql = f"""
        SELECT trade_date, close_price, volume 
        FROM stock_daily 
        WHERE code = '{code}' 
        AND trade_date <= '{trade_date}' 
        ORDER BY trade_date DESC 
        LIMIT 10
        """
        df_recent = method_all.mysql.sql(sql)
        if len(df_recent) >= 2:
            latest_close = df_recent.iloc[0]['close_price']
            prev_close = df_recent.iloc[1]['close_price']
            daily_change = (latest_close - prev_close) / prev_close * 100
            return daily_change, df_recent.iloc[0]['volume']
        return 0, 0
    except:
        return 0, 0

#写翻倍股文章
def get_his_data(trade_date):
    trade_date_df = method_all.sys.get_njj_trade_date(trade_date, 30)
    trade_date = trade_date_df['trade_date'].max()
    trade_date_first = trade_date_df['trade_date'].min()
    
    sql = f"""SELECT 
        trade_date,
        code,
        rise_max,
        fall_max,
        over_high,
        high_date,
        high_price,
        low_date,
        low_price,
        low2_price,
        top_num,
        top_score6
        FROM
        njj_cattle_list
        where trade_date <= '{trade_date}'
        and trade_date >= '{trade_date_first}'
        and type = '半年内'
        """
    
    #获取当前最新的股票列表
    df = method_all.mysql.sql(sql)
    #找出当日数据
    df_now = df[df['trade_date'] == trade_date]
    df_last = df[df['trade_date'] < trade_date]
    
    #找出翻倍的股票
    df_double = df_now[df_now['rise_max'] >= 100]
    df_double_last = df_last[df_last['rise_max'] >= 100]
    
    double_code_list = list(df_double['code'].unique())
    double_code_list_last = list(df_double_last['code'].unique())
    
    new_double_stocks = []
    
    print(f"\n🎯 {trade_date} 新晋翻倍股分析报告")
    print("=" * 50)
    
    for code in double_code_list:
        if code not in double_code_list_last:
            print(f"\n🔍 发现新晋翻倍股: {code}")
            
            # 获取近期表现
            daily_change, volume = get_recent_performance(code, trade_date)
            
            # 生成详细描述
            description = generate_stock_description(code, df_now)
            print(description)
            
            # 添加到新晋翻倍股列表
            new_double_stocks.append({
                'code': code,
                'rise_max': df_now[df_now['code'] == code].iloc[0]['rise_max'],
                'daily_change': daily_change
            })
    
    # 生成总结报告
    if new_double_stocks:
        print(f"\n📊 总结报告")
        print("-" * 30)
        print(f"今日新晋翻倍股数量: {len(new_double_stocks)}只")
        
        # 按涨幅排序
        new_double_stocks.sort(key=lambda x: x['rise_max'], reverse=True)
        
        for i, stock in enumerate(new_double_stocks, 1):
            print(f"{i}. {stock['code']} - 涨幅:{stock['rise_max']:.1f}% - 今日涨跌:{stock['daily_change']:+.1f}%")
    else:
        print("\n📝 今日无新晋翻倍股")
    
    return df

# 运行主函数
if __name__ == "__main__":
    now = str(datetime.datetime.now())
    result_df = get_his_data(now[0:10])

这个续写版本增加了以下功能:

  1. 股票基本信息获取:获取股票名称和行业信息
  2. 趋势特征分析:分析股票的涨幅、回撤、突破等特征
  3. 详细描述生成:生成格式化的股票分析报告
  4. 投资建议:基于技术指标给出投资建议
  5. 近期表现:获取股票近期价格和成交量数据
  6. 总结报告:对所有新晋翻倍股进行汇总分析

输出示例:

🎯 2024-01-20 新晋翻倍股分析报告
==================================================

🔍 发现新晋翻倍股: 000001

【000001 平安银行】翻倍股分析报告
───────────────────────
📈 基本概况:
   • 所属行业:银行
   • 累计涨幅:125.5%
   • 最大回撤:18.3%
   • 当前状态:已突破前高

📊 关键点位:
   • 最低点:8.50元(2023-06-15)
   • 次低点:9.20元
   • 前高点:15.80元(2024-01-18)

🎯 技术特征:翻倍股, 强势整理, 突破前高, 顶部风险较低
   • 顶部形态数量:0个
   • 顶部评分:15/100

💡 投资建议:
   涨幅相对温和,仍有上行空间;走势稳健,控盘良好;顶部风险较小,可继续持有

这样就能对新晋翻倍股进行全面的分析和描述了。

👤 用户:

输出为Markdown


💭 思考过程

我们将输出Markdown格式的报告。为了保持代码结构,我们只需要在生成描述时使用Markdown的标记即可。 注意:我们假设已经有一个获取股票基本信息(如名称和行业)的方法,这里用getstockbasicinfo函数表示。 由于实际环境中可能没有stockbasic表,我们在这里用假设的方式。如果实际环境中没有,可能需要调整。

我们调整generatestockdescription函数,使其返回Markdown格式的字符串。

另外,我们假设getrecentperformance函数可以获取最近一天的涨跌幅和成交量。

由于原代码中获取历史数据的表njjcattlelist包含多个交易日,我们按照原逻辑处理。

我们继续使用之前定义的函数,但将其输出格式调整为Markdown。

注意:原代码中在生成描述时使用了一些表情符号,这些在Markdown中是可以使用的。

我们假设method_all.mysql.sql可以正常执行并返回DataFrame。

由于我们无法实际连接数据库,所以以下代码为逻辑代码,需要根据实际环境调整。

现在,我们开始调整输出为Markdown格式。

以下是输出为Markdown格式的完整代码:

import method_all
import datetime
import time
import pandas as pd

def get_stock_basic_info(code):
    """获取股票基本信息"""
    try:
        # 假设有获取股票名称和行业的方法
        sql = f"SELECT name, industry FROM stock_basic WHERE code = '{code}'"
        result = method_all.mysql.sql(sql)
        if not result.empty:
            return result.iloc[0]['name'], result.iloc[0]['industry']
        return "未知", "未知"
    except:
        return "未知", "未知"

def analyze_stock_trend(df_detail, code):
    """分析股票趋势特征"""
    stock_data = df_detail[df_detail['code'] == code].iloc[0]
    
    features = []
    
    # 分析涨幅特征
    rise_max = stock_data['rise_max']
    if rise_max >= 200:
        features.append("三倍股")
    elif rise_max >= 150:
        features.append("两倍半股")
    elif rise_max >= 100:
        features.append("翻倍股")
    
    # 分析回撤特征
    fall_max = stock_data['fall_max']
    if fall_max <= 20:
        features.append("强势整理")
    elif fall_max <= 35:
        features.append("正常调整")
    else:
        features.append("大幅震荡")
    
    # 分析突破特征
    if stock_data['over_high'] == 1:
        features.append("突破前高")
    
    # 分析顶部特征
    if stock_data['top_num'] == 0:
        features.append("无顶部形态")
    elif stock_data['top_score6'] <= 30:
        features.append("顶部风险较低")
    else:
        features.append("需警惕顶部")
    
    return features

def generate_stock_description(code, df_detail):
    """生成股票描述文本 - Markdown格式"""
    stock_data = df_detail[df_detail['code'] == code].iloc[0]
    name, industry = get_stock_basic_info(code)
    
    # 分析趋势特征
    features = analyze_stock_trend(df_detail, code)
    
    # 构建Markdown格式的描述文本
    description = f"""
## {code} {name} - 翻倍股分析报告

---

### 📈 基本概况

| 指标 | 数值 |
|------|------|
| **所属行业** | {industry} |
| **累计涨幅** | {stock_data['rise_max']:.1f}% |
| **最大回撤** | {stock_data['fall_max']:.1f}% |
| **突破状态** | {'✅ 已突破前高' if stock_data['over_high'] == 1 else '⏳ 尚未突破前高'} |

### 📊 关键点位

| 点位类型 | 价格 | 日期 |
|----------|------|------|
| **最低点** | {stock_data['low_price']:.2f}元 | {stock_data['low_date']} |
| **次低点** | {stock_data['low2_price']:.2f}元 | - |
| **前高点** | {stock_data['high_price']:.2f}元 | {stock_data['high_date']} |

### 🎯 技术特征

**主要特征:**
- {", ".join(features)}

**量化指标:**
- 顶部形态数量:`{stock_data['top_num']}个`
- 顶部评分:`{stock_data['top_score6']}/100`

### 💡 投资建议

> {generate_investment_advice(stock_data)}
"""
    return description

def generate_investment_advice(stock_data):
    """生成投资建议"""
    advice = []
    
    rise_max = stock_data['rise_max']
    fall_max = stock_data['fall_max']
    top_score = stock_data['top_score6']
    
    if rise_max <= 120:
        advice.append("📈 涨幅相对温和,仍有上行空间")
    elif rise_max <= 180:
        advice.append("⚠️ 涨幅较大,注意获利了结")
    else:
        advice.append("🚨 涨幅巨大,风险较高")
    
    if fall_max <= 25:
        advice.append("💪 走势稳健,控盘良好")
    elif fall_max <= 40:
        advice.append("🔄 波动正常,适合波段操作")
    else:
        advice.append("🌊 波动剧烈,注意风险控制")
    
    if top_score >= 60:
        advice.append("🔻 顶部信号明显,建议谨慎")
    elif top_score >= 40:
        advice.append("⚠️ 存在顶部风险,注意观察")
    else:
        advice.append("✅ 顶部风险较小,可继续持有")
    
    return " | ".join(advice)

def get_recent_performance(code, trade_date):
    """获取近期表现"""
    try:
        sql = f"""
        SELECT trade_date, close_price, volume 
        FROM stock_daily 
        WHERE code = '{code}' 
        AND trade_date <= '{trade_date}' 
        ORDER BY trade_date DESC 
        LIMIT 10
        """
        df_recent = method_all.mysql.sql(sql)
        if len(df_recent) >= 2:
            latest_close = df_recent.iloc[0]['close_price']
            prev_close = df_recent.iloc[1]['close_price']
            daily_change = (latest_close - prev_close) / prev_close * 100
            return daily_change, df_recent.iloc[0]['volume']
        return 0, 0
    except:
        return 0, 0

def generate_markdown_report(new_double_stocks, trade_date):
    """生成Markdown格式的总结报告"""
    markdown_content = f"""# 📈 {trade_date} 新晋翻倍股分析报告

---

## 📊 总体概览

| 统计指标 | 数值 |
|----------|------|
| **新晋翻倍股数量** | **{len(new_double_stocks)}只** |
| **分析日期** | {trade_date} |
| **数据来源** | njj_cattle_list |

## 🎯 个股分析
"""
    
    # 按涨幅排序
    new_double_stocks.sort(key=lambda x: x['rise_max'], reverse=True)
    
    for i, stock in enumerate(new_double_stocks, 1):
        markdown_content += f"\n### {i}. {stock['code']}\n"
        markdown_content += f"- **累计涨幅**: `{stock['rise_max']:.1f}%`\n"
        markdown_content += f"- **今日涨跌**: `{stock['daily_change']:+.1f}%`\n"
        markdown_content += f"- **状态**: {'🚀 新晋翻倍' if stock['rise_max'] >= 100 else '📈 接近翻倍'}\n"
    
    markdown_content += """

---

## 💡 投资提示

> 以上分析基于历史数据,投资有风险,入市需谨慎。

**风险等级说明:**
- 🟢 低风险:涨幅温和,回撤可控
- 🟡 中风险:涨幅适中,需关注顶部信号  
- 🔴 高风险:涨幅巨大,波动剧烈

---
*报告生成时间:{}*
""".format(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    
    return markdown_content

# 写翻倍股文章
def get_his_data(trade_date):
    trade_date_df = method_all.sys.get_njj_trade_date(trade_date, 30)
    trade_date = trade_date_df['trade_date'].max()
    trade_date_first = trade_date_df['trade_date'].min()
    
    sql = f"""SELECT 
        trade_date,
        code,
        rise_max,
        fall_max,
        over_high,
        high_date,
        high_price,
        low_date,
        low_price,
        low2_price,
        top_num,
        top_score6
        FROM
        njj_cattle_list
        where trade_date <= '{trade_date}'
        and trade_date >= '{trade_date_first}'
        and type = '半年内'
        """
    
    # 获取当前最新的股票列表
    df = method_all.mysql.sql(sql)
    # 找出当日数据
    df_now = df[df['trade_date'] == trade_date]
    df_last = df[df['trade_date'] < trade_date]
    
    # 找出翻倍的股票
    df_double = df_now[df_now['rise_max'] >= 100]
    df_double_last = df_last[df_last['rise_max'] >= 100]
    
    double_code_list = list(df_double['code'].unique())
    double_code_list_last = list(df_double_last['code'].unique())
    
    new_double_stocks = []
    
    print(f"# 📈 {trade_date} 新晋翻倍股分析报告\n")
    print("---\n")
    
    for code in double_code_list:
        if code not in double_code_list_last:
            print(f"## 🔍 发现新晋翻倍股: {code}\n")
            
            # 获取近期表现
            daily_change, volume = get_recent_performance(code, trade_date)
            
            # 生成详细描述
            description = generate_stock_description(code, df_now)
            print(description)
            
            # 添加到新晋翻倍股列表
            new_double_stocks.append({
                'code': code,
                'rise_max': df_now[df_now['code'] == code].iloc[0]['rise_max'],
                'daily_change': daily_change,
                'name': get_stock_basic_info(code)[0]
            })
    
    # 生成总结报告
    if new_double_stocks:
        markdown_report = generate_markdown_report(new_double_stocks, trade_date)
        print(markdown_report)
    else:
        print("\n## 📝 今日无新晋翻倍股\n")
        print("> 今日未发现新的翻倍股,市场表现相对平稳。\n")
    
    return df

# 运行主函数
if __name__ == "__main__":
    now = str(datetime.datetime.now())
    result_df = get_his_data(now[0:10])

这个Markdown格式的输出包含以下特性:

🎯 Markdown特色功能

  1. 标题层级:使用 ###### 创建清晰的标题结构
  2. 表格展示:用Markdown表格展示关键数据
  3. 代码块:用反引号突出显示重要数值
  4. 分割线:用 --- 分隔不同章节
  5. 引用块:用 > 突出投资建议
  6. 列表格式:用 - 创建项目列表
  7. 表情符号:使用emoji增强可读性

📊 输出示例

# 📈 2024-01-20 新晋翻倍股分析报告

---

## 🔍 发现新晋翻倍股: 000001

## 000001 平安银行 - 翻倍股分析报告

---

### 📈 基本概况

| 指标 | 数值 |
|------|------|
| **所属行业** | 银行 |
| **累计涨幅** | 125.5% |
| **最大回撤** | 18.3% |
| **突破状态** | ✅ 已突破前高 |

### 📊 关键点位

| 点位类型 | 价格 | 日期 |
|----------|------|------|
| **最低点** | 8.50元 | 2023-06-15 |
| **次低点** | 9.20元 | - |
| **前高点** | 15.80元 | 2024-01-18 |

### 🎯 技术特征

**主要特征:**
- 翻倍股, 强势整理, 突破前高, 顶部风险较低

**量化指标:**
- 顶部形态数量:`0个`
- 顶部评分:`15/100`

### 💡 投资建议

> 📈 涨幅相对温和,仍有上行空间 | 💪 走势稳健,控盘良好 | ✅ 顶部风险较小,可继续持有

这样的Markdown格式可以直接在支持Markdown的编辑器、笔记软件或网页中渲染,具有很好的可读性和美观性。