Type/to search
8
Follow
1376
Followers
Stratégie de trading quantitative - Indicateur KDJ
Quantpedia
Created 2017-01-16 15:00:09  Updated 2019-08-01 09:22:39
 0
 4353

Stratégie de trading quantitative - Indicateur KDJ

L'indicateur KDJ, le plus utilisé dans les marchés à terme et les marchés boursiers, est un outil d'analyse technique appelé Stochastics, créé par le Dr George Lane. Il combine la notion de dynamique et certains des avantages des indicateurs de force et de faiblesse. L'indicateur KDJ est calculé comme une donnée de base en utilisant le rapport proportionnel entre les prix les plus élevés, les plus bas, les prix et les prix de clôture sur une période donnée.

  • Méthode de calcul: Calculez d'abord la valeur RSV du cycle, puis la valeur K, la valeur D et la valeur J. Prenons l'exemple de la KDJ du cycle de 9 jours:

    RSVt=(Ct-L9)/(H9-L9)*100 (Ct = prix de clôture du jour; L9 = prix le plus bas en 9 jours; H9 = prix le plus élevé en 9 jours)

    K est la valeur de la moyenne mobile lisse de 3 jours de RSV, avec la formule: Kt = RSVt/3+2*t-1/3

    Une moyenne mobile à 3 jours dont la valeur de D est la valeur de K, avec la formule: Dt = Kt/3+2*Dt-1/3

    La valeur de J est 3 fois la valeur de K moins 2 fois la valeur de D, avec la formule: Jt = 3Dt-2Kt

    Voici quelques aspects importants à prendre en compte lors de l'application du KDJ:

    1. La valorisation de K et de D est de 0 à 100 et plus de 80 sont des transactions de surachat et moins de 20 sont des transactions de surachat.

    2. Signaux d'achat: valeur de K dans une tendance à la hausse < valeur de D, lorsque la ligne de K a franchi la ligne de D vers le haut; Signaux de vente: valeur de K dans une tendance à la baisse > valeur de D, lorsque la ligne de K a franchi la ligne de D vers le bas.

    3. L'indicateur KD ne s'applique pas aux actions peu actives et peu émises, alors que la précision est élevée pour les grands marchés et les grands marchés populaires.

    4. En KD, en position haute ou basse, un écart par rapport à la direction du cours est un signal d'action.

    5. La valeur de J > 100 est une survente et < 0 est une survente, toutes deux étant des zones anormales de prix.

    6. Signaux d'alerte de courte durée: la vitesse de montée ou de descente des valeurs K et D diminue, la pente tend à s'apaiser

    En règle générale, les trois valeurs K, D et J se situent entre 20 et 80, ce qui est intéressant de voir, en termes de sensibilité, la valeur J est la plus forte, suivie de K, et la plus lente est D, et en termes de sécurité, c'est tout le contraire.

  • Code de stratégie (Code de quantification non inventé par l'inventeur)

import numpy as np import pandas as pd from pandas import DataFrame import talib as ta start = '2006-01-01' # 回测起始时间 end = '2015-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

Il y a des gens qui ne sont pas d'accord avec moi.

Related Recommendations
Comment
All comments (0)
No data
No data
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)