Come controllare se un ordine è selezionato - pagina 10

 
artmedia70:
Non vedo il problema. Qual è il problema... È necessario selezionare un ordine in una funzione principale A(), e in un'altra funzione B(), chiamata dalla funzione principale A(), per elaborare l'ordine selezionato nella funzione A(). E dovremmo sapere con certezza nella funzione B() se l'ordine è ancora selezionato o no... Quindi passate alla funzione B() il biglietto dell'ordine selezionato nella funzione A(). Nella funzione B(), possiamo controllare da quale lista l'ordine è selezionato e poi decidere dove andare e cosa restituire alla funzione A()...

Mi hai frainteso. Così fa la metà delle persone per qualche motivo. Non ho bisogno nella funzione B() di elaborare quell'ordine, che è selezionato nella funzione A(). La funzione B() funziona con altri ordini, non importa quali, non ha niente a che vedere con la funzione A(); la funzione B() ha la sua propria logica. Può contare il numero di ordini, il loro profitto totale, guardare i loro commenti, TP SL, ecc. Il compito è quello di tornare dalla funzione B() alla funzione A() in modo tale che non importa cosa la funzione B() abbia fatto con gli ordini, la logica della funzione A() al punto di chiamata della funzione B() da essa non sarebbe violata a causa del fatto che l'ordine selezionato dalla funzione A() prima che la funzione B() fosse chiamata non è più selezionato e l'ordine selezionato è un altro ordine casuale elaborato dalla funzione B() che molto probabilmente cerca anche ordini nel ciclo.

artmedia70:
Ora immaginiamo cosa succederà alla variabile last_select dopo il riavvio del terminale (le luci sono spente dai cattivi)

Dopo il riavvio la variabile last_select sarà inizializzata a 0, come richiesto.

 

Ci sono 10 pagine di bla, bla, bla. Ecco il codice che prevede che la funzione lavori con un altro ordine (non evidenziato):

//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);
}
questo è solo un esempio. Una persona che capisce il punto lo capirà.
 
TarasBY:

Ci sono 10 pagine di bla, bla, bla. Ecco il codice che prevede che la funzione lavori con un altro ordine (non assegnato):

questo è solo un esempio. Una persona che capisce il punto lo capirà.

Non è questo il punto. Ci sono variabili, locali o globali, nell'EA e ci sono variabili terminali. Per quanto riguarda il programma, queste variabili sono interattive, e il loro valore può cambiare in modo assolutamente inspiegabile per l'EA in qualsiasi momento. Il segno di selezione dell'ordine è proprio una di queste variabili. Se Metaquotes permettesse l'accesso all'attributo "select" di un oggetto grafico, sarebbe lo stesso. Questo porterebbe inevitabilmente alla seguente conclusione: dovremmo selezionare un ordine ogni volta che abbiamo bisogno di conoscere il numero dell'ordine selezionato o ricordare l'ordine selezionato se e solo se è richiesto dalla logica dell'Expert Advisor. Quindi va così...
 
tara:
Non è questo il punto. Ci sono variabili, locali o globali, nell'EA e ci sono variabili del terminale. Queste variabili sono interattive dal punto di vista del programma, e il loro valore può cambiare in modo inspiegabile per l'EA in qualsiasi momento. Il segno di selezione dell'ordine è proprio una di queste variabili. Se Metaquotes permettesse l'accesso all'attributo "select" di un oggetto grafico, sarebbe lo stesso. Questo porterebbe inevitabilmente alla seguente conclusione: dovremmo selezionare un ordine ogni volta che abbiamo bisogno di conoscere il numero dell'ordine selezionato o ricordare l'ordine selezionato se e solo se è richiesto dalla logica dell'Expert Advisor. Quindi va così...

Sono completamente d'accordo con te:

  • Prima di tutto, dobbiamo prendere in considerazione ciò che abbiamo (capacità MQL4);
  • In secondo luogo, io stesso uso la struttura di elaborare TUTTI gliordini di compravendita con ordini aperti in un unico posto: faccio un'enumerazione di ordini e faccio tutte le azioni necessarie con ogni ordine (in ordine).

P.S. E faccio il controllo di cui sopra nel codice "per sicurezza"... :)

 

:)

Buone Feste! Per me - 20 anni, non il peggiore della mia vita.

 
TarasBY:

Ci sono 10 pagine di bla, bla, bla. Ecco il codice che prevede che la funzione funzioni con un ordine diverso (non evidenziato):

Questo è solo un esempio. Una persona che capisce il punto lo capirà.

Sì, proprio lì:

int li_LastTicket = OrderTicket();

Il vostro codice genererà un errore di esecuzione 4105 se non c'è stata alcuna chiamata a OrderSelect prima che sia stato fatto. Basta mettere un controllo GetLastError alla fine di ogni tick e rilevare questo errore.

 
tara:

:)

Buone Feste! Per me - 20 anni, non il peggiore della mia vita.

Congratulazioni! Hai servito Fede e Verità per 20 anni?
 
borilunad:
Congratulazioni! Hai servito Fede e Verità per 20 anni?
Proprio così.
 
tara:
Lei, mia cara.
Quindi, sovraelencato, come mi chiamavano ai miei tempi, o forse anche adesso, un pezzo di...? :)
 
borilunad:
Quindi sovraelencato, come mi chiamavano ai miei tempi, o forse anche adesso, un pezzo di...? :)
Ti farebbe sentire meglio se lo dicessi io? :)