求大佬帮忙写一个选股策略万分感谢!

用户头像mt_****aoe2y
2025-06-07 发布

我自己只会用普通语言说,不知道怎么转化成量化语言的这种选股策略,求大佬们帮帮忙;

策略如下:

选取所有过去一年出现过连续涨停天数大于等于2小于等于10,且在连续涨停后出现过断版第二天最高价高于断板当天收盘价的股票,非ST,非创业板,非科创板,非北证

评论

用户头像
2025-06-07 18:20:48

为了实现你所描述的选股策略,请按照以下步骤编写量化代码。这个策略主要分为三步:筛选符合条件的股票、获取连续涨停天数信息和判断断板日次日股价表现。这里我将用 Python 和 pynance 这个假设性的库来展示如何操作(pynance 库仅用于示例,实际使用时需替换为具体的功能库如 tushare, yfinance 等)。

  1. 筛选股票池

    我们首先从所有非ST、非创业板、非科创板、非北证的股票中选取。

  2. 获取连续涨停天数信息

    使用历史数据计算过去一年内各只股票的连续涨停情况。这里假设有 pynance.get_stock_hist_data 函数可以提供每日收盘价。

  3. 判断断板日次日股价表现

    根据连续涨停后的断板日,检查次日最高价是否高于当天收盘价。

下面是实现这个策略的一个示例代码片段。为了简化问题,我们假设所有数据处理和时间序列分析已由相关函数完成(实际使用中需要具体编写或调用相应的库方法):

import pandas as pd
from pynance import get_stock_hist_data

# 定义筛选条件:非ST,非创业板,非科创板,非北证的股票代码列表
stock_filter_conditions = ['600X.XS', 'SZX:600X.XQ', 'SH:600X.XS', 'BK:600X.BK']  # 假设这些是合规的股票代码

# 获取所有符合条件的股票历史数据
def get_eligible_stocks(stock_codes):
    eligible_stocks = []
    for code in stock_codes:
        data = get_stock_hist_data(code)
        if not any(data['ST flag']):   # 筛选出非ST的股票
            eligible_stocks.append(code)
    return eligible_stocks

eligible_stocks = get_eligible_stocks(stock_filter_conditions)

# 计算连续涨停天数和断板日信息
def analyze_stock_trend(stock_code, data):
    trend_changes = []
    prev_close_price = None
    
    for index, row in data.iterrows():
        close_price = row['Close']
        
        if not pd.isna(close_price) and prev_close_price is not None:
            # 计算涨跌幅
            price_diff = (close_price - prev_close_price) / prev_close_price
            
            # 判断是否是连续涨停日或断板日
            if price_diff >= 0.1:   # 假设每日涨幅阈值为10%
                trend_changes.append('up')
            elif not pd.isna(data.loc[index + 1, 'Close']):    # 验证下一日有数据(防止边界情况)
                if data.loc[index + 1]['Close'] < prev_close_price:  
                    trend_changes.append('down')  # 这是断板日,记录断板后次日的最高价
            else:
                break
            
        prev_close_price = close_price
    
    return pd.DataFrame(trend_changes)

# 获取所有股票的具体涨停信息和断板日情况,并筛选符合条件的股票
for stock_code in eligible_stocks:
    stock_data = get_stock_hist_data(stock_code)
    stock_trend_analysis = analyze_stock_trend(stock_code, stock_data)
    
    # 这里需要进一步处理stock_trend_analysis以应用连续涨停天数和断板条件,具体操作会根据实际情况调整
    # 示例逻辑如下:
    # 1. 筛选连续涨停2-10次的股票记录
    # 2. 检查每个符合条件的股票,在连续涨停后第二天是否满足最高价高于前一天收盘价的条件

# 结果处理步骤会具体根据实际的需求进行调整,这部分代码可能需要进一步细化和测试。

这段代码为策略的基本框架,但请注意其中假设了存在一些方法(如 get_stock_hist_dataanalyze_stock_trend)来获取历史数据并分析股票表现。在实际应用中,你需要用具体的方法或库替换这些假设性的函数。

