繁簡切換您正在訪問的是FX168財經網,本網站所提供的內容及信息均遵守中華人民共和國香港特別行政區當地法律法規。

FX168财经网>人物频道>帖子

简单市值轮动策略-学习

作者/螺罗丝 2019-05-10 06:04 0 来源: FX168财经网人物频道


根据个人习惯,对代码进行了调整😁

策略说明¶

每隔10个交易日,等金额持有市值排名最小的前5只股票,卖出其他股票

回测和源代码如下:


def initialize(context):g.stocksnum = 5 # 持有最小市值股票数g.period = 10 # 轮动频率run_daily(daily,time='every_bar')# 周期循环dailyg.days = 1 # 记录策略进行到第几天,初始为1def daily(context):# 判断策略进行天数是否能被轮动频率整除余1if g.days % g.period == 1:# 获取当前时间date=context.current_dt.strftime("%Y-%m-%d")# 获取上证指数和深证综指的成分股代码并连接,即为全A股市场所有股票scu = get_index_stocks('000001.XSHG')+get_index_stocks('399106.XSHE')# 选出在scu内的股票的股票代码,并按照当前时间市值从小到大排序df = get_fundamentals(query(valuation.code,valuation.market_cap).filter(valuation.code.in_(scu)).order_by(valuation.market_cap.asc()), date=date)# 取出前g.stocksnum名的股票代码,并转成list类型,buylist为选中的股票buylist =list(df['code'][:g.stocksnum])# 对于每个当下持有的股票进行判断:现在是否已经不在buylist里,如果是则卖出for stock in context.portfolio.positions:if stock not in buylist: #如果stock不在buylistorder_target(stock, 0) #调整stock的持仓为0,即卖出# 将资金分成g.stocksnum份position_per_stk = context.portfolio.cash/g.stocksnum# 用position_per_stk大小的g.stocksnum份资金去买buylist中的股票for stock in buylist:order_value(stock, position_per_stk)else:pass # 什么也不做g.days = g.days + 1 # 策略经过天数增加1

经过思考🤔,我认为这个策略可以改进

  • 如果买入列表中的股票有停牌的,不仅无法买入,还会影响资金利用率,所以我讲买入列表中的停牌股票剔除掉

  • 资金分配不是按照固定持股数进行等额分配,而是根据经过筛选实际可以买入的数量来分配

  • 如果已经持仓的股票,不会被二次买入

  • 由于经过筛选后,可买入的股票将会变少,在概率上来讲是这样,所以我讲持股数量提升为10

改进代码如下,包括回测结果


def initialize(context):"""初始化函数"""# 持有最小市值股票数g.stocksnum = 10 # 轮动频率g.period = 10# 记录策略进行到第几天g.days = 0 # 周期循环dailyrun_daily(daily,time='every_bar')def daily(context):"""交易函数"""# 每运行一天加一g.days += 1# 判断策略进行天数是否能被轮动频率整除余1if g.days % g.period != 1:return# 获取当前时间date=context.current_dt.strftime("%Y-%m-%d")# 获取上证指数和深证综指的成分股代码并连接,即为全A股市场所有股票# 这里股票池不放在全局中是因为总有新发型股票出现,所以要动态获取股票池scu = get_index_stocks('000001.XSHG') + get_index_stocks('399106.XSHE')# 选出在scu内的股票的股票代码,并按照当前时间市值从小到大排序df = get_fundamentals(query(valuation.code,valuation.market_cap).filter(valuation.code.in_(scu)).order_by(valuation.market_cap.asc()), date=date)# 取出前g.stocksnum名的股票代码,并转成list类型,buylist为选中的股票buylist =list(df['code'][:g.stocksnum])# 对于每个当下持有的股票进行判断:现在是否已经不在buylist里,如果是则卖出if stock not in buylist: #如果stock不在buylistorder_target(stock, 0) #调整stock的持仓为0,即卖出# 已经持仓的不会再被买入buy_list = list(set(buylist) - set(context.portfolio.positions.keys()))# 当日停牌的股票不交易current_data = get_current_data()buy_list = [stock for stock in buylist if not current_data[stock].paused]# 如果没有需要买进的股票,就返回if len(buy_list) <= 0:return# 动态分配资金position_per_stk = context.portfolio.cash/len(buy_list)# 动态买入股票for stock in buy_list:order_value(stock, position_per_stk)

经过调整,回测效果提升将近90个百分点。

如果还有改进想法的看官,可以提出建议。另外,小市值策略在近期其实效果很差,与市场整体有关。另外,小市值经常有停牌退市的风险,很有可能在持有阶段停牌,所以风险很高

分享到:
举报财经168客户端下载

全部回复

0/140

投稿 您想发表你的观点和看法?

更多人气分析师

  • 张亦巧

    人气2208文章4145粉丝45

    暂无个人简介信息

  • 张迎妤

    人气1904文章3305粉丝34

    个人专注于行情技术分析,消息面解读剖析,给予您第一时间方向...

  • 指导老师

    人气1864文章4423粉丝52

    暂无个人简介信息

  • 李冉晴

    人气2320文章3821粉丝34

    李冉晴,专业现贷实盘分析师。

  • 梁孟梵

    人气2184文章3177粉丝39

    qq:2294906466 了解群指导添加微信mfmacd

  • 王启蒙现货黄金

    人气320文章3491粉丝8

    本人做分析师以来,并专注于贵金属投资市场,尤其是在现货黄金...

  • 金泰铬J

    人气2328文章3925粉丝51

    投资问答解咨询金泰铬V/信tgtg67即可获取每日的实时资讯、行情...

  • 金算盘

    人气2696文章7761粉丝125

    高级分析师,混过名校,厮杀于股市和期货、证券市场多年,专注...

  • 金帝财神

    人气4760文章8329粉丝119

    本文由资深分析师金帝财神微信:934295330,指导黄金,白银,...

FX168财经

FX168财经学院

FX168财经

FX168北美