Recientemente publiqué un libro, "Versión de enseñanza de video de combate real introductoria de Python basada en análisis de big data de stock", enlace Jingdong: https://item.jd.com/69241653952.html , que proporciona MACD, KDJ y otros indicadores El método de dibujo del gráfico. Aquí calcularemos y dibujaremos la línea del indicador KDJ según el algoritmo KDJ.
1 El proceso de cálculo del indicador KDJ
El indicador KDJ también se llama indicador estocástico, que fue propuesto por primera vez por el Dr. George Lane. Este indicador contiene las fortalezas de los indicadores de fortaleza y debilidad, el concepto de impulso y las ventajas de las medias móviles, que se pueden utilizar para medir el grado de desviación de los precios de las acciones del rango de precios normal.
El proceso de cálculo del indicador KDJ consiste en obtener primero el precio más alto, el precio más bajo y el precio de cierre del último día de negociación que ocurrió en el período especificado (generalmente 9 días), y luego calcular el valor aleatorio inmaduro a través de la relación proporcional entre los tres valores RSV, y luego use la media móvil suave para calcular los valores K, D y J sobre esta base. Una vez completado el cálculo, dibuje el valor de KDJ en un gráfico para predecir la tendencia de las acciones. El algoritmo específico se muestra a continuación.
El primer paso: calcular el valor de RSV en el período (n días, n semanas, etc., n es generalmente 9). RSV también se denomina valor del índice estocástico inmaduro, que es la base para calcular el valor K, el valor D y Valor J. Tomando la unidad de cálculo del ciclo de n días como ejemplo, la fórmula de cálculo es la siguiente.
n 日 RSV = (Cn - Ln) / (Hn - Ln) × 100
Entre ellos, Cn es el precio de cierre del día n (generalmente el último día), Ln es el precio más bajo en el rango de n días y Hn es el precio más alto en el rango de n días. Según la fórmula anterior, el rango de valores de RSV es de 1 a 100. Si desea calcular el valor de RSV durante n semanas, Cn sigue siendo el precio de cierre del último día, pero Ln y Hn son los precios más bajos y más altos en n semanas.
Paso 2: Calcule los valores de K y D de acuerdo con RSV, el método es el siguiente.
Valor K del día = 2/3 × valor K del día anterior + 1/3 × valor RSV del día
Valor D del día = 2/3 × valor D del día anterior + 1/3 × valor K del día
En el proceso de cálculo, si no hay valor K o valor D del día anterior, se puede usar el número 50 en su lugar.
En el uso real, la línea KD generalmente se calcula en un ciclo de 9 días. De acuerdo con la fórmula anterior, el primero es calcular el valor RSV de los últimos 9 días, es decir, el valor aleatorio inmaduro. La fórmula de cálculo es 9 -día RSV = (C - L9) ÷ (H9 - L9) × 100. El significado de cada parámetro se mencionó en el paso 1, y luego calcule los valores K y D del día como se muestra en este paso.
Cabe señalar que los factores de suavizado 2/3 y 1/3 en la fórmula anterior se pueden cambiar, pero en la práctica del mercado de valores, estos dos valores se han establecido en 2/3 y 1/3 de forma predeterminada. .
El tercer paso: Calcule el valor de J. La fórmula de cálculo del índice J es: J = 3 × K-2 × D. Desde el punto de vista de uso, la esencia de J es reflejar el grado de desviación entre el valor de K y el valor de D. Su rango puede exceder 100 en la parte superior e inferior a 0 en la parte inferior.
Los primeros indicadores KDJ eran solo K-line y D-line. En ese momento, también se llamaban indicadores KD. Con el desarrollo de la tecnología de análisis, los indicadores KD evolucionaron gradualmente a indicadores KDJ. Después de la introducción de los indicadores J, puede mejorar la predicción de indicadores KDJ.
Después de calcular los tres valores de K, D y J para cada día de acuerdo con los tres pasos anteriores, conéctelos para ver la línea del indicador KDJ.
2 Dibuje una línea indicadora de KDJ estática
De acuerdo con el algoritmo KDJ proporcionado en la sección anterior, el gráfico de tendencias KDJ de la acción "Jinshi Resources" (código de stock 603505) de septiembre de 2018 a mayo de 2019 se dibujará en el programa de muestra drawKDJ.py a continuación.
! / usr / bin / env python 2 # coding = utf-8 3 import matplotlib.pyplot as plt 4 import pandas as pd 5 # 计算 KDJ 6 def calKDJ (df): 7 df ['MinLow'] = df ['Low '] .rolling (9, min_periods = 9) .min () 8 # 填充 NaN 数据 9 df [' MinLow ']. fillna (value = df [' Low ']. Expandiendo (). min (), inplace = True ) 10 df ['MaxHigh'] = df ['High']. Rolling (9, min_periods = 9) .max () 11 df ['MaxHigh']. Fillna (value = df ['High']. Expandiendo () .max (), inplace = True) 12 df ['RSV'] = (df ['Close'] - df ['MinLow']) / (df ['MaxHigh'] - df ['MinLow']) * 100 13 # Calcule el valor KDJ de cada día de negociación a través del bucle for 14 para i en el rango (len (df)): 15 si i == 0: # primer día 16 gl.ix [i, 'K'] = 50 17 gl.ix [i, 'D'] = 50 18 si i> 0: 19 gl.ix [i, 'K'] = gl.ix [i- 1, 'K'] * 2/3 + 1/3 * gl.ix [i, 'RSV'] 20 gl.ix [i, 'D'] = gl.ix [i-1, 'D'] * 2/3 + 1/3 * gl.ix [i, 'K'] 21 gl.ix [i, 'J'] = 3 * gl.ix [i, 'K'] - 2 * gl.ix [i , 'D'] 22 return df
En el método calKDJ definido en la declaración del programa desde la línea 6 a la línea 22, el valor de KDJ dentro del rango de tiempo especificado se calculará de acuerdo con el parámetro de entrada df.
El paso de cálculo específico es usar df ['Low']. Rolling (9, min_periods = 9) .min () en la octava fila para establecer el valor del atributo 'MinLow' de cada fila (es decir, cada día de negociación ) al precio mínimo de cierre (Bajo) dentro de los 9 días.
Si solo se ejecuta esta oración, el valor del atributo MinLow del 1 ° al 8 ° día de negociación será NaN, por lo que el valor del atributo MinLow de estos días de negociación debe establecerse en el precio de cierre dentro de los 9 días (Bajo) a través del código del programa en línea. 9 El valor mínimo. De la misma manera, establezca el valor del atributo 'MaxHigh' de cada día de negociación al precio más alto dentro de los 9 días a través del código del programa en la línea 10, y también use el método fillna en la línea 11 para completar el valor del ' Atributo MaxHigh 'de los 8 días anteriores. Luego, calcule el valor de RSV para cada día de negociación en la línea 12 de acuerdo con el algoritmo.
Después de calcular el valor RSV, a través del bucle for en la línea 14, recorra cada día de negociación por turno y calcule el valor de KDJ correspondiente a cada día de negociación de acuerdo con el algoritmo KDJ durante el recorrido.
Tenga en cuenta que si es el primer día de negociación, establezca los valores de K y D en el 50 predeterminado en el código del programa en las líneas 16 y 17. Si no es el primer día de negociación, pase las líneas 19 y 19. El algoritmo de 20 líneas calcula el valor K y el valor D. Después de calcular los valores de K y D, use el código de programa en la línea 21 para calcular el valor de J para cada día de negociación.
En el código anterior, puede ver tres habilidades de operación sobre el objeto DataFrame:
Primero, como se muestra en la línea 9, si desea volver a escribir los datos modificados en el DataFrame, debe agregar el parámetro inplace = True;
En segundo lugar, en la línea 12, los valores de variables como df ['Close'] están en la unidad de columna, es decir, en el DataFrame, se puede operar directamente en la unidad de columna;
En tercer lugar, el código df.ix [i, 'K'] = 50 en la línea 16, donde ix se usa para acceder al objeto a través del valor del índice y el valor de la etiqueta, y los métodos loc e iloc que logran funciones similares solo pueden ser pasó el valor del índice para acceder.
Dibuje la línea KDJ 24 def drawKDJ (): 25 df = pd.read_csv ('D: /stockData/ch8/6035052018-09-012019-05-31.csv', encoding = 'gbk') 26 stockDataFrame = calKDJ (df) 27 print (stockDataFrame) 28 # Empezar a dibujar 29 plt.figure () 30 stockDataFrame ['K']. Plot (color = "blue", label = 'K') 31 stockDataFrame ['D']. Plot (color = " green ", label = 'D') 32 stockDataFrame ['J']. plot (color =" purple ", label = 'J') 33 plt.legend (loc = 'best') # 画 图例 34 # Establecer la x eje Etiqueta de coordenadas y ángulo de rotación major_index = stockDataFrame.index [stockDataFrame.index% 10 == 0] 35 major_xtics = stockDataFrame ['Fecha'] [stockDataFrame.índice% 10 == 0]índice% 10 == 0] 36 plt.xticks (major_index, major_xtics) 37 plt.setp (plt.gca (). Get_xticklabels (), rotación = 30) 38 # Con líneas de cuadrícula y establezca el estilo de cuadrícula 39 plt.grid (linestyle = '-.') 40 plt.title ("La imagen KDJ of Jinshi Resources ") 41 plt.rcParams ['font.sans-serif'] = ['SimHei'] 42 plt.show () 43 # Método de llamada 44 drawKDJ ()
La operación de dibujar KDJ se implementa en el método drawKDJ en la línea 24. El paso clave es leer los datos de negociación de acciones del archivo csv especificado a través del código del programa en la línea 25, y luego llamar al método de trazado para dibujar con tres colores diferentes en el código del programa desde la línea 30 a la línea 32 Para la línea KDJ, debido a que la etiqueta se establece mediante el parámetro de etiqueta al dibujar, el código de programa en la línea 33 se puede ejecutar para dibujar la leyenda.
La etiqueta de texto del eje x y el ángulo de rotación se establecen en el código de la línea 34 a la línea 37. Esta parte del código es muy similar al código anterior para dibujar la línea indicadora MACD. Para no mostrar la fecha demasiado en el eje x, así que use stockDataFrame .index% 10 == 0, solo muestre la fecha cuyo valor de índice es un múltiplo de 10.
En la línea 44, se llama al método drawKDJ para dibujar el KDJ. Después de ejecutar este programa de muestra, puede ver el resultado como se muestra en la figura, en la que las tres curvas de KDJ están dibujadas en azul, verde y morado respectivamente (debido a que el libro está impreso en blanco y negro, el color no se puede ver, por favor léalo en su computadora Ejecute este programa de muestra en).
La siguiente figura es el gráfico KDJ de las acciones "Jinshi Resources" obtenidas del software de acciones durante el mismo período de tiempo La tendencia de los dos es básicamente la misma.
Este artículo puede ser reimpreso, por favor vuelva a imprimir el texto completo al reimprimirlo, sin ningún tipo de resumen, y proporcione el enlace original en forma de enlace. De lo contrario, puede encontrar protección de derechos por parte de los editores.
Enlaces relacionados con el texto:
Dibujar el efecto del indicador OBV del mercado de valores con lenguaje Python
Comenzando con el caso de predecir el alza y la caída de las acciones en base a SVM