量化交易入門筆記-KD指標策略
阿新 • • 發佈:2018-10-31
'''
超買超賣型技術指標,即隨機指標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('一天的交易結束,祝你心情愉快')
回測結果:
注:本文章為個人學習筆記,參考了一些書籍與官方教程,不作任何商業用途!