日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

策略系列篇(一)—小市值轮动

發(fā)布時間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 策略系列篇(一)—小市值轮动 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

寫于2022年一月,臨近春節(jié),祝大家新年快樂!寫這篇文章的時候,剛經(jīng)歷了1.25號4000+只股票下跌,雖然入市不久,倉位也僅控制在3層,但是仍然缺乏安全感。于是提筆把入市半年的諸多策略以及成長記錄下來。

首先,投資就是一場戰(zhàn)爭。所有人入市的初心都是為了賺錢,但是市場是一個不可預(yù)知的混沌模型,小到幾百塊的資金,大到國家資本,無數(shù)個資金相互交織組成一個金融戰(zhàn)場。既然是戰(zhàn)場就會有廝殺,就會有勝負(fù),有的人凱旋而歸,有的人戰(zhàn)死沙場。盡管金融市場不是真正的打仗,不會直接性的造成死亡,但是本質(zhì)亦不遠(yuǎn)矣。試想有的人辛辛苦苦積攢下來的積蓄,跑不過通貨膨脹,購買力甚至還在下降,只能維持溫飽而已;試想有的城市通過政策補(bǔ)貼吸引人才,完成轉(zhuǎn)型升級,然后實(shí)現(xiàn)飛躍發(fā)展;試想有的國家肆意的開放金融市場,經(jīng)濟(jì)的飛速發(fā)展到盛極而衰。小到個體,大到城市,甚至是國家,投資皆是一場戰(zhàn)爭。

其次,投資需要好策略和好心態(tài)。兵者,國之大事,死生之地,存亡之道,不可不察也戰(zhàn)爭,是國家的大事,它關(guān)系到軍民的生死,國家的存亡,不能不慎重考察研究。

投資需要好策略。舉個例子,就像是戰(zhàn)場時期,1000士兵對上10倍于己的平民肯定是屠殺。為什么呢?顯而易見,士兵之于平民,勝在訓(xùn)練組織能力,進(jìn)退有度,指揮統(tǒng)一,反之,平民雖然人數(shù)眾多,但是雜亂無序,只能四散而逃,之所以士兵能有較高水平的訓(xùn)練組織能力,依賴于平時的針對訓(xùn)練,我認(rèn)為對士兵所做的訓(xùn)練,在投資中類似于根據(jù)歷史數(shù)據(jù)來進(jìn)行訓(xùn)練學(xué)習(xí),找出特征因子,最終形成一個好的交易策略,應(yīng)用于市場中。

投資需要好心態(tài)。舉個例子,剛訓(xùn)練好的新兵第一次上戰(zhàn)場的傷亡概率最高,而老兵損傷往往要小得多。顯而易見,不能適應(yīng)戰(zhàn)場的新兵都已經(jīng)陣亡了,活下來的老兵或多或少都有領(lǐng)悟。盡管新兵老兵在平時訓(xùn)練時是一樣的,但是戰(zhàn)場上為什么會有如此巨大的差別呢?我認(rèn)為取決于是否有好的心態(tài),市場瞬息萬變,沒有人能肯定未來會發(fā)生什么,每逢大事當(dāng)有靜氣。在做足準(zhǔn)備的情況下,需要堅(jiān)定不移的相信自己的判斷,同時要具有底線思維。

最后,好策略和好心態(tài)是相輔相成的。如果沒有好的交易策略,長期無邏輯的交易,是不可能有好心態(tài)的;如果有好的交易策略,沒有良好的心態(tài),也難以執(zhí)行。

好的策略需要自身不斷地迭代更新,需要不斷的學(xué)習(xí)知識,提升認(rèn)知;而好的心態(tài)需要市場不斷地錘煉打磨,需要進(jìn)行體會總結(jié)。

一個完整的交易策略一般包括如下幾點(diǎn)構(gòu)成:

????????1.買什么? 選股

????????2.買賣多少?倉位控制

????????3.何時買賣?入場時機(jī)

????????4.止損條件。何時退出虧損的倉位

????????5.止贏條件。何時退出盈利的倉位

廢話完畢,正文開始!

---------------分割線---------------

1. 原理說明

小市值效應(yīng),本質(zhì)上說就是市值小的股票,在將來上漲的概率越大。在全球各大市場上都有驗(yàn)證,在A股市場也存在此效應(yīng)。

