【量化投资】策略三(聚宽)
生活随笔
收集整理的這篇文章主要介紹了
【量化投资】策略三(聚宽)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡述
這是關于聚寬上的一個策略的改版。本來這個教程是講小市值策略的。但是我覺得這個數值太難看了。就換成了大市值的來做。其他基本不變。
這次在之前的策略二的基礎上,做出了下面的兩個改變
- 通過滬深300跟其ma20數值來做判斷得到一個比值,來決定買入時使用的錢的比例
- 限制了選股區間(選什么題材的股)
相比于沒有加這兩個的策略來說,提高了年化10%的收益率吧
代碼
from jqlib.technical_analysis import *def initialize(context):g.stocksnum = 5 # 持有最小市值股票數g.period = 10 # 輪動頻率log.set_level('order', 'error')run_daily(daily, time='before_open') # 周期循環dailyrun_daily(mktopen, time='every_bar')g.days = 1 # 記錄策略進行到第幾天,初始為1g.holdpct = 1def trade(context, buylist):# 對于每個當下持有的股票進行判斷:現在是否已經不在buylist里,如果是則賣出for stock in context.portfolio.positions:if stock not in buylist: # 如果stock不在buylistorder_target(stock, 0) # 調整stock的持倉為0,即賣出# 將總資產(現金+股票)除以持股數g.stocksnumposition_per_stk = g.holdpct * context.portfolio.total_value / g.stocksnum# 調整buylist中的每個股票持倉價值為position_per_stkfor stock in buylist:order_target_value(stock, position_per_stk)# 止損 def stop(context):# 循環查看持倉的每個股票for stock in context.portfolio.positions:# 如果股票最新價格除以平均成本小于0.8,即虧損超過20%if context.portfolio.positions[stock].price / context.portfolio.positions[stock].avg_cost < 0.8:# 調整stock的持倉為0,即賣出order_target(stock, 0)# 輸出日志:股票名 止損print "\n%s 止損" % stockdef pick(context):date = context.current_dt.strftime("%Y-%m-%d")# # 獲取上證指數和深證綜指的成分股代碼并連接,即為全A股市場所有股票# scu = get_index_stocks('000001.XSHG') + get_index_stocks('399106.XSHE')scu = get_industry_stocks('HY007') + get_industry_stocks('801180') + get_concept_stocks('GN069')# 選出在scu內的股票的股票代碼,并按照當前時間市值從小到大排序df = get_fundamentals(query(valuation.code, valuation.market_cap).filter(valuation.code.in_(scu)).order_by(valuation.market_cap.desc()), date=date)# 取出前g.stocksnum名的股票代碼,并轉成list類型,buylist為選中的股票buylist = list(df['code'][:g.stocksnum])return buylistdef mktopen(context):# 每分鐘止損stop(context)def mkt_index(context):mktindex = history(count=1, field='close', security_list=['000300.XSHG'])mktindex = mktindex.ix[-1, '000300.XSHG']date =context.current_dt.strftime("%Y-%m-%d")ma20 = MA(['000300.XSHG'], check_date=date, timeperiod=20)ma20 = ma20['000300.XSHG']if mktindex > ma20:return 1return 0.5def daily(context):# 判斷策略進行天數是否能被輪動頻率整除余1if g.days % g.period == 1:buylist = pick(context)g.holdpct = mkt_index(context)trade(context, buylist)else:pass # 什么也不做g.days = g.days + 1 # 策略經過天數增加1效果圖
總結
以上是生活随笔為你收集整理的【量化投资】策略三(聚宽)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python dataframe修改列顺
- 下一篇: 【量化投资】策略四(聚宽)