Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 13

 
Krokus:

Forse è così:

Altri pensieri non vengono...




Stai leggendo tra le righe. In ogni caso, guardate cosa avete messo nel circuito in primo luogo. Lazona d'azione dell'anello...
 
Ciao, in mt4 android per tablet bisogna scaricare il terminale per ogni server separatamente ? il login come sul pc tramite file login non è possibile ? Inoltre, sai se autoclick può essere installato su un tablet android per fare trading in mt4?
 

Buon pomeriggio, non riesco a far funzionare questa condizione:

OrderCloseTime()!=hour()

Non voglio che venga aperto più di un ordine in un'ora!

Tutti gli stessi ordini sono aperti!

 
lowech:

Buon pomeriggio, non riesco a far funzionare questa condizione:

OrderCloseTime()!=hour()

Non voglio che venga aperto più di un ordine in un'ora!

Ma tutti gli stessi ordini sono aperti!

Prima di tutto: OrderCloseTime() - questo è il tempo di chiusura dell'ordine. Se l'ordine non è chiuso, è uguale a zero. Bisogna guardare l'ora di apertura.

In secondo luogo: Hour() - questa è l'ora di inizio dell'EA, e questa ora non cambia durante l'esecuzione del programma. Dovete confrontarlo con il tempo dell'ultimo arrivo della quotazione - TimeCurrent()

Questa funzione restituisce il numero di secondi dopo che l'ultima posizione del simbolo corrente è stata aperta:

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

Cioè, per controllare il numero di secondi dopo l'apertura dell'ultima posizione di acquisto con Magic, è necessario

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
 
Ciao, quando riapri il terminale, dopo il fine settimana, tutti i grafici, compresi i grafici funzionanti con EAs, sono scomparsi su un conto in centesimi. Al posto del grafico c'è un campo grigio, anche se le posizioni aperte, il saldo e i fondi sono stati salvati in basso. Ho dovuto riscaricare il terminale e reinstallare i grafici funzionanti con Expert Advisors, dopo di che tutto è andato bene. Per favore, ditemi di cosa si tratta e come posso eliminare questo problema in futuro nel modo più indolore?
 

Primo: OrderCloseTime() è il tempo di chiusura dell'ordine. Se l'ordine non è chiuso, è uguale a zero. Devi guardare il tempo aperto.

Secondo: Hour() - questa è l'ora di inizio dell'Expert Advisor, e questa ora non cambia durante l'esecuzione del programma. Dovete confrontarlo con il tempo dell'ultimo arrivo della quotazione - TimeCurrent()

Questa funzione restituisce il numero di secondi dopo che l'ultima posizione del simbolo corrente è stata aperta:

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

Cioè, per controllare il numero di secondi dopo l'apertura dell'ultima posizione di acquisto con Magic, è necessario

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
grazie per la funzione! non ne avete un'altra?! in modo che si apra solo un ordine per barra?!
 
lowech:
grazie per la funzione! non ne avete un'altra?! in modo che si apra solo un ordine per barra?!
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

stessa cosa, controlla solo il numero di barre, non i secondi

 
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

stessa cosa, controlla solo il numero di barre, non i secondi


Funziona! Ma quando chiudo un ordine con TP, se ne apre subito uno nuovo!
 
Perché i livelli di trading non vengono visualizzati sulla piattaforma e perché l'EA non funziona?
 
lowech:

stessa cosa, controlla solo il numero di barre, non i secondi


Funziona! Ma quando un ordine si chiude su TP, se ne apre uno nuovo all'istante! Come possiamo risolvere il problema?

Quindi dobbiamo fare un altro controllo: per il numero di barre dopo che l'ultimo ordine è stato chiuso:

//+----------------------------------------------------------------------------+
int BarsAfterCloseLastPos (int fi_MG, int fi_Type = -1)
{
    datetime ldt_Time = 0;
    int      li_Total = OrdersTotal();
//----
    for (int li_pos = 0; li_pos < li_Total; li_pos++)
    {
        if (!OrderSelect (li_pos, SELECT_BY_POS, MODE_HISTORY)) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (fi_Type >= 0) if (OrderType() != fi_Type) continue;
        if (OrderMagicNumber() != fi_MG) continue;
        if (ldt_Time >= OrderCloseTime()) continue;
        ldt_Time = OrderCloseTime();
    }
    //---- Обрабатываем событие - отсутствие своих ордеров
    if (ldt_Time == 0) return (-1);
//----
    return (iBarShift (NULL, 0, ldt_Time));
}
//+----------------------------------------------------------------------------+