还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
大盘股筛选策略(版)一种基于量化因子的投资策略,该策略主要通过换手率、成交量Python和基本面因子来选择股票,并且每日根据预测得分更换一只股票策略倾向于选择大盘股,并排除科创板股票,以期实现较为稳定的投资收益策略思想通过综合考量多个因子来筛选出符合预期表现的股票具体来说,策略选取了换手率、成交量和基本面因子,这些因子分别反映了市场的活跃度、交易的活跃程度以及公司的基本面情况通过每日更新预测得分并调整持仓,策略能够灵活应对市场变化,优化组合表现策略背景因子投资起源于对金融市场中一些因子的深刻理解,并利用这些因子实现更科学和理性的投资决策换手率、成交量和公司的基本面数据都是反映市场活跃度和公司质地的重要指标通过综合考虑这些因素的影响,策略能够筛选出符合预期表现的股票策略风格-**投资风格**:偏向大盘股由于大盘股波动相对较小,策略主要聚焦于市值较大的股票,以期实现较为稳定的投资收益-**定性因子分析**:根据股票的换手率、成交量和基本面情况选择股票,这些因子通常与价值型投资相契合,能够反映出一家公司的基本价值和市场热度-**风格特点**:稳定性较强由于偏向选择大盘股,这类股票通常波动相对较小,风险较低策略风险-**市场风险**:虽然大盘股波动小,但在全市场重大波动时仍可能受较大影响可能出现较大的净值回撤,风险较高时可能达到10-20%-**个股风险**:策略通过换手率、成交量、基本面等因子选股,但每个因子能反映的信息有限,个股黑天鹅事件仍无法完全规避由于持仓股票有限(只),个股重大事件可能导致持5仓显著跌幅,影响整体收益-**操作风险**:每日更换股票操作频繁,可能因操作失误或交易不顺等导致损失操作风险一般难以量化,但应视市场情况做好流动性管理和操作风控策略优势mode=表达式”,expr=,positionn,exprfilters=,H,,exprtables=userformydreamd36b72e8n,extrafields=date,instrumenf,orderby=date,instrument,exprdropna=True,expraddsql=False,使用获取数据,构建因子等,如下是一个例子作为参考-语sql=--DAI SQLDAI SQL法https://bigquant.com/wiki/doc/dai-PLSbc1SbZX#h-sql%E5%85%A5%E9%97%A8%E6%9使用数据输入里的字段5%99%E7%A8%8B-1/2/3e.g.inputl.close,inputl.EXCLUDEdate,instrumentSELECTmlagclose,90/close ASreturn90,mlagclose,30/close ASreturn30,-下划线开始命名的列是中间变量,不会在最终结果输出eg rankreturn90cpctrank-return90AS rankreturn90,cpctrankreturn30AS rankreturn30,crankvolume ASrankvolume,close/mlagclose,1as returnO,-日期和股票代码date,instrument FROMcnstockprefactors WHEREststatus=0QUALIFYCOLUMNS IS NOT NULLAND rankreturn
900.1ANDrankreturn
300.1ORDER BYdate,instrumentextractdata=False,mcached=False,mname=nm4n功能获取初始数据,进行因子构建和数据预处理参数:表达式模式mode因子计算表达式expr::表来源exprtables:额外字段extrafields:排序字段orderby:执行语句sql SQL数据提取模块m7=M.extractdatadai.v17sql=m
4.data,startdate=H2022-05-26H,startdateboundtotradingdate=True enddate=2024-06-03H,5enddateboundtotradingdate=True,beforestartdays=90,debug=False,mname=m7H功能根据已构建的数据提取训练数据m4参数:需要执行的语句sql SQL:开始日期startdate:结束日期enddate:提前天数beforestartdays:是否输出调试信息debug主策略模块m3=M.bigtrader.v19data=m
7.data,startdate=二enddate=HH,initialize=m3initializebigquantrun,beforetradingstart=m3beforetradingstartbigquantrun,handletick=m3handletickbigquantrun,handledata=m3handledatabigquantrun,handletrade=m3handletradebigquantrun,handleorder=m3handleorderbigquantrun,aftertrading=m3aftertradingbigquantrun,capitalbase=1000000,frequency=Hdaily,,,,月殳票交易日”,producttype=rebalanceperiodtype=rebalanceperioddays=r,标准模式”,rebalanceperiodrollforward=True,backtestenginemode=beforestartdays=0,volumelimit=1,orderpricefieldbuy=openn,orderpricefieldsell=close,benchmark=沪深指数*300plotcharts=True,debug=False,backtestonly=False,mname=m3H功能该模块作为策略的核心模块,执行各流程参数:使用的训练数据data:初始化函数initialize:开盘前回调函数beforetradingstart数据回调函数handletick:tick:每日数据回调函数handledata:成交回报回调函数handletrade:委托回报回调函数handleorder:盘后回调函数aftertrading:初始资金capitalbase交易频率frequency::产品类型producttype:再平衡周期类型rebalanceperiodtype-**多因子稳定选股**:基于换手率、成交量和基本面综合考量,更全面剖析个股,确保优质股票进入组合,提升每只股票的上涨概率-**适应市场变化**:每日更新预测得分并调整持仓,灵活应对市场变化,优化组合表现-**分散风险**:尽管持仓数量有限只,但通过每日更新得分更换个股,可分散个股层面5风险,在一定程度上降低单只股票带来的影响交易逻辑思路策略的核心交易逻辑是通过每日更新预测得分来调整持仓具体步骤如下**数据获取和因子构建**:从数据源获取初始数据,并通过语句构建因子
1.SQL**每日数据处理**根据每日的市场数据,计算并更新预测得分
2.**股票选择和调整**根据预测得分,选择符合条件的股票进行买入或卖出操作每日更换
3.一只股票,确保持仓的动态调整**风险控制**:通过排除科创板股票和偏向选择大盘股,策略在一定程度上控制了市场风险
4.和个股风险该策略具有以下显著特点**多因子综合考量**:通过换手率、成交量和基本面等多个因子的综合考量,确保选股的全
1.面性和准确性**动态调整持仓**:每日根据预测得分调整持仓,灵活应对市场变化,优化组合表现
2.**风险控制严格**通过排除科创板股票和偏向选择大盘股,策略在一定程度上控制了市场
3.风险和个股风险,确保投资的稳定性**操作频繁但有序**:每日更换一只股票的操作虽然频繁,但通过严格的逻辑和流程控制,确
4.保交易的有序性和有效性总体而言,该策略通过多因子综合考量和动态调整持仓,力求在控制风险的前提下实现较为稳定的投资收益策略代码示例import mathfrom bigtrader.finance.commission importPerOrder#初始化函数def m3_initialize_bigquant_runcontext:from bigtrader.finance.commission importPerOrdercontext.set_commissionPerOrderbuy_cost=
0.0003,sell_cost=
0.0013,min_cost=5context.stock count=5context.stock_weights=1/context.stock_countcontext.change_num=1context.my_data=context.data.sort_values[daten,position]#开盘前处理函数def m3_before_trading_start_bigquant_runcontext,data:pass#数据处理函数tickdef m3_handle_tick_bigquant_runcontext,tick:pass#每日数据处理函数def m3_handle_data_bigquant_runcontext,data:today=data.current_dt.strftime%Y-%m-%dnranker_prediction=context.my_data[context.my_data.date==today]stock_now={e:p fore,p incontext.portfolio.positions.items ifp.amount0}stock_now_num=lenstock_nowtry:buyjist=ranker_prediction.instrument.unique[:context.stock_count+1]except:buyjist=[]sell_num=0if lenstock_now0:need_sell=[x forx instock_now ifx not inlistranker_prediction.instrument.unique]for instrumentin need_sell:rv=context.order_targetinstrument,0if rv!=0:不在预测集卖出失败print r{instrument}{context.get_error_msgrv}continuesell_num+=1instruments=listreversedlistranker_prediction.instrument[ranker_prediction.instrument.applylambda x:xin stock_now]for instrumentin instruments:if sell_numcontext.change_num:rv=context.order_targetinstrument,0if rv!=0:卖出失败printf{instrument}{context.get_error_msgrv}continuesell_num+=1if lenbuyjist0and stock_now_numcontext.stock_count:buyjnstruments=[i fori inbuyjistif inot instock_now]cash_now=context.portfolio.cash/context.stock_count-stock_now_num cash_for_buy=mincontext.portfolio.portfolio_value*context.stock_weights,cash_nowfor instrumentin buyjnstruments:if stock_now_numcontext.stock_count:rv=context.order_valueinstrument,cash_for_buyif rv!=0:买入失败printf{instrument}{context.get_error_msgrv}continuestock_now_num=stock_now_num+1#成交回报处理函数def m3_handle_trade_bigquant_runcontext,trade:pass#委托回报处理函数def m3_handle_order_bigquant_runcontext,order:pass#盘后处理函数def m3_after_trading_bigquant_runcontext,data:pass#数据输入模块m4=M.input_features_dai.v27mode=表达式”,expr=HpositionH,expr_filters=HH,,expr_tables=user_formydream_d36b72e8”extra_fields=date,instrument,order_by=date,instrument,expr_drop_na=True,expr_add_sql=False,使用获取数据,构建因子等,如下是一个例子作为参考-语sql=--DAI SQLDAI SQL法https://bigquant.com/wiki/doc/dai-PLSbc1SbZX#h-sql%E5%85%A5%E9%97%A8%E6%9使用数据输入里的字段5%99%E7%A8%8B-1/2/3e.g.inputj.close,input_
1.*EXCLUDEdate,instrumentSELECTm_lagclose,90/close ASreturn_90,m_lagclose,30/close ASreturn_30,-下划线开始命名的列是中间变量,不会在最终结果输出e.g._rank_return_90c_pct_ra nk-ret ur n_90AS_rank_return_90,c_pct_rankreturn_30AS_rank_return_30,c_rankvolume ASrank_volume,close/m_lagclose,1as return_O,-日期和股票代码date,instrument FROMcn_stock_prefactorsWHEREst_status=0QUALIFYCOLUMNS*ISNOTNULLAND_rank_return_
900.1AND_rank_return_
300.1ORDER BYdate,instrument HHHextract_data=False,m_cached=False,m_name=Hm4H#数据提取模块m7=M.extract_data_dai.v17sql=m
4.data,start_date=H2022-05-26H,start_date_bound_to_trading_date=True,,end_date=2024-06-03”二end_date_bound_to_trading_date True,before_start_days=90,debug=False,m_name=,,m7n#主策略模块m3=M.bigtrader.v19data=m
7.data,start_date=H,,end_date=,H,initialize=m3_initialize_bigquant_run,Jbefore_trading_start=m3_before_trading_start_bigquant_run,handle_tick=m3_handle_tick_bigquant_run,handle_data=m3_handle_data_bigquant_run,handle_trade=m3_handle_kade_bigquant_run,handle_order=m3_handle_order_bigquant_run,after_trading=m3_after_trading_bigquant_run,capital_base=1000000,frequency=,dailyH,股票”,product_type=,二咬易日rebalance_period_type”,rebalance_period_days=1rebalance_period_roll_forward=True,标准模式”,backtest_engine_mode=before_start_days=0,volume_limit=1,order_price_field_buy=,openM,,order_price_field_sell=close”二”沪深指数*benchmark300plot_charts=True,debug=False,backtest_only=False,m_name=m3H代码注解主要分为多个模块,每个模块都有其特定的功能和参数以下是各个模块的详细解释模块:1初始化函数def m3initializebigquantruncontext:frombigtrader.finance.commission importPerOrdercontext.setcommissionPerOrderbuycost=
0.0003,sellcost=
0.0013,mincost=5context.stockcount=5context.stockweights=1/context.stockcountcontext.changenum=1context.mydata=context.data.sort_values[date,position]功能设置交易手续费、持有股票数量、每只股票权重、每天更换的股票数量,并对数据进行排序参数:买入手续费buycost:卖出手续费sellcost:最低手续费mincost持有股票数量stockcount::每只股票权重stockweights:每天更换的股票数量changenum模块开盘前处理函数2def m3beforetradingstartbigquantruncontext,data:pass功能开盘前的处理操作,当前无具体实现模块数据处理函数3:tickdef m3handletickbigquantruncontext,tick:pass功能实时数据的处理操作,当前无具体实现tick模块:每日数据处理函数4def m3handledatabigquantruncontext,data:today=data.currentdt.strftime,,%Y-%m-%drankerprediction=context.mydata[context.mydata.date==today]stocknow={e:p fore,p incontext.portfolio.positions.items ifp.amount0}stocknownum=lenstocknowtry:buylist=rankerprediction.instrument.unique[:context.stockcount+1]except:buylist=[]sellnum=0if lenstocknow0:needsell=[x forx instocknow ifx notin listrankerprediction.instrument.unique]for instrumentin needsell:rv=context.ordertargetinstrument,0if rv!=0:不在预测集卖出失败printf{instrument{context.geterrormsgrv}continuesellnum+=1instruments=listreversedlistrankerprediction.instrument[rankerprediction.instrument.applylambda x:x instocknow]for instrumentin instruments:if sellnumcontext.changenum:rv=context.ordertargetinstrument,0if rv!=O:print r{instrument}卖出失败{context.geterrormsgrv}n continuesellnum+=1if lenbuylist0and stocknownumcontext.stockcount:buyinstruments=[i fori inbuylistif inotinstocknow]cashnow=context.portfolio.cash/context.stockcount-stocknownum cashforbuy=mincontext.portfolio.portfoliovalue*context.stockweights,cashnowfor instrumentin buyinstruments:if stocknownumcontext.stockcount:rv=context.ordervalueinstrument,cashforbuyif rv!=0:printf{instrument}买入失败{context.geterrormsgrv}n continuestocknownum+=1功能每日数据处理,按预设逻辑买入卖出股票参数:每天的市场数据data模块成交回报处理函数5def m3handletradebigquantruncontext,trade:pass功能处理交易回报,当前无具体实现模块:委托回报处理函数6def m3handleorderbigquantruncontext,order:pass功能处理委托变动,当前无具体实现模块7:盘后处理函数def m3aftertradingbigquantruncontext,data:pass功能盘后的数据处理,当前无具体实现数据输入模块m4=M.inputfeaturesdai.v27。
个人认证
优秀文档
获得点赞 0