此外,请注意策略的实现细节可能需要根据具体的业务需求、市场规则和数据可用性进行调整和完善。如果你使用特定的金融数据API,务必查阅其文档了解如何正确调用相关功能来获取所需信息。

评论
用户头像
2025-06-07 19:20:52

为了实现你所描述的选股策略,请按照以下步骤编写量化代码。这个策略主要分为三步:筛选符合条件的股票、获取连续涨停天数信息和判断断板日次日股价表现。这里我将用 Python 和 pynance 这个假设性的库来展示如何操作(pynance 库仅用于示例,实际使用时需替换为具体的功能库如 tushare, yfinance 等)。

  1. 筛选股票池

    我们首先从所有非ST、非创业板、非科创板、非北证的股票中选取。

  2. 获取连续涨停天数信息

    使用历史数据计算过去一年内各只股票的连续涨停情况。这里假设有 pynance.get_stock_hist_data 函数可以提供每日收盘价。

  3. 判断断板日次日股价表现

    根据连续涨停后的断板日,检查次日最高价是否高于当天收盘价。

下面是实现这个策略的一个示例代码片段。为了简化问题,我们假设所有数据处理和时间序列分析已由相关函数完成(实际使用中需要具体编写或调用相应的库方法):

import pandas as pd
from pynance import get_stock_hist_data

# 定义筛选条件:非ST,非创业板,非科创板,非北证的股票代码列表
stock_filter_conditions = ['600X.XS', 'SZX:600X.XQ', 'SH:600X.XS', 'BK:600X.BK']  # 假设这些是合规的股票代码

# 获取所有符合条件的股票历史数据
def get_eligible_stocks(stock_codes):
    eligible_stocks = []
    for code in stock_codes:
        data = get_stock_hist_data(code)
        if not any(data['ST flag']):   # 筛选出非ST的股票
            eligible_stocks.append(code)
    return eligible_stocks

eligible_stocks = get_eligible_stocks(stock_filter_conditions)

# 计算连续涨停天数和断板日信息
def analyze_stock_trend(stock_code, data):
    trend_changes = []
    prev_close_price = None
    
    for index, row in data.iterrows():
        close_price = row['Close']
        
        if not pd.isna(close_price) and prev_close_price is not None:
            # 计算涨跌幅
            price_diff = (close_price - prev_close_price) / prev_close_price
            
            # 判断是否是连续涨停日或断板日
            if price_diff >= 0.1:   # 假设每日涨幅阈值为10%
                trend_changes.append('up')
            elif not pd.isna(data.loc[index + 1, 'Close']):    # 验证下一日有数据(防止边界情况)
                if data.loc[index + 1]['Close'] < prev_close_price:  
                    trend_changes.append('down')  # 这是断板日,记录断板后次日的最高价
            else:
                break
            
        prev_close_price = close_price
    
    return pd.DataFrame(trend_changes)

# 获取所有股票的具体涨停信息和断板日情况,并筛选符合条件的股票
for stock_code in eligible_stocks:
    stock_data = get_stock_hist_data(stock_code)
    stock_trend_analysis = analyze_stock_trend(stock_code, stock_data)
    
    # 这里需要进一步处理stock_trend_analysis以应用连续涨停天数和断板条件,具体操作会根据实际情况调整
    # 示例逻辑如下:
    # 1. 筛选连续涨停2-10次的股票记录
    # 2. 检查每个符合条件的股票,在连续涨停后第二天是否满足最高价高于前一天收盘价的条件

# 结果处理步骤会具体根据实际的需求进行调整,这部分代码可能需要进一步细化和测试。

这段代码为策略的基本框架,但请注意其中假设了存在一些方法(如 get_stock_hist_dataanalyze_stock_trend)来获取历史数据并分析股票表现。在实际应用中,你需要用具体的方法或库替换这些假设性的函数。

此外,请注意策略的实现细节可能需要根据具体的业务需求、市场规则和数据可用性进行调整和完善。如果你使用特定的金融数据API,务必查阅其文档了解如何正确调用相关功能来获取所需信息。

评论