至于為什么有小市值效應(yīng)?筆者推測有如下3點(diǎn):

1.可能是投資者普遍不愿意持有小公司股票,使得這些小公司價格普遍偏低,甚至低于成本價,因此會有較高的預(yù)期收益率;

2.A股市場存在上市公司的殼價值,可能被溢價收購,導(dǎo)致小市值公司股票大幅度增值;

3.小市值公司成長空間更大,方便炒作;

2. 策略邏輯

第一步:確定調(diào)倉頻率,每天更新調(diào)倉
第二步:確定股票池股票數(shù)量,這里假設(shè)有5支
第三步:調(diào)倉日當(dāng)天獲取前一天的歷史數(shù)據(jù),并按照市值由小到大排序
第四步:買入前5支股票

回測期:2011-12-30?到 2021-12-31
股票池:中小板股票
回測初始資金:10萬

3. 回測結(jié)果和穩(wěn)健性分析

回測時間為近10年,收益高達(dá)442倍,最大回測僅32%。

設(shè)定初始資金10萬,手續(xù)費(fèi)率為0.03%,滑點(diǎn)比率為0.1%。回測結(jié)果如下圖所示:

筆者自身券商的費(fèi)率是萬1的,開戶早還能免5,萬3的手續(xù)費(fèi)長期來看其實(shí)吃了不少收益。

4. 策略代碼

