求一个选股策略,感谢大神

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

近一个月连续3日区间涨幅不超过20%,连续10日区间涨幅不超过100%,连续30日区间涨幅不超过200%的股票,非ST,非创业板,非科创板,非北证

评论

用户头像
2025-06-12 10:20:52

为了构建您所需要的选股策略,我们可以采取以下步骤。我们的目标是筛选出过去一个月、十天和三十天区间内涨幅分别不超过20%,100%及200%的非ST股票(包括但不限于主板、中小板)、非创业板、非科创板及北交所上市的股票。下面是一个简单的策略实现流程:

步骤一:定义筛选条件

  • 时间范围:选取最近一个月的交易数据
  • 涨幅限制
    • 过去3日区间涨幅不超过20%
    • 过去10日区间涨幅不超过100%
    • 过去30日区间涨幅不超过200%

步骤二:策略实现

使用编程语言实现(Python示例)

import pandas as pd
from datetime import timedelta
from stock_data_provider import StockData  # 假设这是提供股票数据的接口或库

def filter_stocks(stock_prices):
    """
    根据涨幅限制筛选非ST、创业板、科创板及北交所股票。
    """
    filtered_stocks = []
    
    for _, row in stock_prices.iterrows():
        if not (is_st_stock(row) and
                is_canton_stock(row) and
                is_shenzhen_startup_board_stock(row) and
                is_north_star_exchange_stock(row)):
            # 计算过去3天、10天和30天的区间涨幅是否满足条件
            daily_returns = calculate_daily_returns(row['Close'])
            if all(f > -20 for f in daily_returns[:3]) and \
               all(f > -100 for f in daily_returns[:10]) and \
               all(f > -200 for f in daily_returns[:30]):
                filtered_stocks.append((row['Ticker'], row['Close']))

    return pd.DataFrame(filtered_stocks, columns=['Ticker', 'Last Price'])

def is_st_stock(stock_info):
    """
    判断股票是否为ST。
    """
    # 实际的判断函数应依据具体的数据源
    st_flags = {'A': False, 'S': True}  # 假设'A'代表非ST,'S'代表ST
    return st_flags.get(stock_info['ST'], False)

def is_canton_stock(stock_info):
    """
    判断股票是否为创业板。
    """
    return stock_info['Market'] != '创业板'

def is_shenzhen_startup_board_stock(stock_info):
    """
    判断股票是否为中小板(深市主板)。
    """
    return (stock_info['Market'] == '主板') and not ('CS' in stock_info['Code'])

def is_north_star_exchange_stock(stock_info):
    """
    判断股票是否为科创板。
    """
    return stock_info['Market'] != '科创板'

def calculate_daily_returns(closing_prices):
    """
    计算每日收益率,假设我们有一个时间序列DataFrame,包含收盘价。
    """
    returns = (closing_prices / closing_prices.shift(1) - 1).fillna(0)
    return [return_ for _, return_ in returns.items()]

# 假设使用了适当的接口或库来获取股票价格数据
stock_prices_data = StockData().get_last_month_prices('SH', '600519')  # 根据实际需要调整参数和股票代码

filtered_stocks_df = filter_stocks(stock_prices_data)
print(filtered_stocks_df)

调整与优化

此策略通过一个简单的Python脚本实现,主要依据特定时间窗口的区间涨幅来过滤股票。实际应用中可能需要根据具体的数据源调整is_st_stockis_canton_stockis_shenzhen_startup_board_stockis_north_star_exchange_stock等函数逻辑,并对计算每日收益率的方法进行优化或替换以适应不同的数据处理需求。

这只是一个基础框架,具体实现还需要根据所使用的股票数据提供库的特性以及具体的市场规则(例如ST股标志、交易所分类等)进行调整。

评论