金融量化分析【day113】:聚寬自帶策略

1、策略代碼

# 導入函數庫
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')
    
    ## 運行函數(reference_security爲運行時間的參考標的;傳入的標的只作種類區分,所以傳入'000300.XSHG'或'510300.XSHG'是同樣的)
      # 開盤前運行
    run_daily(before_market_open, time='before_open', reference_security='000300.XSHG') 
      # 開盤時運行
    run_daily(market_open, time='open', reference_security='000300.XSHG')
      # 收盤後運行
    run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')
    
## 開盤前運行函數     
def before_market_open(context):
    # 輸出運行時間
    log.info('函數運行時間(before_market_open):'+str(context.current_dt.time()))

    # 給微信發送消息(添加模擬交易,並綁定微信生效)
    send_message('美好的一天~')

    # 要操做的股票:平安銀行(g.爲全局變量)
    g.security = '000001.XSHE'
    
## 開盤時運行函數
def market_open(context):
    log.info('函數運行時間(market_open):'+str(context.current_dt.time()))
    security = g.security
    # 獲取股票的收盤價
    close_data = attribute_history(security, 5, '1d', ['close'])
    # 取得過去五天的平均價格
    MA5 = close_data['close'].mean()
    # 取得上一時間點價格
    current_price = close_data['close'][-1]
    # 取得當前的現金
    cash = context.portfolio.available_cash

    # 若是上一時間點價格高出五天平均價1%, 則全倉買入
    if current_price > 1.01*MA5:
        # 記錄此次買入
        log.info("價格高於均價 1%%, 買入 %s" % (security))
        # 用全部 cash 買入股票
        order_value(security, cash)
    # 若是上一時間點價格低於五天平均價, 則空倉賣出
    elif current_price < MA5 and context.portfolio.positions[security].closeable_amount > 0:
        # 記錄此次賣出
        log.info("價格低於均價, 賣出 %s" % (security))
        # 賣出全部股票,使這隻股票的最終持有量爲0
        order_target(security, 0)
 
## 收盤後運行函數  
def after_market_close(context):
    log.info(str('函數運行時間(after_market_close):'+str(context.current_dt.time())))
    #獲得當天全部成交記錄
    trades = get_trades()
    for _trade in trades.values():
        log.info('成交記錄:'+str(_trade))
    log.info('一天結束')
    log.info('##############################################################')

2、編譯運行

日誌python

 

3、運行回測 

相關文章
相關標籤/搜索