IsConnected() - pagina 3

 

Scusa, ma perché non dovrebbe funzionare:

int start()

{

    while ( !IsStopped() )
    {
        IsConnectedBefore = IsConnectedNow;
        IsConnectedNow = IsConnected();
      ....

     }

}   

Quindi il mio EA è sempre nel while-loop e non ha bisogno di alcun tick.

 

L'intera faccenda di PostMessageA() è stata postata solo come risposta alla frase "call start() from init()" che si trovava prima in questo thread. "call start() from init()" è semplicemente sbagliato su così tanti livelli e quindi ho dovuto commentarlo e anche fornire una soluzione adeguata per ottenere lo stesso, cioè forzare una chiamata di start() dall'interno di init() anche nei fine settimana.


Per il problema dell'avvio di MT4 in uno stato disconnesso non fornisce una soluzione. Anche se non capisco quale possa essere il caso d'uso di questo, dato che è la connessione che va e viene mentre metatrader stesso dovrebbe essere facilmente tenuto in funzione 24/7 senza interruzioni. E anche quando viene riavviato nel fine settimana, con il PostMessageA() in init() riprenderà immediatamente il ciclo in start() non appena la connessione tornerà dopo il riavvio, anche senza un tick e poi continuerà a funzionare per sempre fino al prossimo (accidentale) riavvio.

 
sunshineh:

Scusa, ma perché non dovrebbe funzionare:

Quindi il mio EA è sempre nel while-loop e non ha bisogno di alcun tick.


Sì, perché non hai riavviato il terminale mentre non hai una connessione a Internet, ma se riavvii il terminale mentre non hai una connessione a Internet l'AE non arriva al ciclo senza un tick, non importa cosa fai, anche se usi PostMessageA() o chiami Start () da init(), l'unico modo per farlo è con uno script, perché gli script sono in esecuzione indipendentemente dal tick o meno
 

Comunque grazie a tutti per aver cercato di aiutare. Ho deciso di sporcarmi un po' le mani ed eseguire un programma esterno per eseguire lo script, fine della storia.
Indipendentemente da ciò, la funzione IsConnected() mi fa ancora ridere, se una cosa così semplice non copre

 
7bit:

L'intera faccenda di PostMessageA() è stata postata solo come risposta alla frase "call start() from init()" che si trova in precedenza in questo thread. "call start() from init()" è semplicemente sbagliato su così tanti livelli e quindi ho dovuto commentarlo e anche fornire una soluzione adeguata per ottenere lo stesso, cioè forzare una chiamata di start() dall'interno di init() anche nei fine settimana.


Per il problema di avviare MT4 in uno stato disconnesso non fornisce una soluzione. Anche se non capisco quale possa essere il caso d'uso di questo, dato che è la connessione che va e viene mentre metatrader stesso dovrebbe essere facilmente mantenuto in funzione 24/7 senza interruzioni. E anche quando viene riavviato nel fine settimana, con il PostMessageA() in init() riprenderà immediatamente il ciclo in start() non appena la connessione tornerà dopo il riavvio, anche senza un tick e poi continuerà a funzionare per sempre fino al prossimo (accidentale) riavvio.


Grazie per la tua interiezione 7Bit, è utile conoscere metodi migliori, ho eseguito un EA con successo come ho descritto sopra nel tentativo di risolvere un problema che mi stava causando problemi significativi. Il terminale poteva regolarmente perdere la connessione ma per una ragione sconosciuta non riusciva a riconquistarla. Mi ci è voluto per risanare manualmente i server nel terminale prima che si riconnettesse. Inizialmente ho pensato che fosse solo un caso di temporizzazione, ma troppo spesso per essere un caso, potevo aspettare un'ora, non recuperare la connessione e poi l'istanza in cui cliccavo su rescan, si ricollegava. La mia soluzione era quella di testare continuamente lo stato della connessione... se perdeva la connessione gli dava 5 minuti per riconnettersi e urlava dai tetti negli avvisi, nelle email e nei log che stava succedendo e poi chiudeva il terminale e ripartiva. Questo ha funzionato nella maggior parte delle occasioni. Di tanto in tanto, c'era un problema di connessione legittimo e poiché l'EA non si inizializza senza connessione sono bloccato in un buco. Ho cercato metodi per risolvere questo problema, tutti metodi al di fuori di MT4 e quindi al di fuori delle mie attuali capacità informatiche. Fortunatamente, ho cambiato broker e non ho avuto alcun problema con il mio attuale fornitore... quindi lavorare di più su questo è in fondo alla lista delle priorità.

