Pivots y líneas de regresión con STMT

En esta entrada vamos a ver como localizar pivots y usar líneas de regresión con STMT. El resultado es un gráfico que muestra una flecha en cada pivot y líneas de regresión antes y después de cada pivot.

PivotReg

Pivots

Un pivot es una zona donde tanto antes como después el precio está en el mismo lado, bien por encima, bien por debajo. Gráficamente se puede asimilar al pico de un triángulo: todos los valores antes y después están por debajo (o por encima si está invertido) del vértice del triángulo. Los pivots pueden ser zonas donde el precio cambia de tendencia.

Cuando trabajamos con pivots hay que tener en cuenta diversos parámetros:

  • Origen: se puede usar el cierre, la apertura o crear una línea con el punto medio o el promedio de la barra. En el ejemplo, se utiliza el cierre.
  • Amplitud: determina el número de barras a izquierda y derecha que se toman en consideración al buscar el pivot. En el ejemplo, se usan 10 barras.
  • Lado: un pivot es un pivot cuando a ambos lados se cumple que los X valores están en la misma zona. En ocasiones puede ser de interés, por ejemplo, buscar un pivot que tenga 10 barras de amplitud a la izquierda y 5 a la derecha. Se trataría de un pivot que todavía no se ha terminado de formar pero puede ser de interés anticiparse a la finalización del pivot. Las operaciones con pivots tienen un parámetro opcional PivotSide que permite indicar que lado del pivot se está buscando. En el ejemplo, no se indica y, por tanto, debe ser un pivot completo.

Los métodos que trabajan con pivots lo hacen con la clase PivotInfo o una derivada de esta. Esta clase incluye la fecha del pivot, cuantas barras hay disponibles a izquierda y derecha y cuantas barras verifican el pivot en cada lado. LeftCount =10 y RighCount = 5 indicaría que en la fecha del pivot hay 10 barras a izquierda y 5 a derecha que verifican el pivot. Las propiedades Support y Resistance indican si el pivot actúa como soporte o resistencia.

Si los pivots se van a utilizar en entornos más complejos, donde se quiere asociar información extra a cada pivot (valores de indicadores, del volumen… de la barra del pivot) puede usarse una clase personalizada, derivada de PivotInfo, para trabajar con dicha información.

Veamos el código que busca los pivots del gráfico:

private static List<PivotInfo> FindPivots(HistoricSerie historic, int barCount)
{
   List<PivotInfo> pivots = new List<PivotInfo>();
   DateTime date = historic.Dates.FirstDate;
   
   PivotInfo pivotInfo;
   do
   {
      pivotInfo = historic.Close.FindPivot<PivotInfo>(date, barCount);

      if (pivotInfo != null)
      {
         pivots.Add(pivotInfo);

         int index = historic.Dates.IndexOf(pivotInfo.Date);
         date = historic.Dates[index + 1];
      }
   } while (pivotInfo != null);

   return pivots;
}

Se comienza al principio del histórico y se busca en la línea del cierre el siguiente pivot desde la fecha indicada con la amplitud de barCount barras.

Si se encuentra un pivot se añade a la lista y se continua buscando desde la fecha posterior a la del pivot.

En tiempo real, puede ser más recomendable usar la función ReverseFindPivot o GetPivotInfo para buscar el pivot anterior o el de una barra concreta en lugar de recorrer todo el histórico.

Rectas de regresión

Una recta de regresión es aquella que minimiza la distancia total que hay entre ella y una serie de puntos. Es aquella que “pasa más cerca” de todos los puntos en su conjunto.

STMT permite obtener la ecuación de la recta de regresión de un conjunto de puntos. Cualquier línea de datos de STMT dispone del método LinealRegression que devuelve un objeto EcuationLine con los parámetros de la recta de regresión.

En este fragmento de código podemos apreciar cómo obtener la ecuación de la recta y el punto inicial y final de la misma (para pintar ese segmento solamente):

EcuationLine ecuation = historic.Close.LinealRegression(start, end);
DateTime startDate = line.Dates[start];
DateTime endDate = line.Dates[end];
doublestartPrice = ecuation[0];
doubleendPrice = ecuation[end - start];

Y a continuación, el código que pinta las rectas de regresión en la aplicación de ejemplo:

privatevoid PlotRegressionLines(
   HistoricSerie historic, IEnumerable<PivotInfo> pivots)
{
   int colorIndex = 0;
   Color[] colors = new[] { Color.Red, Color.BlueViolet, Color.SeaGreen };

   foreach (PivotInfo pivotInfo in pivots)
   {
      DateTime date = pivotInfo.Date;
      int index = historic.Dates.IndexOf(date);
      Color color = colors[colorIndex++ % colors.Length];

      ChartLine chartLine = this._chart.AddRegressionLine(
         historic.Close, index - pivotInfo.LeftCount, index);
      chartLine.Color = color;

      chartLine = this._chart.AddRegressionLine(
         historic.Close, index, index + pivotInfo.RightCount);
      chartLine.Color = color;
   }
}

Para cada pivot, se crea y añade un objeto ChartLine (una línea en el gráfico) barCount barras antes y después del pivot.

Como puede haber pivots cerca, para evitar que se confundan las líneas de sus rectas, se usan tres colores distintos.

Notas finales

Para terminar, algunas anotaciones sobre el control del gráfico:

  • Para ampliar o reducir el zoom en una zona del gráfico, basta con pulsar la tecla control y la rueda del ratón.
  • Para ampliar o reducir el zoom en la escala de precios, basta con pulsar la tecla control, mayúsculas y la rueda del ratón.
  • Haciendo doble click en la escala de precios se ajusta automáticamente.
  • Haciendo doble click en el gráfico se muestra una cruz en la posición del cursor. Si se deja la tecla de mayúsculas pulsada, la cruz se bloquea.
  • La rueda del ratón permite avanzar y retroceder por el gráfico.
  • Se puede seleccionar un rango de fechas manteniendo la tecla Alt pulsada para hacer zoom a la región seleccionada.

 
Archivo ZipDescargar STMT y PivotRegressionLine.

Anuncios
Galería | Esta entrada fue publicada en Programación y etiquetada , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s