1. 程式人生 > >量化交易入門筆記-KD指標策略

量化交易入門筆記-KD指標策略

'''
超買超賣型技術指標,即隨機指標KD
實現K在20左右向上交叉D時,則全倉買入
K在80左右向下交叉D時,全倉賣出
'''

import jqdata
from jqlib.technical_analysis import *

def initialize(context):
    """初始化函式"""
    # 設定基準
    set_benchmark('000300.XSHG')
    # 開啟動態復權
    set_option('use_real_price', True)
    # 股票類每筆交易時的手續費是:
    # 買入時佣金萬分之三
    # 賣出時佣金萬分之三加千分之一的印稅
# 每筆交易最低扣5元錢 set_order_cost(OrderCost( open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, close_today_commission=0, min_commission=5 ), type='stock') # 開盤前執行 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.security = '000001.XSHE' def market_open(context): """開盤時執行函式""" # 輸出執行時間 log.info('market_open執行時間:'+str(context.current_dt.time())) security = g.security # 呼叫KD函式,獲取該函式的K值和D值 K1, D1 = KD(security, check_date=context.current_dt, N=9, M1=3, M2=3) # 取得當前的現金 cash = context.portfolio.available_cash # 如果K在20左右向上交叉D時,則全倉買入 if K1 >= 20 and K1 > D1: # 記錄這次買入 log.info('買入股票 %s' % (security)) # 用所有cash買入股票 order_value(security, cash) # 如果K在80左右向下交叉D,並且目前有頭寸,則全倉賣出 elif K1 < 80 and K1 < D1 and context.portfolio.positions[security].closeable_amount > 0: # 記錄這次賣出 log.info('賣出股票 %s' % (security)) # 賣出所有股票,使這隻股票的最終持有量為0 order_target(security, 0) def after_market_close(context): """收盤後執行函式""" # 輸出執行時間 log.info('after_market_close執行時間:'+str(context.current_dt.time())) # 得到當天的所有成效記錄 trades = get_trades() for _trade in trades.values(): log.info('成交記錄:'+str(_trade)) log.info('一天的交易結束,祝你心情愉快')

回測結果:

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