快进快出:3分钟掌握A股低开涨停套利策略

科技   2024-08-30 18:52   广东  

大家好,我是橙哥!今天给大家介绍短期低开涨停套利策略,这个策略是一个专门为 A 股市场设计的短线交易策略,简单来说,就是利用股市中的短期波动来快速赚钱。这个策略主要适用于那些开盘时股价下跌,但很快又涨停的股票。通过分析市场情绪和一些技术指标,我们可以找到一些短期内有赚钱潜力的股票,然后快速买入并卖出,从而获得短期收益。回测效果如下:

策略逻辑

选股逻辑:

首先,我们会从市场上筛选出前一天涨停但没有连续涨停的股票。接着,从这些股票中挑选那些位置相对较低且当天开盘价格低于前一天收盘价的股票。满足这些条件的股票,我们会进行均等仓位的买入。

卖出逻辑:

卖出操作分为两个时间点。上午,当股票价格突破前一天的高点时,我们会进行止盈卖出操作。下午接近收盘时,如果价格没有达到预期的高点,我们就会通过止损卖出,避免持有过夜的风险。

风控措施:

为了控制风险,我们会使用严格的止盈和止损机制。这能确保即使市场出现意外波动,我们也能把损失控制在可接受的范围内。同时,我们还会过滤掉高风险的股票,比如 ST 股、次新股和科创板股票,以确保选中的股票更为稳健。

策略代码详解

1. 初始化函数 initialize

在策略的初始化阶段,我们通过initialize函数设置了一些基本参数。这里,我们启用了真实价格交易,并防止使用未来数据来确保策略的可靠性。还设定了每天的交易时间表:早上 9:30 进行选股和买入操作,上午 11:28 和下午 14:50 分别进行两次卖出操作。这部分代码如下:

def initialize(context):
    set_option('use_real_price'True)  # 使用真实价格进行交易
    set_option('avoid_future_data'True)  # 防止未来数据干扰
    log.set_level('system''error')  # 过滤系统日志,避免过多冗余信息

    run_daily(buy, '09:30')  # 每天9:30进行选股和买入操作
    run_daily(sell, '11:28')  # 每天11:28进行第一次卖出操作
    run_daily(sell, '14:50')  # 每天14:50进行第二次卖出操作

功能介绍:

这个初始化函数主要用来设置策略的基本配置,比如是否使用真实价格、如何处理日志信息等。它还通过run_daily函数设定了每日的交易计划,确保在开盘、上午和下午的固定时间点执行选股、买入和卖出的操作。

2. 选股逻辑与买入 buy

在选股和买入操作中,我们首先获取前一天涨停的股票列表,然后筛选出那些当天低开的股票,并且这些股票的相对位置较低。这部分代码如下:

def buy(context):
    date = transform_date(context.previous_date, 'str')
    current_data = get_current_data()

    initial_list = prepare_stock_list(date)  # 获取当天所有可交易股票列表
    hl_list = get_hl_stock(initial_list, date)  # 获取前一天涨停的股票

    if hl_list:
        ccd = get_continue_count_df(hl_list, date, 10)  # 筛选未连板股票
        lb_list = list(ccd.index)
        stock_list = [s for s in hl_list if s not in lb_list]

        rpd = get_relative_position_df(stock_list, date, 60)  # 计算相对位置,选择位置较低的股票
        rpd = rpd[rpd['rp'] <= 0.5]
        stock_list = list(rpd.index)

        if stock_list:
            df = get_price(stock_list, end_date=date, frequency='daily', fields=['close'], count=1, panel=False, fill_paused=False, skip_paused=True).set_index('code')
            df['open_pct'] = [current_data[s].day_open / df.loc[s, 'close'for s in stock_list]
            df = df[(0.96 <= df['open_pct']) & (df['open_pct'] <= 0.97)]  # 只选择低开3%左右的股票
            stock_list = list(df.index)

        if not context.portfolio.positions and stock_list:
            for s in stock_list:
                order_target_value(s, context.portfolio.total_value / len(stock_list))  # 买入每只股票
                log.info(f"买入: {get_security_info(s, date).display_name} ({s})")

功能介绍:

这段代码首先筛选出前一天涨停但未连续涨停的股票,然后根据当天的开盘情况,挑选出低开且位置相对较低的股票进行买入。我们确保在符合条件的股票中进行均仓买入,即每只股票都分配相同的投资金额。

3. 卖出逻辑 sell

卖出操作分为两个时间点,上午和下午。根据不同的市场情况,我们分别进行止盈和止损操作,确保当天清仓,避免隔夜风险。代码如下:

def sell(context):
    date = transform_date(context.previous_date, 'str')
    current_data = get_current_data()

    if str(context.current_dt)[-8:] == '11:28:00':
        for s in list(context.portfolio.positions):
            if (context.portfolio.positions[s].closeable_amount != 0 and
                current_data[s].last_price < current_data[s].high_limit and
                current_data[s].last_price > context.portfolio.positions[s].avg_cost):
                order_target_value(s, 0)  # 止盈卖出
                log.info(f"止盈卖出: {get_security_info(s, date).display_name} ({s})")

    if str(context.current_dt)[-8:] == '14:50:00':
        for s in list(context.portfolio.positions):
            if (context.portfolio.positions[s].closeable_amount != 0 and
                current_data[s].last_price < current_data[s].high_limit):
                order_target_value(s, 0)  # 止损卖出
                log.info(f"止损卖出: {get_security_info(s, date).display_name} ({s})")

功能介绍:

这段代码确保在上午 11:28 进行止盈操作,如果股票价格达到了预期的高点,我们就卖出以锁定利润。如果上午没有达到预期,我们会在下午 14:50 进行止损操作,避免持有过夜的风险。这样可以在波动较大的市场中确保最大程度地保护我们的投资。

4. 辅助函数与工具

在策略运行过程中,我们还使用了一些辅助函数来处理日期和股票筛选等操作。例如,transform_date函数用于处理日期的格式转换,filter_new_stockfilter_st_stock等函数则用于过滤高风险股票,确保我们的选股更稳定可靠。

日期处理函数

def transform_date(date, date_type):
    if isinstance(date, str):
        dt_date = dt.datetime.strptime(date, '%Y-%m-%d')
    elif isinstance(date, dt.datetime):
        dt_date = date
    elif isinstance(date, dt.date):
        dt_date = dt.datetime.combine(date, dt.datetime.min.time())
    else:
        raise ValueError("Invalid date format")

    date_mapping = {
        'str': dt_date.strftime('%Y-%m-%d'),
        'dt': dt_date,
        'd': dt_date.date()
    }

    return date_mapping[date_type]

功能介绍:

transform_date函数用来处理和转换日期格式,确保我们的日期信息在策略运行中始终是准确的。这个函数可以将日期从字符串转换为日期对象,或者反过来,确保在需要的时候提供正确的日期格式。

策略总结

这个“短期低开涨停套利策略”是一个基于市场情绪的短线交易策略,特别适合那些希望在短时间内获得收益的投资者。通过精确筛选涨停但未连板且低开的股票,并结合严格的止盈止损机制,这个策略能在控制风险的前提下,利用市场的短期波动实现快速盈利。而通过自动化的代码操作,我们可以让整个交易过程更加高效和准确。

长按扫描下方二维码获取本文完整源码下载方式:

点击阅读原文,加入「宽客邦量化俱乐部

开发者阿橙
宽客邦量化创始人。专注AI技术应用、机器学习与量化投资。
 最新文章