Cómo comprobar si una orden está seleccionada - página 10

 
artmedia70:
No veo ningún problema. Cuál es el problema... Es necesario seleccionar una orden en una función principal A(), y en otra función B(), llamada desde la función principal A(), para procesar la orden seleccionada en la función A(). Y deberíamos saber con seguridad en la función B() si la orden sigue seleccionada o no... Así que pasa a la función B() el ticket de la orden seleccionada en la función A(). En la función B(), podemos comprobar de qué lista se ha seleccionado el pedido y luego decidir a dónde ir y qué devolver a la función A()...

Me has entendido mal. Por alguna razón, la mitad de la gente también lo hace. No necesito en la función B() procesar esa orden, que se selecciona en la función A(). La función B() funciona con otras órdenes, no importa cuáles, no tiene nada que ver con la función A(); la función B() tiene su propia lógica. Puede contar el número de órdenes, su beneficio total, mirar a través de sus comentarios, TP SL, etc. La tarea es volver de la función B() de nuevo a la función A() de tal manera que, independientemente de lo que la función B() haya hecho con los pedidos, la lógica de la función A() en el punto de llamada de la función B() desde ella no sería violada debido a que el orden seleccionado por la función A() antes de la llamada de la función B() ya no es seleccionado y el orden seleccionado es otro orden aleatorio procesado por la función B() que muy probablemente también busca órdenes en el bucle.

artmedia70:
Ahora imaginemos lo que ocurrirá con la variable last_select después de reiniciar el terminal (las luces están apagadas por tipos desagradables)

Después de reiniciar la variable last_select se inicializará a 0, según sea necesario.

 

Hay 10 páginas de bla, bla, bla. Aquí está el código que prevé que la función funcione con otra orden (no resaltada):

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем актуальную информацию об ордере                                  |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fGet_OrderDetails (int fi_Ticket)              // OrderTicket()
{
    int lia_cmd[] = {1,-1,-1,1,1,-1};
//----
    //---- На текущий момент может быть выделенным другой ордер
    int li_LastTicket = OrderTicket();
    if (li_LastTicket != fi_Ticket)
    {   
        if (!OrderSelect (fi_Ticket, SELECT_BY_TICKET))
        {fSet_Comment (fi_Ticket, fi_Ticket, 100, "fGet_OrderDetails()", True, GetLastError()); return (false);}
    }
    if (bi_curTicket != fi_Ticket)
    {
        bi_Type = OrderType();
        bd_OpenPrice = NDD (OrderOpenPrice());
        bd_Lots = OrderLots();
        bi_cmd = lia_cmd[bi_Type];
        bi_curTicket = fi_Ticket;
    }
    bd_curSL = NDD (OrderStopLoss());
    bd_curTP = NDD (OrderTakeProfit());
    //---- Выделяем первоначальный ордер
    if (li_LastTicket != fi_Ticket) {if (li_LastTicket > 0) OrderSelect (li_LastTicket, SELECT_BY_TICKET);}
//----
    return (true);
}
esto es sólo un ejemplo. Una persona que entienda el punto se dará cuenta.
 
TarasBY:

Hay 10 páginas de bla, bla, bla. Aquí está el código que prevé que la función trabaje con otra orden (no asignada):

esto es sólo un ejemplo. Una persona que entienda el punto se dará cuenta.

Esa no es la cuestión. Hay variables, locales o globales, en el EA y hay variables terminales. En lo que respecta al programa, estas variables son interactivas, y su valor puede cambiar de forma absolutamente inexplicable para el EA en cualquier momento. El signo de selección de orden es precisamente una de esas variables. Si Metaquotes permitiera el acceso al atributo "select" de un objeto gráfico, también sería lo mismo. Esto llevaría inevitablemente a la siguiente conclusión: debemos seleccionar una orden siempre que necesitemos saber el número de la orden seleccionada o recordar la orden seleccionada si y sólo si lo requiere la lógica del Asesor Experto. Así que es así...
 
tara:
Esta no es la cuestión. Hay variables, locales o globales, en el EA y hay variables del terminal. Estas variables son interactivas desde el punto de vista del programa, y su valor puede cambiar de forma inexplicable para el EA en cualquier momento. El signo de selección de orden es precisamente una de esas variables. Si Metaquotes permitiera acceder al atributo "select" de un objeto gráfico, también sería lo mismo. Esto nos llevaría inevitablemente a la siguiente conclusión: debemos seleccionar una orden siempre que necesitemos saber el número de la orden seleccionada o recordar la orden seleccionada si y sólo si lo requiere la lógica del Asesor Experto. Así que es así...

Estoy completamente de acuerdo con usted:

  • En primer lugar, hay que tener en cuenta lo que tenemos (capacidades de MQL4);
  • En segundo lugar, yo mismo utilizo la estructura de procesamiento de TODAS lasórdenes comerciales con órdenes abiertas en un solo lugar: hago una enumeración de órdenes y hago todas las acciones necesarias con cada orden (en orden).

P.D. Y hago la comprobación anterior en el código "por si acaso"... :)

 

:)

¡Felices fiestas! Para mí, 20 años, no son los peores de mi vida.

 
TarasBY:

Hay 10 páginas de bla, bla, bla. Aquí está el código que proporciona la función para trabajar con un orden diferente (no resaltado):

Esto es sólo un ejemplo. Una persona que entienda el punto se dará cuenta.

Sí, justo ahí:

int li_LastTicket = OrderTicket();

Su código generará un error de ejecución 4105 si no hubo una llamada a OrderSelect antes de realizarla. Sólo hay que poner una comprobación GetLastError al final de cada tic y detectar este error.

 
tara:

:)

¡Felices fiestas! Para mí - 20 años, no el peor de mi vida.

Enhorabuena. ¿Has servido a Fe y Verdad durante 20 años?
 
borilunad:
Enhorabuena. ¿Has servido a Fe y Verdad durante 20 años?
Así es.
 
tara:
Ella, querida.
Así que, ¿sobreenumerado, como me llamaban en mi época, o quizás incluso ahora, un pedazo de...? :)
 
borilunad:
¿Así que sobreenlistado, como me llamaban en mi época, o tal vez incluso ahora, un pedazo de...? :)
¿Te haría sentir mejor si lo dijera? :)