股票平台突破策略聚宽量化回测

该博客介绍了一种股票平台突破的量化交易策略,涉及横盘、涨停后的突破条件以及买卖点设置。策略包括开盘价低开3%止损、高开5%卖出、账户13%亏损及15%盈利清仓规则。通过Python实现回测,筛选符合条件的股票并进行动态管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

股票平台突破策略量化回测

策略逻辑
在振幅为15%以内(20cm的在30%以内),横盘60天左右。昨日涨停并且收盘价突破盘整平台最高价。次日以开盘价买入。
买卖点
买入次日开盘价低开3%以上的直接以开盘价止损。
高开5个点、非一字板的以开盘价卖出。
账户止损:当账户中某只股票损失成本的13%时清仓。
账户止盈:当账户中某只股票盈利15%时清仓;300和688的盈利30%清仓。

在这里插入图片描述

代码

from jqdata import *
import datetime

###    初步筛选出    300天内非st的、上市满300天的所有沪深股票
class Code(object):
    def __init__(self):
        ##  获取今天的日期
        self.today = datetime.date.today()   
        ###   获取300天之前的日期
        self.day1 = datetime.date.today()-datetime.timedelta(300)  
        self.day2 = datetime.datetime.strftime(self.today,"%Y-%m-%d" )
    def get_code1(self):
        ###  获取所有股票代码
        all_stock = get_all_securities(types=['stock'], date=self.day2)  
        code = all_stock['name']
        return code
    def get_code2(self):
        code = list(Code.get_code1(self).index)
        #  判断最近300天是否ST  并且删除st的股票代码
        df_st=get_extras('is_st',code,start_date=self.day1,end_date=self.day2)
        for i in code:
            if any(df_st[i].values):
                code.remove(i)
        stock_list=[]
        for i in code:
            start_date=get_security_info(i).start_date
            days=(self.today-start_date).days
            if days>=300:                   ####   选出上市满天300的股票
                stock_list.append(i)
        return stock_list
        
###  开盘前选出股票池,减少回测负担,要不然回测更慢
def market_open(context):
    code_demo = Code()
    code1 = code_demo.get_code2()
    return code1
    
def initialize(context):
    # 设定上证指数作为基准
    set_benchmark('000001.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    # 设置滑点  为0.01
    set_slippage(FixedSlippage(0.01))
    g.security = market_open(context)

###   交易过程    
def handle_data(context,data):
    cur_date = context.current_dt.strftime('%Y-%m-%d')
    yesterday = (context.current_dt-datetime.timedelta(1)).strftime('%Y-%m-%d')
    try:
        for i in g.security:   
            zt_p = get_current_data()[i].high_limit
            dt_p = get_current_data()[i].low_limit
            open_p = get_current_data()[i].last_price  ###  day_open 
            df=get_price(i,end_date=yesterday,count=60,frequency='daily',fields=['high','low','close','open'])   
            df_open = df.open[-1]
            df_low = df.low[:-1].min()
            df_high = df.high[:-1].max()
            df_close = df.close[-1]
            df_before_close = df.close[-2]
            
            if i in context.portfolio.positions.keys() and context.portfolio.positions[i].init_time.strftime('%Y-%m-%d')!=cur_date:
                if context.portfolio.positions[i].init_time.strftime('%Y-%m-%d')!=cur_date:
                    ###    每日低开3个点以上的 开盘价卖出
                    if zt_p<open_p<df_close*0.96:    
                        order_target(i, 0)
                    ###    高开5个点以上,非一字板的卖出
                    if df_close/df_open>0.95 and open_p>df_close*1.05 and open_p<zt_p:
                        order_target(i, 0)
                    ###   买入当天被套5个点以上的,成本超过成本13个点割肉
                 
                    if df_close/df_open<0.95 and open_p<0.87*context.portfolio.positions[i].avg_cost:   
                        order_target(i, 0)
                    ###   止盈
                    if i[:2] == '60' or i[:2]=='00' and open_p/context.portfolio.positions[i].avg_cost>1.15:
                        order_target(i, 0)
                    if i[:2] == '30' or i[:2]=='68' and open_p/context.portfolio.positions[i].avg_cost>1.30:
                        order_target(i, 0)                    
            if context.portfolio.available_cash>=100000:
                if i not in context.portfolio.positions.keys():
                    if  i[:2] =='60' or i[:2]=='00':
                        if dt_p*1.05<open_p<zt_p and df_high/df_low< 1.2 and df_close/df_before_close>1.099 and 1.01<df_close/df_high<1.05:
                            order_target_value(i, 200000)     ###   每只股票买20万
                    if i[:2] == '30' or i[:2] == '68':
                        if dt_p*1.15<open_p<zt_p and df_high/df_low< 1.4 and df_close/df_before_close>1.199 and 1.02<df_close/df_high<1.1:
                            order_target_value(i, 200000)     ###   每只股票买10万
                            
    except Exception as e: # 未捕获到异常,程序直接报错
        print (e)                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值