Type/to search
8
Follow
1376
Followers
양적 거래 전략 - KDJ 지표
Quantpedia
Created 2017-01-16 15:00:09  Updated 2019-08-01 09:22:39
 0
 4353

양적 거래 전략 - 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값은 3배 K값 빼기 2배 D값으로, 공식은: Jt=3Dt-2Kt

    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가 되고, 안전성 측면에서 바로 반대이다.

  • 정책 코드 (비 발명자 양적 코드)

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

[프로그래밍 트레이더]

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