小市值選股策略的核心在於通過綜合分析公司的基本面、行業定位、財務健康狀況以及市場趨勢, 來尋找那些被市場低估但具備顯著成長潛力的股票,同時也要重視風險管理和投資組合的多樣化。 今天來給大家分享下小市值策略代碼如下: # 顯式導入 BigQuant 相關 SDK 模塊 from bigdatasour ...
小市值選股策略的核心在於通過綜合分析公司的基本面、行業定位、財務健康狀況以及市場趨勢,
來尋找那些被市場低估但具備顯著成長潛力的股票,同時也要重視風險管理和投資組合的多樣化。
今天來給大家分享下小市值策略代碼如下:
# 顯式導入 BigQuant 相關 SDK 模塊 from bigdatasource.api import DataSource from bigdata.api.datareader import D from biglearning.api import M from biglearning.api import tools as T from biglearning.module2.common.data import Outputs import pandas as pd import numpy as np import math import warnings import datetime from zipline.finance.commission import PerOrder from zipline.api import get_open_orders from zipline.api import symbol from bigtrader.sdk import * from bigtrader.utils.my_collections import NumPyDeque from bigtrader.constant import OrderType from bigtrader.constant import Direction # <aistudiograph> # @param(id="m6", name="initialize") # 交易引擎:初始化函數,只執行一次 def m6_initialize_bigquant_run(context): #讀取數據 context.ranker_prediction = context.options['data'].read_df() context.ranker_prediction.set_index('date',inplace=True) #print(context.ranker_prediction) # @param(id="m6", name="before_trading_start") # 交易引擎:每個單位時間開盤前調用一次。 def m6_before_trading_start_bigquant_run(context, data): # 盤前處理,訂閱行情等 pass # @param(id="m6", name="handle_tick") # 交易引擎:tick數據處理函數,每個tick執行一次 def m6_handle_tick_bigquant_run(context, tick): pass # @param(id="m6", name="handle_data") # 交易引擎:bar數據處理函數,每個時間單位執行一次 def m6_handle_data_bigquant_run(context, data): #context = 回測引擎 #context內部 會有一些功能~ 是通過 context.xxx 來使用的 #data #調倉期的控制 remainder = context.trading_day_index % 5 #如果沒到調倉期直接結束運行 if remainder !=0: return import datetime #初始化 buy_list = [] #買入列表 sell_list = [] #賣出列表 #==================== 數據準備 today = data.current_dt.strftime('%Y-%m-%d') #讀取當天日期 time = data.current_dt account_pos = context.get_account_positions() holding_list = list({key: value for key, value in account_pos.items() if value.avail_qty > 0}.keys()) holding_num = len(holding_list) #讀取當日數據 try: today_data = context.ranker_prediction.loc[today,:] today_data.reset_index(inplace=True) except: return #策略 today_data=today_data[today_data['上市時間'] >= 365] #上市時間的過濾 today_data=today_data[today_data['市盈率ttm'] >= 0] #財務數據過濾 today_data=today_data[today_data['換手排名'] <= 0.4] today_data.sort_values(by='市值',ascending=True,inplace=True) #市值排序 #構建目標列表 target_list = today_data.instrument.to_list()[:10] #構建賣出列表 for ins in holding_list: if ins not in target_list: sell_list.append(ins) #構建買入列表 for ins in target_list: if ins not in holding_list: buy_list.append(ins) #先賣 for ins in sell_list: context.order_target(ins,0) #等權買 for ins in buy_list: context.order_target_percent(ins,0.025) # @param(id="m6", name="handle_trade") # 交易引擎:成交回報處理函數,每個成交發生時執行一次 def m6_handle_trade_bigquant_run(context, trade): pass # @param(id="m6", name="handle_order") # 交易引擎:委托回報處理函數,每個委托變化時執行一次 def m6_handle_order_bigquant_run(context, order): pass # @param(id="m6", name="after_trading") # 交易引擎:盤後處理函數,每日盤後執行一次 def m6_after_trading_bigquant_run(context, data): pass # @module(position="-85,-19", comment='', comment_collapsed=True) m1 = M.instruments.v2( start_date=T.live_run_param('trading_date', '2023-01-01'), end_date=T.live_run_param('trading_date', '2023-11-20'), market='CN_STOCK_A', instrument_list='', max_count=0 ) # @module(position="450,-27", comment='', comment_collapsed=True) m2 = M.input_features.v1( features=""" #構建一個因數。 open-close的絕對值 市值=market_cap_0 市盈率ttm=pe_ttm_0 上市時間=list_days_0 換手排名=rank_turn_0 凈利潤=fs_net_income_0 每股收益=fs_eps_0 凈利潤=fs_net_income_0""" ) # @module(position="212,97", comment='', comment_collapsed=True) m3 = M.general_feature_extractor.v7( instruments=m1.data, features=m2.data, start_date='', end_date='', before_start_days=90 ) # @module(position="228,205", comment='', comment_collapsed=True) m4 = M.derived_feature_extractor.v3( input_data=m3.data, features=m2.data, date_col='date', instrument_col='instrument', drop_na=True, remove_extra_columns=True, user_functions={} ) # @module(position="189,315", comment='', comment_collapsed=True) m5 = M.chinaa_stock_filter.v1( input_data=m4.data, index_constituent_cond=['全部'], board_cond=['上證主板', '深證主板', '創業板', '科創板'], industry_cond=['全部'], st_cond=['正常'], delist_cond=['非退市'], output_left_data=False ) # @module(position="82,446", comment='', comment_collapsed=True) m6 = M.hftrade.v2( instruments=m1.data, options_data=m5.data, start_date='', end_date='', initialize=m6_initialize_bigquant_run, before_trading_start=m6_before_trading_start_bigquant_run, handle_tick=m6_handle_tick_bigquant_run, handle_data=m6_handle_data_bigquant_run, handle_trade=m6_handle_trade_bigquant_run, handle_order=m6_handle_order_bigquant_run, after_trading=m6_after_trading_bigquant_run, capital_base=1000000, frequency='daily', price_type='真實價格', product_type='股票', before_start_days='0', volume_limit=1, order_price_field_buy='close', order_price_field_sell='open', benchmark='000300.HIX', plot_charts=True, disable_cache=False, replay_bdb=False, show_debug_info=False, backtest_only=False ) # </aistudiograph>
以上是一個簡潔的小市值策略代碼模板,您可以根據需求自行調整參數,以實現更高的收益。 另外,您還可以前往BigQuant量化平臺進行策略回測和效果評估。 小市值選股策略不僅僅是尋找被低估的股票,更是一個綜合考慮公司潛力、財務健康狀況、市場估值和巨集觀經濟因素的過程, 同時需要投資者具備敏銳的市場洞察力、穩健的風險管理能力和長期的投資視角。