# 導(dǎo)入函數(shù)庫 from jqdata import *# 初始化函數(shù),設(shè)定基準(zhǔn)等等 def initialize(context):# 設(shè)定滬深300作為基準(zhǔn)set_benchmark('000300.XSHG')# 開啟動態(tài)復(fù)權(quán)模式(真實(shí)價格)set_option('use_real_price', True)#防止未來函數(shù)set_option("avoid_future_data", True)#滑點(diǎn)設(shè)置為0.001set_slippage(FixedSlippage(0.001))# 輸出內(nèi)容到日志 log.info()log.info('初始函數(shù)開始運(yùn)行且全局只運(yùn)行一次')# 過濾掉order系列API產(chǎn)生的比error級別低的loglog.set_level('order', 'error')# 股票池g.security_universe_index = "399101.XSHE" # 中小板g.buy_stock_count = 5### 股票相關(guān)設(shè)定 #### 股票類每筆交易時的手續(xù)費(fèi)是:買入時傭金萬分之三,賣出時傭金萬分之三加千分之一印花稅, 每筆交易傭金最低扣5塊錢set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5),type='stock')## 運(yùn)行函數(shù)(reference_security為運(yùn)行時間的參考標(biāo)的;傳入的標(biāo)的只做種類區(qū)分,因此傳入'000300.XSHG'或'510300.XSHG'是一樣的)# 定時運(yùn)行run_daily(my_trade, time='9:30', reference_security='000300.XSHG')# 收盤后運(yùn)行run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')## 開盤時運(yùn)行函數(shù) def my_trade(context):# 選取中小板中市值最小的若干只check_out_lists = get_index_stocks(g.security_universe_index)q = query(valuation.code).filter(valuation.code.in_(check_out_lists)).order_by(valuation.circulating_market_cap.asc()).limit(g.buy_stock_count * 3)check_out_lists = list(get_fundamentals(q).code)# 過濾: 三停(停牌、漲停、跌停)及st,*st,退市check_out_lists = filter_st_stock(check_out_lists)check_out_lists = filter_limitup_stock(context, check_out_lists)check_out_lists = filter_limitdown_stock(context, check_out_lists)check_out_lists = filter_paused_stock(check_out_lists)# 取需要的只數(shù)check_out_lists = check_out_lists[:g.buy_stock_count]# 買賣adjust_position(context, check_out_lists)## 收盤后運(yùn)行函數(shù) def after_market_close(context):log.info(str('函數(shù)運(yùn)行時間(after_market_close):' + str(context.current_dt.time())))# 得到當(dāng)天所有成交記錄trades = get_trades()for _trade in trades.values():log.info('成交記錄:' + str(_trade))log.info('一天結(jié)束')log.info('##############################################################')# 自定義下單 # 根據(jù)Joinquant文檔,當(dāng)前報單函數(shù)都是阻塞執(zhí)行,報單函數(shù)(如order_target_value)返回即表示報單完成 # 報單成功返回報單(不代表一定會成交),否則返回None def order_target_value_(security, value):if value == 0:log.debug("Selling out %s" % (security))else:log.debug("Order %s to value %f" % (security, value))# 如果股票停牌,創(chuàng)建報單會失敗,order_target_value 返回None# 如果股票漲跌停,創(chuàng)建報單會成功,order_target_value 返回Order,但是報單會取消# 部成部撤的報單,聚寬狀態(tài)是已撤,此時成交量>0,可通過成交量判斷是否有成交return order_target_value(security, value)# 開倉,買入指定價值的證券 # 報單成功并成交(包括全部成交或部分成交,此時成交量大于0),返回True # 報單失敗或者報單成功但被取消(此時成交量等于0),返回False def open_position(security, value):order = order_target_value_(security, value)if order != None and order.filled > 0:return Truereturn False# 平倉,賣出指定持倉 # 平倉成功并全部成交,返回True # 報單失敗或者報單成功但被取消(此時成交量等于0),或者報單非全部成交,返回False def close_position(position):security = position.securityorder = order_target_value_(security, 0) # 可能會因停牌失敗if order != None:if order.status == OrderStatus.held and order.filled == order.amount:return Truereturn False# 交易 def adjust_position(context, buy_stocks):for stock in context.portfolio.positions:if stock not in buy_stocks:log.info("stock [%s] in position is not buyable" % (stock))position = context.portfolio.positions[stock]close_position(position)else:log.info("stock [%s] is already in position" % (stock))# 根據(jù)股票數(shù)量分倉# 此處只根據(jù)可用金額平均分配購買,不能保證每個倉位平均分配position_count = len(context.portfolio.positions)if g.buy_stock_count > position_count:value = context.portfolio.cash / (g.buy_stock_count - position_count)for stock in buy_stocks:if context.portfolio.positions[stock].total_amount == 0:if open_position(stock, value):if len(context.portfolio.positions) == g.buy_stock_count:break# 過濾停牌股票 def filter_paused_stock(stock_list):current_data = get_current_data()return [stock for stock in stock_list if not current_data[stock].paused]# 過濾ST及其他具有退市標(biāo)簽的股票 def filter_st_stock(stock_list):current_data = get_current_data()return [stock for stock in stock_listif not current_data[stock].is_stand 'ST' not in current_data[stock].nameand '*' not in current_data[stock].nameand '退' not in current_data[stock].name]# 過濾漲停的股票 def filter_limitup_stock(context, stock_list):last_prices = history(1, unit='1m', field='close', security_list=stock_list)current_data = get_current_data()# 已存在于持倉的股票即使?jié)q停也不過濾,避免此股票再次可買,但因被過濾而導(dǎo)致選擇別的股票return [stock for stock in stock_list if stock in context.portfolio.positions.keys()or last_prices[stock][-1] < current_data[stock].high_limit]# return [stock for stock in stock_list if stock in context.portfolio.positions.keys() # or last_prices[stock][-1] < current_data[stock].high_limit * 0.995]# 過濾跌停的股票 def filter_limitdown_stock(context, stock_list):last_prices = history(1, unit='1m', field='close', security_list=stock_list)current_data = get_current_data()return [stock for stock in stock_list if stock in context.portfolio.positions.keys()or last_prices[stock][-1] > current_data[stock].low_limit]

5. 策略思考以及改進(jìn)

策略優(yōu)勢:收益高,持續(xù)有效;

策略不足:高波動性,收益曲線不平滑;

眾所周知,高波動極其考驗(yàn)投資者的執(zhí)行力,往往大家都會高估自己的承受能力。

6. 后續(xù)其他

策略源碼如上,喜歡的朋友可以自己運(yùn)行一下程序。

后續(xù)有時間我也會陸續(xù)更新其他策略,持續(xù)學(xué)習(xí),持續(xù)分享。

注:此策略只用于學(xué)習(xí)、交流、演示,不構(gòu)成任何投資建議。

作者公眾號:小z定投錄,可以關(guān)注一下,后面將不定期出新策略。

?

總結(jié)

以上是生活随笔為你收集整理的策略系列篇(一)—小市值轮动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。