Objetos de Gann

Para los objetos abanico de Gann (OBJ_GANNFAN) y retícula de Gann (OBJ_GANNGRID) podemos especificar uno de dos valores de la enumeración  ENUM_GANN_DIRECTION que establece la dirección de tendencia.

ENUM_GANN_DIRECTION

Constante

Descripción

GANN_UP_TREND

Línea de tendencia al alza

GANN_DOWN_TREND

Línea de tendencia a la baja

Para establecer la escala de la línea principar de 1x1 se usa la función ObjectSetDouble(chart_handle, gann_object_name, OBJPROP_SCALE, scale), donde:

  • chart_handle — ventana del gráfico en la que se encuentra el objeto;
  • gann_object_name — nombre del objeto;
  • OBJPROP_SCALE — identificador de la propiedad "Scale";
  • scale — escala requerida en unidades Pips/Bar.

Parámetros del objeto abanico de Gann

Ejemplo de creación del abanico de Gann:

void OnStart()
  {
//---
   string my_gann="OBJ_GANNFAN object";
   if(ObjectFind(0,my_gann)<0)// objeto no encontrado
     {
      //--- informamos sobre el fallo 
      Print("Object ",my_gann," not found. Error code = ",GetLastError());
      //--- obtenemos el precio máximo del gráfico
      double chart_max_price=ChartGetDouble(0,CHART_PRICE_MAX,0);
      //--- obtenemos el precio mínimo del gráfico 
      double chart_min_price=ChartGetDouble(0,CHART_PRICE_MIN,0);
      //--- ¿Cuántas barras se muestra en el gráfico?
      int bars_on_chart=ChartGetInteger(0,CHART_VISIBLE_BARS);
      //--- creamos una matriz en la que escribimos la hora de apertura de cada barra
      datetime Time[];
      //--- organizamos el acceso a la matriz como en serie temporal
      ArraySetAsSeries(Time,true);
      //--- ahora copiamos en él los datos de barras visibles en el gráfico
      int times=CopyTime(NULL,0,0,bars_on_chart,Time);
      if(times<=0)
        {
         Print("Fallo al copiar un array con la hora de apertura!");
         return;
        }
      //--- preparativos preliminares finalizados
 
      //--- índice de la barra central en el gráfico
      int center_bar=bars_on_chart/2;
      //--- ecuador del gráfico - entre el máximo y el mínimo
      double mean=(chart_max_price+chart_min_price)/2.0;
      //--- establecemos las coordinadas del primer punto de enlace en el centro
      ObjectCreate(0,my_gann,OBJ_GANNFAN,0,Time[center_bar],mean,
                   //--- el segundo punto de enlace a la derecha
                   Time[center_bar/2],(mean+chart_min_price)/2.0);
      Print("Time[center_bar] = "+(string)Time[center_bar]+"  Time[center_bar/2] = "+(string)Time[center_bar/2]);
      //Print("Time[center_bar]/="+Time[center_bar]+"  Time[center_bar/2]="+Time[center_bar/2]);
      //--- establecemos la escala en unidades Pips/Bar
      ObjectSetDouble(0,my_gann,OBJPROP_SCALE,10);
      //--- definimos la tendencia de la línea
      ObjectSetInteger(0,my_gann,OBJPROP_DIRECTION,GANN_UP_TREND);
      //--- definimos el grosor de la línea
      ObjectSetInteger(0,my_gann,OBJPROP_WIDTH,1);
      //--- definimos el estilo de la línea
      ObjectSetInteger(0,my_gann,OBJPROP_STYLE,STYLE_DASHDOT);
      //--- y el color de la línea
      ObjectSetInteger(0,my_gann,OBJPROP_COLOR,clrYellowGreen);
      //--- permitimos al usuario seleccionar el objeto
      ObjectSetInteger(0,my_gann,OBJPROP_SELECTABLE,true);
      //--- lo seleccionamos nosotros mismos
      ObjectSetInteger(0,my_gann,OBJPROP_SELECTED,true);
      //--- redibujamos el gráfico
      ChartRedraw(0);
     }
  }