Build 216 bug? isConnected() restituisce false ma metatrader è ancora connesso - pagina 3

 
edddim:

Questo potrebbe risolvere il problema?

string FILE[1];
int MOVE[1];
 
void init() { FILE[0]=Symbol(); }
 
int start()
  {
//---- check connection
   if ( !Connection() ) return(0);
//---- 
   return(0);
  }
 
bool Connection()
  {
   int d;
   bool connect;
   RefreshRates();
   for ( d=0; d<ArraySize(FILE); d++)
    {
     if ( MOVE[d] != MarketInfo(FILE[d],5) )
      {
       MOVE[d] = MarketInfo(FILE[d],5);
       /* if ( !connect ) */
       connect=1;
      }
    }
   return(connect);
  }

grazie edddim!


potresti spiegare la tua idea anche con le parole?

 

the problem is not in my code it is in the IsConnected().

Grazie per l'illuminazione delle tue ragioni per rimanere in un ciclo infinito.

Sì, mi rendo conto che non è il tuo codice - stavo postulando una serie di eventi che hanno fatto sì che Terminal si trovasse nella zona di codice dove ha eseguito del codice che ha fatto precipitare il problema di connessione.

Dal momento che dichiari che effettivamente rimani in loop, allora non è possibile che Terminal non possa gestire questo correttamente... chi lo sa? ma a meno che uno non pubblicizzi queste idee nessuno penserà a considerare la probabilità di un tale evento, sì?

Di nuovo, grazie per la tua risposta.

Il team di supporto non può emulare il tuo problema - quindi a volte il pensiero laterale è utile...

;)

 

Potresti spiegare la tua idea anche con le parole?

L'idea è da controllare, ...un po' più complicata presentata perché controllerà i tick in arrivo con il tempo. Più può essere controllato con ArraySize(FILE) più grande, e più accurato sarebbe controllare MOVE[d] > MarketInfo(FILE[d],5) come insieme di altre possibili funzioni incluse con esatto cambiamento puntato. Una versione più semplice di controllare se appena collegato potrebbe essere:

int incomeTime = TimeCurrent();
Sleep(1000);
if ( incomeTime <= 0 ) return;
RefreshRates();
if ( incomeTime >= TimeCurrent() ) return;

La situazione è se è più di 1000 Pausa sonno sarebbe impreciso come precisione, ma se meno potrebbe essere risultato nel ricevere lo stesso tempo come precedente, perché il tempo ricevuto è in secondi.

Il prossimo controllo potrebbe essere se il tick è cambiato, che deve essere fatto seguendo le operazioni.

Questo è dal mio punto di vista.

 
Grazie per questa idea, Edddim.

Ma sfortunatamente, questo non risolve il problema poiché è piuttosto scomodo e non molto affidabile.

Inoltre, sta controllando se il mercato è aperto e non sta controllando la connessione al conto di trading (se ho capito la vostra soluzione).


Vi chiedo amichevolmente, MetaQuotes, di mettere un po' più di impegno per risolvere questo problema, dato che è un problema critico e non sono l'unico a riscontrarlo.

Tuttavia, per favore non si offenda per le mie richieste se ci sta già lavorando.


cordiali saluti,


Daniel.

 

Oggi ho installato uno script osservatore sul mio server virtuale che indica lo stato di IsConnected() di due stazioni MT4. Con una di esse, MIG Investment, MT4 rimane su !isConnected() dopo una o due brevi disconnessioni, anche se è davvero collegata.

Per favore, caro MT4 Dev Team, potresti fare un test più grande con diverse stazioni MT4 di diversi broker e invertire lo stato di isConnected()? Sono più che sicuro che sarete in grado di riprodurlo se ci mettete un po' di impegno!

La maggior parte degli script e degli EA disponibili dipendono da IsConnected() che restituisce lo stato di connessione corretto, riavviare MT4 tutto il tempo non è un work-around che mi soddisfa.

 

Ancora una volta. Per determinare questo problema si dovrebbe usare un semplice esperto

void start()
  {
   if(!IsConnected()) Print("Alarm!!! Connection is lost!");
  }

NON SCRIPT O EA CON LOOP INFINITI!!!!!!!

Se il tuo script segnala la perdita di connessione, ma il nostro EA (vedi sopra) rimane in silenzio, allora hai un problema globale con internet (per esempio un problema con l'ultimo miglio del tuo internet provider)

Se l'EA stampa "Alarm" allora abbiamo un problema con la nostra routine di connessione

 

Sì! Stringo risponde di nuovo, grazie mille.

Tuttavia, questo è ciò che è! Ho provato con questo tipo di semplici EAs/scripts senza loop.

Btw, sono assolutamente sicuro che non sto avendo un problema con il mio internet dato che è stato testato sulla mia rete privata e su un server virtuale.

Il fatto è che posso fare trading e tutto sembra e _è_ ok ma isConnected() restituisce ancora FALSE

 

L'operazione commerciale inizializza la propria connessione con il server commerciale.

IsConnected() mostra lo stato della connessione dei dati di pompaggio.

1. L'indicatore di connessione (angolo in basso a destra) è rosso o scuro?

2. A quale broker è connesso?

3. Quale sistema operativo è installato sul tuo server virtuale?

 

grazie per la vostra risposta rapida, ecco le mie risposte:

1. È verde-rosso come al solito

2. Investimenti MIG

3. Sul mio server virtuale è installato Windows Server 2003. Sul mio desktop domestico che occasionalmente mostra lo stesso problema WinXP.

 
stringo:

Ancora una volta. Per determinare questo problema dovresti usare un semplice esperto

void start()
  {
   if(!IsConnected()) Print("Alarm!!! Connection is lost!");
  }

NON SCRIPT O EA CON LOOP INFINITI!!!!!!!

Se il tuo script riporta la connessione persa, ma il nostro EA (vedi sopra) rimane in silenzio, allora hai un problema globale con internet (per esempio un problema con l'ultimo miglio del tuo internet provider)

Se l'EA stampa "Alarm" allora abbiamo un problema con la nostra routine di connessione

Ho provato quanto segue:

void start()
{

if(IsConnected()) Stampa("Connesso!");
if(!IsConnected()) Print("Allarme!!! Connessione persa!");
}

Connected viene stampato quando c'è la connessione ma quando la connessione viene persa l'EA è morto. Penso che la ragione sia perché non ci sono più tick in entrata per attivare il codice !IsConnected() e quindi non rileverà mai una connessione persa!!!