1. 程式人生 > >量化交易入門筆記-小市值股票策略

量化交易入門筆記-小市值股票策略

'''
篩選出市值介於20億~30億的股票
選取其中市值最小的三隻股票
然後每天開盤買入,持有5個交易日,然後調倉
'''

import jqdata

def initialize(context):
    """初始化函式"""
    # 設定參考基準
    set_benchmark('000300.XSHG')
    # 使用真實價格
    set_option('use_real_price', True)
    # 設定成效比例 
    set_option('order_volume_ratio', 1)
    # 股票類每筆交易時的手續費是:買入時佣金萬分之三,賣出時佣金萬分之三加千分之一印花稅, 每筆交易佣金最低扣5塊錢
set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock') # 持倉數量 g.stocknum = 3 # 交易計時器 g.days = 0 # 調倉頻率 g.refresh_rate = 5 # 執行函式 run_daily(trade, 'every_bar') def check_stocks(context): """股票篩選"""
# 設定條件 q = query( valuation.code, valuation.market_cap ).filter( valuation.market_cap.between(20, 30) ).order_by( valuation.market_cap.asc() ) # 選出低市值的股票,構成buy_list df = get_fundamentals(q) buy_list =
list(df['code']) # 過濾掉停牌 buy_list = filter_paused_stock(buy_list) return buy_list[:g.stocknum] def filter_paused_stock(stock_list): """過濾掉停牌""" current_data = get_current_data() return [stock for stock in stock_list if not current_data[stock].paused] def trade(context): """交易函式""" if g.days % g.refresh_rate == 0: # 獲取持倉列表 sell_list = list(context.portfolio.positions.keys()) # 如果有持倉,則賣出 if len(sell_list) > 0: for stock in sell_list: order_target(stock, 0) # 分配資金 if len(context.portfolio.positions) < g.stocknum: Num = g.stocknum - len(context.portfolio.positions) Cash = context.portfolio.cash/Num else: Cash = 0 # 選股 stock_list = check_stocks(context) # 買入股票 for stock in stock_list: if len(context.portfolio.positions.keys()) < g.stocknum: order_value(stock, Cash) # 天計數加1 g.days = 1 else: g.days += 1

回測結果:

注:本文章為個人學習筆記,參考了一些書籍與官方教程,不作任何商業用途!