主動量化選股策略(Python版)_第1頁
主動量化選股策略(Python版)_第2頁
主動量化選股策略(Python版)_第3頁
主動量化選股策略(Python版)_第4頁
主動量化選股策略(Python版)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

主動量化選股策略(Python版)該策略基于交易活躍度、長短期回報比、排名變化以及波動性變化,訓練StockRanker模型,并選擇排名前十的股票進行日頻調(diào)倉。策略介紹交易活躍度:通常是指個股的成交量、成交金額等指標,可以反映市場投資者對該股票的關(guān)注度和交易意愿。長短期回報比:衡量股票一段時間內(nèi)的收益表現(xiàn),可作為股票未來走勢的預期指標。排名變化:基于各類指標對股票進行排名,并觀察排名的變化情況,這可以幫助我們捕捉到市場情緒的轉(zhuǎn)變和個股的表現(xiàn)差異。波動性變化:波動性常用于衡量股票價格變動的劇烈程度,可以在一定程度上反映市場的風險情況。策略背景股票市場中不同行情、不同時間段股票的表現(xiàn)不盡相同?;诓煌蜃拥牧炕呗钥梢詭椭顿Y者在不同的市場環(huán)境中尋找表現(xiàn)較好的股票,并通過定期調(diào)倉來優(yōu)化持倉組合,從而提高投資收益并控制風險。運用MachineLearning技術(shù)如StockRanker,可以更加精準地評估和篩選股票。該策略應屬于主動量化選股策略,通過多因子模型結(jié)合機器學習技術(shù),根據(jù)股票的短期表現(xiàn)進行頻繁調(diào)倉。持倉市值大?。簝A向選取活躍度高的股票(市值可能偏大,但也有小市值股票活躍度高)。凈利潤增速:可能會選取盈利情況較好的股票,但重點在于短期表現(xiàn),凈利潤增速不是決定性因素。市盈率、市凈率水平:不作為主要因子。ROA或ROE表現(xiàn):這些財務指標可能會作為模型的次要考量指標,但主要依賴短期波動性和交易情況。策略風險由于本策略頻繁調(diào)倉,高度依賴市場短期表現(xiàn),一旦市場整體波動較大或發(fā)生黑天鵝事件,策略表現(xiàn)可能會受到顯著影響。由于持倉集中在排名前十的股票,個別股票的負面事件(如業(yè)績爆雷、重大訴訟等)可能會對策略的表現(xiàn)產(chǎn)生較大影響。頻繁調(diào)倉可能導致較高的交易成本(手續(xù)費及滑點),對收益有一定的侵蝕作用。機器學習模型的有效性依賴于訓練數(shù)據(jù),如果歷史數(shù)據(jù)不能很好地反映未來市場變化,模型的表現(xiàn)可能會不如預期。策略優(yōu)勢選股精度高:通過多因子分析并結(jié)合機器學習模型,可以更精準地評估和篩選表現(xiàn)較好的股票。靈活應對市場變化:由于策略采用日頻調(diào)倉,可以更及時地應對市場的波動與變化,優(yōu)化持倉組合。數(shù)據(jù)驅(qū)動決策:通過交易活躍度、回報比、排名變化及波動性變化,依據(jù)實時數(shù)據(jù)驅(qū)動決策,減少主觀判斷的偏差。策略代碼示例:importpandasaspdfrombigmoduleimportM#<aistudiograph>#@param(id="m4",name="initialize")#交易引擎:初始化函數(shù),只執(zhí)行一次defm4_initialize_bigquant_run(context):importmathfrommissionimportPerOrderimportnumpyasnp#系統(tǒng)已經(jīng)設(shè)置了默認的交易手續(xù)費和滑點,要修改手續(xù)費可使用如下函數(shù)context.set_commission(PerOrder(buy_cost=0.0003,sell_cost=0.0013,min_cost=5))#設(shè)置買入的股票數(shù)量,這里買入預測股票列表排名靠前的5只stock_count=5#每只的股票的權(quán)重,如下的權(quán)重分配會使得靠前的股票分配多一點的資金,[0.339160,0.213986,0.169580,..]context.stock_weights=np.array([1/np.log(i+2)foriinrange(stock_count)])context.stock_weights=context.stock_weights/np.sum(context.stock_weights)#設(shè)置每只股票占用的最大資金比例context.max_cash_per_instrument=0.2context.options['hold_days']=5#@param(id="m4",name="before_trading_start")#交易引擎:每個單位時間開盤前調(diào)用一次。defm4_before_trading_start_bigquant_run(context,data):#盤前處理,訂閱行情等pass#@param(id="m4",name="handle_tick")#交易引擎:tick數(shù)據(jù)處理函數(shù),每個tick執(zhí)行一次defm4_handle_tick_bigquant_run(context,tick):pass#@param(id="m4",name="handle_data")defm4_handle_data_bigquant_run(context,data):#按日期過濾得到今日的預測數(shù)據(jù)ranker_prediction=context.data[context.data.date==data.current_dt.strftime('%Y-%m-%d')]#按照position排序ranker_prediction.sort_values(["date","position"],inplace=True)ranker_prediction.reset_index(drop=True,inplace=True)#1.資金分配#平均持倉時間是hold_days,每日都將買入股票,每日預期使用1/hold_days的資金#實際操作中,會存在一定的買入誤差,所以在前hold_days天,等量使用資金;之后,盡量使用剩余資金(這里設(shè)置最多用等量的1.5倍)is_staging=context.trading_day_index<context.options['hold_days']#是否在建倉期間(前hold_days天)cash_avg=context.portfolio.portfolio_value/context.options['hold_days']cash_for_buy=min(context.portfolio.cash,(1ifis_stagingelse1.5)*cash_avg)cash_for_sell=cash_avg-(context.portfolio.cash-cash_for_buy)positions={e:p.amount*p.last_sale_pricefore,pincontext.portfolio.positions.items()}#2.生成賣出訂單:hold_days天之后才開始賣出;對持倉的股票,按機器學習算法預測的排序末位淘汰ifnotis_stagingandcash_for_sell>0:equities={e:efore,pincontext.portfolio.positions.items()}instruments=list(reversed(list(ranker_prediction.instrument[ranker_prediction.instrument.apply(lambdax:xinequities)])))forinstrumentininstruments:context.order_target(instrument,0)cash_for_sell-=positions[instrument]ifcash_for_sell<=0:break#3.生成買入訂單:按機器學習算法預測的排序,買入前面的stock_count只股票buy_cash_weights=context.stock_weightsbuy_instruments=list(ranker_prediction.instrument[:len(buy_cash_weights)])max_cash_per_instrument=context.portfolio.portfolio_value*context.max_cash_per_instrumentfori,instrumentinenumerate(buy_instruments):cash=cash_for_buy*buy_cash_weights[i]ifcash>max_cash_per_instrument-positions.get(instrument,0):#確保股票持倉量不會超過每次股票最大的占用資金量cash=max_cash_per_instrument-positions.get(instrument,0)ifcash>0:context.order_value(instrument,cash)#@param(id="m4",name="handle_trade")#交易引擎:成交回報處理函數(shù),每個成交發(fā)生時執(zhí)行一次defm4_handle_trade_bigquant_run(context,trade):pass#@param(id="m4",name="handle_order")#交易引擎:委托回報處理函數(shù),每個委托變化時執(zhí)行一次defm4_handle_order_bigquant_run(context,order):pass#@param(id="m4",name="after_trading")#交易引擎:盤后處理函數(shù),每日盤后執(zhí)行一次defm4_after_trading_bigquant_run(context,data):pass#@module(position="-386,-139",comment='通過SQL調(diào)用數(shù)據(jù)、因子和表達式等構(gòu)建策略邏輯',comment_collapsed=False)m1=M.input_features_dai.v6(sql="""SELECT*FROMdata_753797bef8b911eebefa86aa0837f492ORDERBYdate,position""")#@module(position="-341,-3",comment='抽取數(shù)據(jù),設(shè)置數(shù)據(jù)開始時間和結(jié)束時間,并綁定模擬交易',comment_collapsed=False)m2=M.extract_data_dai.v7(sql=m1.data,start_date='2022-08-01',start_date_bound_to_trading_date=True,end_date='2024-04-10',end_date_bound_to_trading_date=True,before_start_days=90,debug=False)#@module(position="-254,139",comment='交易,日線,設(shè)置初始化函數(shù)和K線處理函數(shù),以及初始資金、基準等',comment_collapsed=False)m4=M.bigtrader.v14(data=m2.data,start_date='',end_date='',initialize=m4_initialize_bigquant_run,before_trading_start=m4_before_trading_start_bigquant_run,handle_tick=m4_handle_tick_bigquant_run,handle_data=m4_handle_data_bigquant_run,handle_trade=m4_handle_trade_bigquant_run,handle_order=m4_handle_order_bigquant_run,after_trading=m4_after_trading_bigquant_run,capital_base=1000000,frequency='da

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論