900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 券商接口量化交易策略——KDJ指标

券商接口量化交易策略——KDJ指标

时间:2020-04-22 22:18:59

相关推荐

券商接口量化交易策略——KDJ指标

期货和股票市场上最常用的技术分析工具——KDJ指标,全名随机指标(Stochastics),由乔治·莱恩博士(George Lane)所创。融合了动量观念、强弱指标一些优点的KDJ指标,通过特定周期内出现过的最高价、最低价、收盘价三者之间的比例关系为基本数据进行计算,将得出的K值、D值与J值连接成曲线图,就形成了反映价格波动趋势的KDJ指标。

计算方法:首先要计算周期的RSV值,然后再计算K值、D值、J值。

以9日周期的KDJ为例:

RSVt=(Ct-L9)/(H9-L9)*100 (Ct=当日收盘价;L9=9天内最低价;H9=9天内最高价)

K值为RSV值3日平滑移动平均线,公式为:Kt=RSVt/3+2*t-1/3

D值为K值的3日平滑移动平均线,公式为:Dt=Kt/3+2*Dt-1/3

J值为三倍K值减两倍D值,公式为:Jt=3*Dt-2*Kt

KDJ指标在应用时需要考虑的几大方面:

1.K与D的取值,范围是0-100,80以上行情呈现超买现象,20以下呈现超卖现象。

2.买进信号:K值在上涨趋势中﹤D值,K线向上突破D线时;

卖出信号:K值在下跌趋势中﹥D值,K线向下跌破D线。

3.交易不活跃、发行量小的股票并不适用KD指标,而对大盘和热门大盘的准确性却很高。

4.在KD处在高位或低位,如果出现与股价走向的背离,则是采取行动的信号。

5.J的取值﹥100为超买,﹤0为超卖,都属于价格的非正常区域。

6.短期转势预警信号:K值和D值上升或者下跌的速度减弱,倾斜度趋于平缓

通常K、D、J三值在20-80之间为徘徊区,宜观望.

就敏感度而言,最强的是J值,其次是K,最慢的则是D了,而从安全性来讲,就刚刚相反。

KDJ策略

import numpy as np

import pandas as pd

from pandas import DataFrame

import talib as ta

start = ‘-01-01’ # 回测起始时间

end = ‘-08-17’ # 回测结束时间

benchmark = ‘HS300’ # 策略参考标准

universe = set_universe(‘HS300’)

capital_base = 100000 # 起始资金

refresh_rate = 1 # 调仓频率,即每 refresh_rate 个交易日执行一次 handle_data() 函数

longest_history=20

MA=[5,10,20,30,60,120] #移动均线参数

def initialize(account):

account.kdj=[]

def handle_data(account):

# 每个交易日的买入卖出指令

sell_pool=[]

hist = account.get_history(longest_history)

#data=DataFrame(hist[‘600006.XSHG’])

stock_pool,all_data=Get_all_indicators(hist)

pool_num=len(stock_pool)

if account.secpos==None:

print ‘null’

for i in stock_pool:

buy_num=int(float(account.cash/pool_num)/account.referencePrice[i]/100.0)*100

order(i, buy_num)

else:

for x in account.valid_secpos:

if all_data[x].iloc[-1][‘closePrice’]<all_data[x].iloc[-1][‘ma1’] and (all_data[x].iloc[-1][‘ma1’]-all_data[x].iloc[-1][‘closePrice’])/all_data[x].iloc[-1][‘ma1’]>0.05 :

sell_pool.append(x)

order_to(x, 0)

if account.cash>500 and pool_num>0:

try:

sim_buy_money=float(account.cash)/pool_num

for l in stock_pool:

#print sim_buy_money,account.referencePrice[l]

buy_num=int(sim_buy_money/account.referencePrice[l]/100.0)*100

#buy_num=10000

order(l, buy_num)

except Exception as e:

#print e

pass

def Get_kd_ma(data):

indicators={}

#计算kd指标

indicators[‘k’],indicators[‘d’]=ta.STOCH(np.array(data[‘highPrice’]),np.array(data[‘lowPrice’]),np.array(data[‘closePrice’]),\

fastk_period=9,slowk_period=3,slowk_matype=0,slowd_period=3,slowd_matype=0)

indicators[‘ma1’]=pd.rolling_mean(data[‘closePrice’], MA[0])

indicators[‘ma2’]=pd.rolling_mean(data[‘closePrice’], MA[1])

indicators[‘ma3’]=pd.rolling_mean(data[‘closePrice’], MA[2])

indicators[‘ma4’]=pd.rolling_mean(data[‘closePrice’], MA[3])

indicators[‘ma5’]=pd.rolling_mean(data[‘closePrice’], MA[4])

indicators[‘closePrice’]=data[‘closePrice’]

indicators=pd.DataFrame(indicators)

return indicators

def Get_all_indicators(hist):

stock_pool=[]

all_data={}

for i in hist:

try:

indicators=Get_kd_ma(hist[i])

all_data[i]=indicators

except Exception as e:

#print ‘error:%s’%e

pass

if indicators.iloc[-2][‘k’]<indicators.iloc[-2][‘d’] and indicators.iloc[-1][‘k’]>indicators.iloc[-2][‘d’]:

stock_pool.append(i)

elif indicators.iloc[-1][‘k’]>=10 and indicators.iloc[-1][‘d’]<=20 and indicators.iloc[-1][‘k’]>indicators.iloc[-2][‘k’] and indicators.iloc[-2][‘k’]<indicators.iloc[-3][‘k’]:

stock_pool.append(i)

return stock_pool,all_data

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。