版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
选股策略(python版)本策略旨在通过特定的选股逻辑和交易规则,在中证500成分股中筛选出具有投资潜力的股票,并进行相应的买入和卖出操作。策略的核心在于结合多个技术指标对股票进行综合评估,以实现稳健的投资回报。策略特点1.**基于中证500成分股**:策略以中证500成分股为基础股票池,这些股票通常具有较好的市场代表性和流动性。2.**多因子综合评估**:策略综合考虑了多个技术指标,如ATR(平均真实波幅)和ADTM(动态买卖气指标),通过赋予不同因子权重,计算出每只股票的总体评分。3.**定期调仓**:策略设定为每20天进行一次调仓,以确保持仓股票始终符合选股标准。4.**资金等权分配**:对于选定的买入备选股票,策略采用等权分配资金的方式,以降低单一股票的风险。5.**考虑交易成本**:策略在计算盈利时,充分考虑了交易手续费等成本因素。策略流程1.**初始化阶段**:-获取中证500成分股,并设定为基础股票池。-初始化策略运行天数、持仓情况、资金权重、买入点、可用资金、策略盈利等变量。2.**周期循环阶段**:-在每个交易日的bar数据更新时,执行以下操作:a.获取过去1日的开盘价数据。b.当策略运行天数大于60天且到达20天的调仓周期时,执行以下步骤:-获取待买入和卖出的股票池。-对于待买入的股票,计算其在ATR和ADTM指标上的排名,并根据设定的权重计算总体评分。-根据总体评分排序,选取评分最低的10只股票作为买入备选。-卖出持仓中待卖出的股票,并计算相应的盈利和可用资金。-为买入备选股票等权分配资金,并执行买入操作。3.**初步筛选股票池阶段**:-获取基础股票池的历史数据,包括22天的日最高价、2天的日最高价和62天的日收盘价。-根据设定的条件,筛选出待买入和待卖出的股票。策略优化与改进方向1.**因子优化**:可以尝试引入更多技术指标或调整现有因子的权重,以提高策略的选股能力。2.**风险管理**:可以引入更复杂的风险管理机制,如止损策略、仓位控制等,以降低策略的回撤风险。3.**机器学习应用**:可以考虑利用机器学习算法对历史数据进行训练,以挖掘更多潜在的投资机会。本策略通过结合多个技术指标和定期调仓机制,在中证500成分股中寻找具有投资潜力的股票。策略代码:#!/usr/bin/python#coding:gbkimportpandasaspdimportnumpyasnpimporttimeimportdatetime#1.==初始化部分==definit(ContextInfo):#获取中证500成分股ContextInfo.s=ContextInfo.get_sector('000905.SH')#设定基础股票池为中证500成分股ContextInfo.set_universe(ContextInfo.s)#策略运行天数ContextInfo.day=0#持仓情况ContextInfo.holdings={i:0foriinContextInfo.s}#资金权重ContextInfo.weight=[0.1]*10#设置资金分配权重#买入点ContextInfo.buypoint={}#可用资金ContextInfo.money=ContextInfo.capital#策略盈利ContextIfit=0#设置交易账户ContextInfo.accountID='testS'#2.==周期循环部分==defhandlebar(ContextInfo):rank1={}rank2={}rank_total={}tmp_stock={}#当前bar线索引号d=ContextInfo.barpos#获取过去1日的开盘价数据price=ContextInfo.get_history_data(1,'1d','open',3)#策略运行天数大于60天且到达20天的调仓周期ifd>60andd%20==0:#当前bar线日期nowDate=timetag_to_datetime(ContextInfo.get_bar_timetag(d),'%Y%m%d')#获取待买入、卖出股票池buys,sells=signal(ContextInfo)#获取待买入forkinbuys.keys():ifbuys[k]==1:#获取待买入个股在所有品种中的atr排名rank1[k]=ext_data_rank('atr',k[-2:]+k[0:6],0,ContextInfo)#获取待买入个股在所有品种中的adtm排名rank2[k]=ext_data_rank('adtm',k[-2:]+k[0:6],0,ContextInfo)#人为设置因子的权重,此处取了0.5和-0.5rank_total[k]=0.5*rank1[k]-0.5*rank2[k]#对rank_total按照值value进行排序,并返回一个列表,列表里面的元素是形如(code,value)的元组tmp=sorted(rank_total.items(),key=lambdaitem:item[1])#如果买入备选股票数大于10只,则选取因子排序最小的10只iflen(tmp)>=10:tmp_stock={i[0]foriintmp[:10]}#如果买入备选股票数小于10只,则全选else:tmp_stock={i[0]foriintmp}forkinbuys.keys():ifknotintmp_stock:buys[k]=0iftmp_stock:print('买入备选股票列表:',tmp_stock)forkinContextInfo.s:#卖出持仓中待卖出的股票ifContextInfo.holdings[k]>0andsells[k]==1:print('readytosell')#将持仓中待卖出股票以昨日收盘价清仓order_shares(k,-ContextInfo.holdings[k]*100,'fix',price[k][-1],ContextInfo,ContextInfo.accountID)#计算账户可用资金(手续费按万三设定)ContextInfo.money+=price[k][-1]*ContextInfo.holdings[k]*100-0.0003*ContextInfo.holdings[k]*100*price[k][-1]#计算账户盈利ContextIfit+=(price[k][-1]-ContextInfo.buypoint[k])*ContextInfo.holdings[k]*100-0.0003*ContextInfo.holdings[k]*100*price[k][-1]ContextInfo.holdings[k]=0#为待买入股票等权分配资金ContextInfo.money_distribution={k:i*ContextInfo.moneyfor(k,i)inzip(tmp_stock,ContextInfo.weight)}forkintmp_stock:#买入持仓中没有的买入备选股票列表ifContextInfo.holdings[k]==0andbuys[k]==1:print('readytobuy')#备选股票买入手数order[k]=int(ContextInfo.money_distribution[k]/(price[k][-1]))/100#以昨日收盘价买入备选股票order_shares(k,order[k]*100,'fix',price[k][-1],ContextInfo,ContextInfo.accountID)#记录买点ContextInfo.buypoint[k]=price[k][-1]#计算可用资金ContextInfo.money-=price[k][-1]*order[k]*100-0.0003*order[k]*100*price[k][-1]#记录盈利ContextIfit-=0.0003*order[k]*100*price[k][-1]#记录持仓中备选股票对应手数ContextInfo.holdings[k]=order[k]print(ContextInfo.money,ContextIfit,ContextInfo.capital)#3.==初步删选股票池==defsignal(ContextInfo):buy={i:0foriinContextInfo.s}sell={i:0foriinContextInfo.s}#获取基础股票池历史22天的日最高价data_high=ContextInfo.get_history_data(22,'1d','high',3)#获取基础股票池历史2天的日最高价data_high_pre=ContextInfo.get_history_data(2,'1d','high',3)#获取基础股票池历史62天的日收盘价data_close60=ContextInfo.get_history_data(62,'1d','close',3)forkinContextInfo.s:ifdata_close60.has_key(k):#过去62天未出现停牌,数据齐全iflen(data_high_pre[k])==2andlen(data_high[k])==22andlen(data_close60[k])==62:#超过20日最高价,加入买入备选ifdata_high_pre[k][-2]>max(data_high[k][:-2]):buy[k]=1#低于60日均线,加入卖出备选elifdata_high_pre[k][-2]<np.mean(data_close60[k][:-2]):sell[k]=1returnbuy,sell策略代码注解:#!/usr/bin/python#coding:gbkimportpandasaspdimportnumpyasnpimporttimeimportdatetime#1.==初始化部分==definit(ContextInfo):#获取中证500成分股ContextInfo.s=ContextInfo.get_sector('000905.SH')#设定基础股票池为中证500成分股ContextInfo.set_universe(ContextInfo.s)#策略运行天数ContextInfo.day=0#持仓情况ContextInfo.holdings={i:0foriinContextInfo.s}#资金权重ContextInfo.weight=[0.1]*10#设置资金分配权重#买入点ContextInfo.buypoint={}#可用资金ContextInfo.money=ContextInfo.capital#策略盈利ContextIfit=0#设置交易账户ContextInfo.accountID='testS'#2.==周期循环部分==defhandlebar(ContextInfo):rank1={}rank2={}rank_total={}tmp_stock={}#当前bar线索引号d=ContextInfo.barpos#获取过去1日的开盘价数据price=ContextInfo.get_history_data(1,'1d','open',3)#策略运行天数大于60天且到达20天的调仓周期ifd>60andd%20==0:#当前bar线日期nowDate=timetag_to_datetime(ContextInfo.get_bar_timetag(d),'%Y%m%d')#获取待买入、卖出股票池buys,sells=signal(ContextInfo)#获取待买入forkinbuys.keys():ifbuys[k]==1:#获取待买入个股在所有品种中的atr排名rank1[k]=ext_data_rank('atr',k[-2:]+k[0:6],0,ContextInfo)#获取待买入个股在所有品种中的adtm排名rank2[k]=ext_data_rank('adtm',k[-2:]+k[0:6],0,ContextInfo)#人为设置因子的权重,此处取了0.5和-0.5rank_total[k]=0.5*rank1[k]-0.5*rank2[k]#对rank_total按照值value进行排序,并返回一个列表,列表里面的元素是形如(code,value)的元组tmp=sorted(rank_total.items(),key=lambdaitem:item[1])#如果买入备选股票数大于10只,则选取因子排序最小的10只iflen(tmp)>=10:tmp_stock={i[0]foriintmp[:10]}#如果买入备选股票数小于10只,则全选else:tmp_stock={i[0]foriintmp}forkinbuys.keys():ifknotintmp_stock:buys[k]=0iftmp_stock:print('买入备选股票列表:',tmp_stock)forkinContextInfo.s:#卖出持仓中待卖出的股票ifContextInfo.holdings[k]>0andsells[k]==1:print('readytosell')#将持仓中待卖出股票以昨日收盘价清仓order_shares(k,-ContextInfo.holdings[k]*100,'fix',price[k][-1],ContextInfo,ContextInfo.accountID)#计算账户可用资金(手续费按万三设定)ContextInfo.money+=price[k][-1]*ContextInfo.holdings[k]*100-0.0003*ContextInfo.holdings[k]*100*price[k][-1]#计算账户盈利ContextIfit+=(price[k][-1]-ContextInfo.buypoint[k])*ContextInfo.holdings[k]*100-0.0003*ContextInfo.holdings[k]*100*price[k][-1]ContextInfo.holdings[k]=0#为待买入股票等权分配资金ContextInfo.money_distribution={k:i*ContextInfo.moneyfor(k,i)inzip(tmp_stock,ContextInfo.weight)}forkintmp_stock:#买入持仓中没有的买入备选股票列表ifContextInfo.holdings[k]==0andbuys[k]==1:print('readytobuy')#备选股票买入手数order[k]=int(ContextInfo.money_distribution[k]/(price[k][-1]))/100#以昨日收盘价买入备选股票order_shares(k,order[k]*100,'fix',price[k][-1],ContextInfo,ContextInfo.accountID)#记录买点ContextInfo.buypoint[k]=price[k][-1]#计算可用资金ContextInfo.money-=price[k][-1]*order[k]*100-0.0003*order[k]*100*price[k][-1]#记录盈利ContextIfit-=0.0003*order[k]*100*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业材料购销合同案例3篇
- 文物运输公司招投标3篇
- 数据交换与信息交换服务3篇
- 安全骑行责任如山3篇
- 拦水坝建设合同范本3篇
- 摩托车买卖协议书3篇
- 撤销委托书有哪些影响3篇
- 教育软件销售业务员合同3篇
- 教育培训劳动合同教学与课程开发
- 工程安全责任书范本3篇
- 《试验设计》课件
- 110kV架空改电缆工程停电施工方案
- DBJ52T 105-2021 装配式混凝土结构套筒灌浆饱满度检测技术规程
- 《广东省小家电出口贸易影响因素分析及提升对策(论文)10000字》
- 屋面防水修缮施工方案
- 室内质控月总结报告表
- 青岛农业大学影视艺术概论期末复习题导学资料
- 生产安全事故应急资源调查报告(参考模板)
- 生物信息学在微生物研究领域中的应用
- 分布式光伏发电项目并网验收意见单
- 看听学一册单词大全
评论
0/150
提交评论