シングルファクター銘柄選択戦略 - スモールキャップ戦略
第二に、マルチファクター銘柄選択戦略 - 市場価値+ ROE(株主資本利益率)の株式ピッキング戦略
シングルファクター銘柄選択戦略 - スモールキャップ戦略
ファクター銘柄選択戦略
ファクター:一定の基準の株式を選択
成長率、市場価値、利益、ROE(株主資本利益率)............
株式ピッキング戦略:
要因のため、Nポジション株式に最良の性能(最大又は最小因子)を選択
時間のない期間は、変更を売ることができない場合はたまにでは、一度位置を調整します
小型株の戦略:株式ポジションの株式プールの最小時価総額を選択N
例:月チューン倉庫いったん保有株式の20最小時価総額を選択します。
jqdata インポート * DEF 初期化(コンテキスト): set_benchmark(' 000300.XSHG ' ) SET_OPTION(' use_real_price ' 、TRUE) set_order_cost(OrderCost(close_tax。= 0.001、open_commission = 0.0003 = 0.0003 close_commission、min_commission = 5)から、TYPE = ' 在庫' ) g.security = get_index_stocks(' 000300.XSHG ' )#sqlachmyクエリオブジェクトを取っフィールドの評価market_capのテーブルから、要因として市場から選択 GQ = クエリ(評価).filter(valuation.code.in_(G.セキュリティ)) gNを = 20 #20最小株式市場 #の仮定因子ストックピッキングは、30日ごとに行われる #モード1: #g.days = -1 #引数にしてhandle_data(コンテキスト、データ)DEF: #1 g.days 1 = +。 # IF %30 == 0 g.days: # パス #の方法: #機能を実行するタイミング、実行毎月ハンドル関数の最初の取引日 (ハンドル1 run_monthly ) DEF ハンドル(コンテキスト): DF = get_fundamentals(GQ)[ 【' コード'、' market_cap ' ] DF = df.sort_values(' market_cap ').ilocの[:gNを,:] #选出20支 プリント(DF) to_hold = DF [ ' コード' ] .values ための在庫でcontext.portfolio.positions: もし在庫ない で:to_hold order_target(ストック、0) to_buy = [在庫のための在庫に to_hold 場合在庫ない でcontext.portfolio.positions] 場合でlen(to_buy)> 0: cash_per_stock = context.portfolio.available_cash / LEN(to_buy) 以下のための株式でto_buy: ORDER_VALUE(株式、cash_per_stock)
第二に、マルチファクター銘柄選択戦略 - 市場価値+ ROE(株主資本利益率)の株式ピッキング戦略
マルチファクター銘柄選択戦略
どのように同時に複数の要因銘柄選択を統合するには?
スコアリングモデル:
各ストックは、各要因について採点され、スコアが加算されます
Nの合計スコアが最大の保有株式を選出します
在庫要因のスコアを計算する方法:正規化(標準化)を、下の2つの標準的な方法です
例えば、二つの要素を選択します。銘柄選択の評価基準として、市場価値やROE(株主資本利益率)
from jqdata import * def initialize(context): set_benchmark('000300.XSHG') set_option('use_real_price', True) set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock') g.security = get_index_stocks('000300.XSHG') # 选市值作为因子,要从表valuation中market_cap字段获取sqlachmy的query对象 g.q = query(valuation, indicator).filter(valuation.code.in_(g.security)) g.N = 20 #20支股票 run_monthly(handle, 1) def handle(context): df = get_fundamentals(g.q)[['code','market_cap','roe']] df['market_cap'] = (df['market_cap']-df['market_cap'].min())/(df['market_cap'].max()-df['market_cap'].min()) df['roe'] = (df['roe']-df['roe'].min())/(df['roe'].max()-df['roe'].min()) # 双因子评分:市盈率越大越好,市值越小越好 df['score'] = df['roe'] - df['market_cap'] # 对评分排序,选最大的20支股票 df = df.sort_values('score').iloc[-g.N:,:] to_hold = df['code'].values for stock in context.portfolio.positions: if stock not in to_hold: order_target(stock, 0) to_buy = [stock for stock in to_hold if stock not in context.portfolio.positions] if len(to_buy) > 0: cash_per_stock = context.portfolio.available_cash / len(to_buy) for stock in to_buy: order_value(stock, cash_per_stock)