Ma può succedere che la connessione venga persa e MT4 non riesca a riconnettersi quando la connessione è effettivamente disponibile. Un riavvio del terminale non mette in crisi i miei EA, ma stare senza connessione per un'ora sì!

V

 
Viffer:

Fortunatamente, ho cambiato broker e non ho avuto alcun problema con il mio attuale fornitore... quindi lavorare di più su questo è in fondo alla lista delle priorità.

Non ho ancora visto questo con il mio broker, quindi potrebbe davvero accadere solo con alcuni broker. La connessione si perde a volte per qualche secondo una o due volte al giorno, ma si ricollega sempre immediatamente.


Per mettere insieme velocemente un'applicazione esterna che può monitorare e controllare a distanza un'altra applicazione di Windows (cliccando sui pulsanti, menu di comando, ecc.) raccomando AutoIT. È un linguaggio di scripting BASIC facile da imparare che è molto incentrato esattamente su questo tipo di cose.

 
7bit:

Non ho ancora visto questo con il mio broker, quindi potrebbe davvero accadere solo con alcuni broker. La connessione si perde a volte per alcuni secondi una o due volte al giorno, ma si ricollega sempre immediatamente.


Per mettere insieme velocemente un'applicazione esterna che possa monitorare e controllare a distanza un'altra applicazione di Windows (cliccando sui pulsanti, con il menu, ecc.) raccomando AutoIT. È un linguaggio di scripting BASIC facile da imparare che è molto incentrato esattamente su questo tipo di cose.

Grazie per questo, lo cercherò

V

 
qjol:

la funzione IsConnected() mi fa ancora ridere, se una cosa così semplice non copre

Pensavo che il problema fosse con MT4 che ritarda init() dopo un riavvio fino a quando non è completamente connesso?


Cosa ha improvvisamente a che fare questo con IsConnected()? IsConnected() sembra funzionare come previsto. Restituisce true quando è connesso e false quando è disconnesso. Non vedo cosa ci sia di così ridicolo in questo.

 
7bit:

Pensavo che il problema fosse con MT4 che ritarda init() dopo un riavvio finché non è completamente connesso?


Cosa ha improvvisamente a che fare questo con IsConnected()? IsConnected() sembra funzionare come previsto. Restituisce true quando è connesso e false quando è disconnesso. Non vedo cosa ci sia di così ridicolo in questo.


perché

if (!IsConnected()) dovrebbe restituire false & Finché non arriva un nuovo tick IsConnected() non può essere controllato Per questo, ecco perché mi fa ridere

 
qjol:

Finché non arriva un nuovo tick IsConnected() non può essere controllato A causa di questo, ecco perché mi fa ridere

Può essere controllato, basta eseguire il controllo in un ciclo infinito. come avviare questo ciclo quando si avvia il terminale durante un'interruzione della connessione è un problema completamente separato. Una volta che hai fatto partire il tuo ciclo farà quello che ci si aspetta.

Il tuo problema non ha nulla a che fare con la funzione IsConnected(). Con lo stesso argomento potreste anche lamentarvi di Print() o Alert() o qualsiasi altra funzione che non potete chiamare perché non avete potuto avviare l'intero codice in primo luogo a causa di qualche ragione completamente diversa.