¿Cómo puedo aprender a crear objetos gráficos? MQL4. - página 2

 
barabashkakvn:
Si conoce la hora y las fechas de sus puntos, sólo tiene que llamar abool TrendCreate()

Gracias por los consejos. Resultó ser más fácil que eso.

Lo hice así:

#property strict
#property script_show_inputs

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
  long   chart_ID=0;        // ID графика
  string name="TrendLine";  // имя линии
  int    sub_window=0;      // номер подокна
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим трендовую линию по заданным координатам
   if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[41],1.0656,Time[65],1.0494))
     {
      Print(__FUNCTION__,
            ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
      return;
     }
   
  }
//+------------------------------------------------------------------+

P.D. Una cosa que no entiendo es por qué los números del ejemplo están elegidos así:

InpDate1=35;        
InpPrice1=60;        
InpDate2=65;        
InpPrice2=40; 

A partir de ellos, la línea de tendencia se sitúa en el centro del rango.

 
Ahora el siguiente problema a resolver es cómo continuar la línea hacia la derecha y obtener el valor de la línea en el EA?
 
forexman77:

...

A partir de ellos, la línea de tendencia se sitúa en algún lugar en el centro del rango.

Por lo tanto, es sólo un script cuya tarea principal es demostrar cómo crear y trabajar con el objeto OBJ_TREND. Las cifras se han tomado para mayor claridad.
 
forexman77:
Ahora el siguiente problema a resolver es cómo continuar la línea hacia la derecha y obtener el valor de la línea en el EA?

El código del script lo tiene todo:

//+------------------------------------------------------------------+
//| Создает линию тренда по заданным координатам                     |
//+------------------------------------------------------------------+
bool TrendCreate(const long            chart_ID=0,        // ID графика
.
.
.
//--- включим (true) или отключим (false) режим продолжения отображения линии влево
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
.
.
.
 
barabashkakvn:

El código del script lo tiene todo:

1.Cuando se llama desde el probador se abren las operaciones. Si ejecuto la optimización hay ceros por todas partes. Cuando lanzo cualquier ejecución de optimización, las ofertas están ahí. ¿Qué hacer?

2. ¿Cómo puedo hacer que se guarde una línea si se ha producido una operación (en cada operación), y si no, se borre?

  long   chart_ID=0;        // ID графика
  string name="TrendLine";  // имя линии
  int    sub_window=0;      // номер подокна
  ObjectDelete(chart_ID,name);
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим трендовую линию по заданным координатам
   if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
     {
      Print(__FUNCTION__,
            ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
      return(0);
     }
    ObjectSet("TrendLine",OBJPROP_TIME1,Time[minbar]);
    ObjectSet("TrendLine",OBJPROP_PRICE1,Low[minbar]);
    ObjectSet("TrendLine",OBJPROP_TIME2,Time[IPMIN]);
    ObjectSet("TrendLine",OBJPROP_PRICE2,Low[IPMIN]);

   if (IPMIN!=0){ double uroven= ObjectGetValueByTime(chart_ID,name,Time[1],sub_window);}
   
}
Print("uroven=",uroven);
if (Time[0] > b && Close[1] < uroven){Opn_B=true;}
 
Tienes que controlar las operaciones tú mismo. Pero para que cada operación tenga su propia línea, hay que dar a cada línea un nombre único cuando se crea.
 
barabashkakvn:
Tienes que controlar las operaciones tú mismo. Pero para que cada operación tenga su propia línea, hay que dar a cada línea un nombre único cuando se crea.
¿Cómo? ¿Puede dar un ejemplo?
 
forexman77:
¿Cómo? ¿Puedo darle un ejemplo?
Ayuda a quien tenga ejemplos, por favor.
 

Objetos gráficos durante las pruebas

Durante la prueba de visualización, el Asesor Experto interactúa con el gráfico real. En las pruebas normales, sin visualización, el Asesor Experto opera con un gráfico "virtual" que no se renderiza; en este caso, son posibles algunas sutilezas. Los objetos gráficos no son compatibles cuando el comprobador está en modo de optimización.

Dos días para estudiar, y resulta que es imposible realizar la optimización.

Me pregunto si creo un indicador. ¿Podré obtener el valor de la línea en mi Asesor Experto a través de él?

¿Quién tiene que decir qué? Tal vez, ¿quién ha estudiado ya esta cuestión?

 
forexman77:

...

¿Me pregunto si podría hacer un indicador? ¿Podré obtener el valor de la línea en el EA a través de ella?

...

Si el indicador crea objetos gráficos y luego obtiene sus parámetros, no.

Pero sigue siendo más fácil resolver todo mediante el uso de un indicador. Los cálculos se realizan en el indicador y sus resultados se muestran a través de los topes del indicador.

Hay una alternativa más. Crear variables globales con parámetros de la línea en lugar de líneas, pero entonces la función GetValueByShift() no funcionará, debe escribir su análogo.