量化交易入門筆記-多股票追漲策略
阿新 • • 發佈:2018-10-31
'''
股票在當日收盤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
回測結果:
注:本文章為個人學習筆記,參考了一些書籍與官方教程,不作任何商業用途!