策略學習筆記_單因子策略_小市值策略

單因子策略

策略說明:

  • 基準:以滬深300成分股作爲基準
  • 建倉標準:選取滬深300成分股中市值最小的N只股票買入
  • 賣出標準:持倉股票不在市值最小的N只股票列表中時賣出持倉股票
  • 買入標準:屬於市值最小的N只股票且未持倉的股票則買入
  • 調整週期:每月第一個工作日調整
  • 回測時間範圍:2012-01-01~2016-10-01

代碼:

# 導入函數庫
from jqdata import *

# 初始化函數,設定基準等等
def initialize(context):
    # 設定滬深300作爲基準
    set_benchmark('000300.XSHG')
    # 開啓動態復權模式(真實價格)
    set_option('use_real_price', True)
    # 輸出內容到日誌 log.info()
    log.info('初始函數開始運行且全局只運行一次')
    # 過濾掉order系列API產生的比error級別低的log
    # log.set_level('order', 'error')

    ### 股票相關設定 ###
    # 股票類每筆交易時的手續費是:買入時佣金萬分之三,賣出時佣金萬分之三加千分之一印花稅, 每筆交易佣金最低扣5塊錢
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')

    # 用戶定義
    # get_index_stocks 獲取成分股
    g.security = get_index_stocks('000300.XSHG')
    # 滬深300市值數據查詢語句
    g.q = query(valuation).filter(valuation.code.in_(g.security))
    # 篩選市值最小的N只股票
    g.N = 10

    run_monthly(handle, 1)

# 買入市值最小的N只股票
def handle(context):
    df = get_fundamentals(g.q)
    df = df.sort_values('market_cap')
    df = df[:g.N]
    tohold = df['code'].values

    for stock in context.portfolio.positions:
        if stock not in tohold:
            # 賣出
            order_target(stock, 0)

    tobuy = [stock for stock in tohold if stock not in context.portfolio.positions]

    cash = context.portfolio.available_cash
    n = len(tobuy)
    # 買入
    for stock in tobuy:
        order_value(stock, int(cash/n))

回測結果
策略學習筆記_單因子策略_小市值策略

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章