データ分析 - シングルファクター銘柄選択戦略、マルチファクター銘柄選択戦略

 シングルファクター銘柄選択戦略 - スモールキャップ戦略

第二に、マルチファクター銘柄選択戦略 - 市場価値+ 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)
市值+ROE选股策略

 

 

おすすめ

転載: www.cnblogs.com/staff/p/10956443.html