Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 492

 
Евгений:
¿Hay alguna forma de comprobar si los guiones de apertura funcionan durante el fin de semana?
No. Sólo se pueden comprobar los Asesores Expertos en el probador de estrategias durante el fin de semana.
 
Karputov Vladimir:
Sólo el indicador maneja todos los ticks en OnCalculate(). Sin saltos.
Eh no. Y se salta. Pero menos que otros. Pero se salta.
 
Victor Nikolaev:
No. Y falla. Pero menos que otros. Pero se salta.
El indicador puede omitir el tick sólo si el indicador utiliza cálculos que consumen muchos recursos en cada entrada en OnCalculate().
 
kashi_ann:

Está bien, gracias.

Otra pregunta:

OrderSelect

Selecciona una orden para seguir trabajando con ella. Devuelve true si la función se completa con éxito. Devuelve false si la función falla. Es necesario llamar a la funciónGetLastError() para obtener información sobre el error.

La funciónOrderSelect(
ulong ticket// Boleto de la orden
);

Parámetros

billete

[El billete de la orden.

¿Cómo se asigna este billete? ¿Dónde puedo conseguirlo? ¿O cómo lo configuro?

En la ayuda dice

OrderGetTicket

Devuelve el ticket de la orden correspondiente y selecciona automáticamente la orden para su posterior manipulación mediante funciones. Tenemos que revisar todos los pedidos por índice y obtener un ticket, si es necesario. Aunque esta función también seleccionará la propia orden. El billete lo fija el corredor y no podemos cambiarlo.

ulong  OrderGetTicket( 
   int  index      // номер в списке ордеров 
   );
 

Hola a todos.

He escrito una función que debería dibujar la "zona horaria no comercial" en el gráfico todos los días.
Pero aquí hay un problema - cuando lo inicio, el módulo OnInit, dibuja como debería ser pero cuando lo disparo en el módulo OnTimer por alguna razón desconocida la variable date mantiene los valores que fueron asignados en el módulo OnInit.

Pregunta: ¿Por qué?

int OnInit()

  {

    EventSetTimer(1);

    MqlDateTime date;

    TimeLocal(date); 

    offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date

    return(INIT_SUCCEEDED); 

  } 

 ...

void onTimer()

  {

    MqlDateTime date;

    TimeLocal(date);

    if (date.hour==9 && date.min==0 && date.sec==0)  offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date

  } 

...
 
INGFX:

Hola a todos.

He escrito una función que debería dibujar una "zona horaria no comercial" en un gráfico cada día.
Pero hay un problema - cuando se ejecuta en el módulo OnInit dibuja la fecha como debe ser pero cuando se ejecuta en el módulo OnTimer por alguna razón desconocida la variable fecha mantiene los valores que fueron asignados en el módulo OnInit.

Pregunta: ¿Por qué?

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Bichos, errores, preguntas

Karputov Vladimir, 2016.01.09 20:51

¿Qué te hace pensar que en la variable del temporizador se pasa el valor definido previamente en OnInit()?

Tienes que mirar tu función que dibuja la zona.

Completado:

Correctamente sería OnTimer, no onTimer.

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

INGFX, 2016.01.09 21:20

Porque A) veo visualmente que el "huso horario" no está dibujado hoy de 21:00 a 23:59, sino de ayer 21:00 a hoy 23:59

B) Si abro las propiedades del objeto gráfico (rectángulo sombreado - "zona horaria"), veo que la primera variable no ha cambiado, es decir, tiene el mismo valor que ayer a las 21:00

...
bool offtimeCreate(MqlDateTime &stm)
  {
    color clr=Black;
    datetime tm1,tm2;
    tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
    tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

    RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

    return(true);
  }
...

 
Karputov Vladimir:
La palabra correcta es OnTimer, no onTimer
Sí, es OnTimer, me he equivocado al copiarlo aquí... El código en sí es correcto.
 
INGFX:
Sí OnTimer, cometió un error al reescribir aquí ... el código en sí es correcto

Habrías comprobado tu código. Cansado de coser tus pedazos - así que aquí, revisa el código. En OnTimer sustituya su hora local y compare las impresiones en la inicialización y en el temporizador:

//+------------------------------------------------------------------+
//|                                                       TestEA.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1);
   MqlDateTime date;
   TimeLocal(date);
   offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   MqlDateTime date;
   TimeLocal(date);
   if(date.hour==22 && date.min==33 && date.sec==00)
      offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date
  }
//+------------------------------------------------------------------+
/*void offtimeCreate(MqlDateTime &struct_date)
  {
   string text="";
   text=IntegerToString(struct_date.hour)+":"+
        IntegerToString(struct_date.min)+":"+
        IntegerToString(struct_date.sec);
   Comment(text);
//ChartRedraw();
  }*/
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool offtimeCreate(MqlDateTime &stm)
  {
   color clr=Black;
   datetime tm1,tm2;
   tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
   tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

   Print(tm1+"      "+tm2);
//RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

   return(true);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

Habrías comprobado tu código.

Vladimir, ¡gracias por tu paciencia y ayuda!
Realmente se cometió un error en el código ...
Tendré más cuidado a partir de ahora.

Razón de la queja: