1. 程式人生 > >量化交易入門筆記-多股票追漲策略

量化交易入門筆記-多股票追漲策略

'''
股票在當日收盤30分鐘內漲幅達到9.5%~9.9%時間段,進行買入操作,在第二天開盤賣出
需要注意的是,該策略需要按分鐘進行回測
'''

import jqdata

def initialize(context):
    """初始化函式"""
    # 開啟動態復權模式
    set_option('use_real_price', True)
    # 每天買入股票數量
    g.daily_buy_count = 5
    # 設定要操作的股票池,這裡選擇計算機資訊科技相關板塊
    g.stocks = get_industry_stocks(
'I64') + get_industry_stocks('I65') # 去年重複的程式碼 g.stocks = set(g.stocks) # 每天早上開盤時執行 run_daily(morning_sell_all, 'open') def morning_sell_all(context): """每天早上開盤時執行函式""" for security in context.portfolio.positions: # 全部賣出 order_target(security, 0) # 記錄這次賣出
log.info('賣出股票 %s' % (security)) def before_trading_start(context): """開始交易前被呼叫函式""" # 今天已經買入的股票 g.today_bought_stocks = set() # 得到所有股票昨日收盤價,每天只需要取一次,所以放在before_trading_start中 g.last_df = history(1, '1d', 'close', g.stocks) def handle_data(context,
data): """單位時間呼叫的函式,在每分鐘的第一秒執行,data是上一分鐘的切片資料""" # 判斷是否在當日最後的2小時,這裡只追漲最後2小時滿足條件的股票 if context.current_dt.hour < 15 and context.current_dt.minute < 30: return # 每天只買這麼多隻 if len(g.today_bought_stocks) >= g.daily_buy_count: return # 只遍歷今天還沒有買入的股票 for security in (g.stocks - g.today_bought_stocks): # 得當當前價格 price = data[security].close # 獲取這隻股票昨天收盤價 last_close = g.last_df[security][0] # 如果上一時間點價格已經漲了9.5%~9.9% # 今天的漲停價格區間大於1元,今天沒有買入該只股票 if price/last_close > 1.095 \ and price/last_close < 1.099 \ and data[security].high_limit - last_close >= 1.0: # 得到當前資金餘額 cash = context.portfolio.cash # 計算今天還需要買入的股票數量 need_count = g.daily_buy_count - len(g.today_bought_stocks) # 把現金分成幾價 buy_cash = cash/need_count # 買入這麼多現金的股票 order_value(security, buy_cash) # 放入今天已買股票的集合 g.today_bought_stocks.add(security) # 記錄這次買入 log.info('買入股票 %s' % (security)) # 買夠5只之後就不再買入 if len(g.today_bought_stocks) >= g.daily_buy_count: break

回測結果:

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