Type/to search
8
Follow
1376
Followers
Quantitative Handelsstrategie - KDJ-Indikator
Quantpedia
Created 2017-01-16 15:00:09  Updated 2019-08-01 09:22:39
 0
 4353

Quantitative Handelsstrategie - KDJ-Indikator

Die am häufigsten verwendeten technischen Analyse-Tools in den Futures- und Aktienmärkten sind die Stochastics, die von Dr. George Lane entwickelt wurden. Die Stochastics kombinieren die Dynamik der Dynamik mit den Vorteilen der Schwachstellen. Die KDJ-Index wird als Basisdaten berechnet, indem die relativen Beziehungen zwischen den höchsten und niedrigsten Preisen, den Preisen und den Schließpreisen in einer bestimmten Periode berechnet werden.

  • Berechnungsmethode: Zuerst berechnen Sie den RSV-Wert für den Zyklus, dann den K-Wert, den D-Wert und den J-Wert.

    RSVt=(Ct-L9)/(H9-L9)*100 (Ct = Schlusskurs am Tag; L9 = niedrigster Preis in 9 Tagen; H9 = höchster Preis in 9 Tagen)

    K-Wert ist der RSV-Wert des 3-Tage-Gleichlaufdurchschnitts mit der Formel: Kt = RSVt/3+2*t-1/3

    Dt = Kt/3+2 ist ein 3-Tage-Schleifenmittelwert mit K-Wert*Dt-1/3

    J ist 3 mal K minus 2 mal D. Jt = 3Dt-2Kt

    Einige wichtige Aspekte, die bei der Anwendung des KDJ-Wertes zu beachten sind:

    1. Die Bewertung von K und D liegt im Bereich von 0 bis 100, 80 oder mehr sind überkauft, 20 oder weniger sind überverkauft.

    2. Kaufsignal: K-Wert im Aufwärtstrend <D-Wert, wenn die K-Linie die D-Linie nach oben durchbricht; Verkaufssignal: K-Wert im Abwärtstrend >D-Wert, wenn die K-Linie die D-Linie nach unten durchbricht.

    3. Aktien, die nicht aktiv gehandelt werden und nur geringe Umsätze aufweisen, sind nicht für den KD-Index geeignet, während die Genauigkeit für Großbörsen und beliebte Großbörsen hoch ist.

    4. Bei einer Abweichung von der Kursrichtung bei hohen oder niedrigen KDs ist dies ein Signal zum Handeln.

    5. J mit einer Wertschätzung von > 100 als Überkauf und < 0 als Überverkauf, alle in der abnormalen Zone des Preises.

    6. Kurzfristige Trendwarnsignale: K- und D-Werte steigen oder fallen langsamer, die Neigung verlangsamt sich

    Normalerweise sind die drei Werte K, D und J zwischen 20 und 80 und es ist gut zu beobachten, dass der stärkste Wert in Bezug auf die Empfindlichkeit der J ist, der zweite der K, der langsamste der D, und in Bezug auf die Sicherheit ist es genau das Gegenteil.

  • Strategie-Code (nicht vom Erfinder quantifiziert)

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

Veröffentlicht von Programmierte Händler

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