Errori, bug, domande - pagina 215

 

Non potrebbe essere ancora possibile stampare il frammento selezionato in Yeditor? In questo momento questo pulsante radio non è attivo.

Una piccola cosa, certo, ma sgradevole, soprattutto quando gli elenchi sono lunghi 50 pagine.

 

Il server sembra essersi bloccato... da ieri.

 

L'algoritmo genetico è scomparso da qualche parte... Costruire 360

Domanda rimossa! Ho guardato nel posto sbagliato!

 

Possiamo contare sul fatto che HistorySelectByPosition() restituisce una lista ORDINATA di accordi?

ulong CExpertAdvisor::GetDealByOrder(ulong order) // получение тикета сделки по тикету ордера
  {
   PositionSelect(m_smb);
   HistorySelectByPosition(PositionGetInteger(POSITION_IDENTIFIER));
   uint total=HistoryDealsTotal();
//   for(uint i=0; i<total; i++)
   for(uint i=total-1; i>=0; i--)
     {
      ulong deal=HistoryDealGetTicket(i);
      if(order==HistoryDealGetInteger(deal,DEAL_ORDER))
         return(deal);                            // запомнили тикет сделки 
     }
   return(0);
  } 

Allora l'enumerazione QUI non sarebbe necessaria. Se no, l'enumerazione può iniziare dalla fine ... (ha notato che gli scambi nel tester sono stati ordinati).

 

Cari signori sviluppatori e programmatori! Ho bisogno di aiuto! Forse non sono il primo, ma comunque...

1. Come è possibile organizzare un ciclo, che verrebbe interrotto (per esempio) quando si preme sull'oggetto "pulsante". Per quanto ho capito, la funzione OnChartEvent non può essere chiamata forzatamente dallo stesso ciclo? Se è così, forse ci sono dei modi per aggirare la cosa, perché mi sono già scervellato.

Quando il ciclo è in esecuzione, le variabili del sistema non vengono aggiornate, cioè non è possibile approfittare del cambiamento del periodo del grafico (almeno). Se il ciclo è organizzato controllando OnChartEvent, allora è necessario fare costantemente qualcosa con il grafico per attivare questa funzione - anche questa non è un'opzione.

2. È possibile spostare il grafico nella finestra del grafico programmaticamente, non solo manualmente? ChartNavigate o non funziona, o è progettato per qualcos'altro, o non ho capito come funziona.

Vi ringrazio in anticipo.

p.s. Sarebbe possibile rendere le proprie funzioni e variabili evidenziate nel testo del programma?

 
KffAlex:

1. Come si può creare un ciclo che viene interrotto (per esempio) quando viene premuto un oggetto "pulsante"? Ho capito che la funzione OnChartEvent non può essere chiamata forzatamente dallo stesso ciclo? Se è così, forse ci sono dei modi per aggirarlo, perché mi sono già scervellato.

Controlla lo stato dell'oggetto pulsante.
 
KffAlex:

ChartNavigate o non funziona, o è progettato per qualcos'altro, o non ho capito come funziona questo.

Prova ChartRedraw dopo la chiamata della funzione e assicurati che lo scorrimento automatico del grafico sia disattivato...
Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 

Ho installato MT5 su un server remoto dedicato. Di tanto in tanto devo fare in modo che il terminale si ricolleghi a un server se la connessione viene interrotta per un breve periodo di tempo. Assicuratevi di specificare quale server utilizzare, altrimenti l'intero scambio si "blocca". Come posso fare in modo che il terminale si riconnetta automaticamente se non è collegato entro 5 minuti, per esempio?

 
EvgeTrofi:

Ho installato MT5 su un server remoto dedicato. Di tanto in tanto devo fare in modo che il terminale si ricolleghi a un server se la connessione viene interrotta per un breve periodo di tempo. Assicuratevi di specificare quale server utilizzare, altrimenti l'intero scambio si "blocca". Come posso fare in modo che il terminale si riconnetta automaticamente se non è connesso in 5 minuti, per esempio?

Questo dovrebbe avvenire automaticamente.

Il terminale rileva automaticamente la perdita della connessione e si ricollega ad essa (quando questa funzione è disponibile).

Se questo non accade, scrivete una richiesta al Service Desk con una descrizione completa del problema e non dimenticate di allegare i log.

 

Di fronte a un problema di overflow dello stack di chiamate (credo).

Dopo aver chiamato un metodo di uno degli oggetti, vedi esempio qui sotto. Il codice è semplificato, solo il succo. La classe CClass1 è una classe base, e list1 ha diversi oggetti che sono discendenti di questa classe, e le loro funzioni init hanno diverse implementazioni. Così, in una classe in cui la funzione init recupera una tale lista (per dirla semplicemente, inizializza un'interfaccia annidata, un pannello nel pannello) dopo il ritorno da init nella linea

    Print(t.name);

c'è un errore

2010.12.02 00:21:00 test1 (EURUSD,H1) Accesso al puntatore non valido in 'Container.mqh' (74,10)

for(CClass1* t = list1.GetLastNode(); t != NULL; t = list1.GetPrevNode() ) {
   t.init(); //после выхода отсюда t-мертвый указатель
    Print(t.name); 
}

Cioè il puntatore t è morto.

Quando si esegue il debug, questo errore non si verifica, dopo aver chiamato il metodo, il puntatore è "vivo", le interfacce annidate vengono create e EA continua a lavorare.

L'unico modo per aggirare l'errore

savePoint = t;
t.init();
t = savePoint;
#proprietà stacksize puntatore raggiunto nulla.
Motivazione: