Errori, bug, domande - pagina 2377
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Sì. Qualsiasi stampa da OnInit
Grazie. Interessante, se non l'ho notato per caso, come sarebbe stato possibile scoprirlo...
ZS lo lascerei solo per gli agenti locali. Nel Cloud, si può facilmente spammare il registro in questo modo.
Grazie. Interessante, se non l'ho notato per caso, come sarebbe stato possibile scoprirlo...
ZS lo lascerei solo per gli agenti locali. Nel Cloud, si può facilmente spammare il registro in questo modo.
Quando esegui la genetica, ottimizzi secondo il tuo criterio personalizzato?
In base ai log presentati, OnTester ha restituito 0 in tutti i casi
Di solito ottimizzo secondo il mio criterio, ma qui ho provato anche il criterio personalizzato. Il risultato è lo stesso.
OnTester restituisce 0, ecco perché restituisce degli zeri nei risultati - è comprensibile. La domanda è perché restituisce "0" nell'esecuzione generale (ottimizzazione), ma nell'esecuzione singola da "zero risultati" (con gli stessi parametri) restituisce il risultato normale, il grafico, ecc. Cioè qualcosa non funziona in "Full overshoot" eppure la genetica funziona bene. Altri pensieri/idee?
Altri pensieri/idee?
Tirare tutte le informazioni del passaggio di ottimizzazione in questo modo
Forum sul trading, sistemi di trading automatico e test di strategia
MT5. TESTER DI STRATEGIA. Divergenza dei risultati dei test e dell'ottimizzazione.
fxsaber, 2017.08.22 11:06
Inserite queste linee nell'EA
E corri l'ottimizzazione. Poi eseguire una corsa singola non corrispondente.
Poi confronta i due rapporti salvati del passaggio corrispondente da Optimisation e il passaggio singolo.
Il risultato del confronto dei due rapporti rivelerà rapidamente le cause.
L'obiettivo è quello di migliorare il più possibile ciò che viene fatto, chiedo agli sviluppatori di non essere offesi da eventuali critiche.
1. Non capisco le ragioni di tali forti differenze nelle "interfacce" per le funzioni di lettura dei socket non c'è .
2. Il nome della funzione SocketIsReadable non ha nulla a che fare con ciò che effettivamente esegue:
Infatti, SocketIsReadable è analogo alla funzione ioctlsocket() con flag FIONREAD in Ws2_32.dll
3. Come può un utente che usa la funzionalità Socket* su una connessione non criptata ottenere una risposta dal server con un ritardo minimo, se il server non interrompe la connessione dopo il trasferimento dei dati?
Sì, è così che si fa:4. SocketIsReadable restituisce informazioni false.
Spegnete internet ed eseguite il codice di cui sopra.
Di conseguenza, SocketIsReadable restituisce un valore sano di 1. Meraviglie.
Sono riuscito a descrivere circa un terzo delle domande e dei problemi relativi a Socket*.
Purtroppo, ho avuto bisogno di molto tempo per controllare, descrivere e ricontrollare tutto... (in modo che non sia un fatto che ci sarà un sequel)
L'impressione generale è che o tutto è stato fatto in grande fretta, o la funzionalità Socket* è arrivata allo sviluppatore junior.
In ogni caso, la soluzione attuale è molto rozza e copre un approccio piuttosto limitato all'uso delle prese.
Di solito ottimizzo secondo i miei criteri, ma qui ho provato anche quelli standard. Il risultato è simile.
OnTester restituisce 0, ecco perché ci sono degli zeri nei risultati - è comprensibile. La domanda è perché restituisce "0" nell'esecuzione generale (ottimizzazione), ma nell'esecuzione singola da "zero risultati" (con gli stessi parametri) restituisce il risultato normale, il grafico, ecc. Cioè qualcosa non funziona in "Full overshoot" eppure la genetica funziona bene. Altri pensieri/idee?
Puoi condividere un EA (ex5 in privato) e le condizioni di ottimizzazione?
Vogliamo riprodurre il problema che hai menzionato.
Dopo la ricerca l'EA sarà irrevocabilmente cancellato
Puoi condividere l'EA (ex5 in un messaggio privato) e le condizioni di ottimizzazione?
Vogliamo riprodurre il problema che hai menzionato.
Dopo la ricerca l'EA sarà irrevocabilmente cancellato
Puoi condividere l'EA (ex5 in un messaggio privato) e le condizioni di ottimizzazione?
Vogliamo riprodurre il problema che hai menzionato.
EA sarà irrimediabilmente cancellata dopo la ricerca
Risposto in un messaggio privato.
Nell'ambito della familiarizzazione con la funzionalità di Socket* sono sorte diverse domande sull'attuale implementazione.
L'obiettivo è quello di migliorare il più possibile ciò che viene fatto, chiedo agli sviluppatori di non essere offesi da eventuali critiche.
1. Non capisco le ragioni di tali forti differenze nelle "interfacce" per le funzioni di lettura dei socket non c'è .
2. Il nome della funzione SocketIsReadable non ha nulla a che fare con ciò che effettivamente esegue:
Infatti, SocketIsReadable è analogo alla funzione ioctlsocket() con flag FIONREAD in Ws2_32.dll
3. Come può un utente che usa la funzionalità Socket* su una connessione non criptata ottenere una risposta da un server con un ritardo minimo, se il server non interrompe la connessione dopo il trasferimento dei dati?
Sì, è così che si fa:4. SocketIsReadable restituisce informazioni false.
Spegnete internet ed eseguite il codice di cui sopra.
Di conseguenza, SocketIsReadable restituisce un valore sano di 1. Meraviglie.
Sono riuscito a descrivere circa un terzo delle domande e dei problemi relativi a Socket*.
Purtroppo, ho avuto bisogno di molto tempo per controllare, descrivere e ricontrollare tutto... (in modo che non sia un fatto che ci sarà un sequel)
L'impressione generale è che o tutto è stato fatto in grande fretta, o la funzionalità Socket* è arrivata allo sviluppatore junior.
In ogni caso, la soluzione attuale è molto rozza e copre un approccio piuttosto limitato all'uso delle prese.
1. Questa è l'interfaccia.
Le funzioni TLS sono ausiliarie per supportare casi complessi. Nessun problema con l'impostazione di SocketTimeouts - questi sono i migliori da usare.
2. Svolge correttamente la sua funzione.
Non dovete essere a conoscenza dei problemi con il rilevamento della rottura della connessione TCP. È abbastanza difficile (richiede risorse a costo di chiamate extra) rilevare che una connessione è garantita per essere interrotta correttamente. Tutte le implementazioni di rete soffrono di questo problema.
La nostra implementazione di SocketIsReadible è abbastanza intelligente e ha un rilevatore di rottura. Quando rileva uno 0 byte pulito, fa il lavoro extra di controllare che il socket sia completo:
Poiché restituisce il numero di byte senza un flag di terminazione, emette 1 byte in modo che un successivo/imminente tentativo di lettura di SocketRead restituisca normalmente un errore.
Perché questo è corretto? Perché la maggior parte del codice è scritto dai programmatori in questo modo:
il risultato effettivo dell'operazione è controllato su un tentativo di lettura diretta.
3. ha bisogno di fare SocketIsReadible() prima della lettura effettiva, se non si conosce la dimensione esatta dei dati da leggere.
Il binding SocketisReadible/SocketRead vi dà la possibilità di non perdere il controllo (minimizzare a quasi zero la perdita di controllo) sul flusso di esecuzione del vostro programma. Questo evita di volare nei timeout di rete.
Sì, qualche riga di codice in più, ma non perderai il controllo per un millisecondo (circa). Sta a voi decidere cosa fare negli intervalli di assenza di dati di rete.
4. spiegato nel secondo paragrafo.
L'emissione di 1 per la stimolazione della lettura e dell'uscita come un errore di lettura.
Le vostre conclusioni sono sbagliate.
Questa è la natura del trasporto TCP/IP, dove non ci sono garanzie. Si può entrare nei buchi neri della rete anche lì sui filtri/firewall quando non c'è una parte di segnalazione TCP. Il timeout grezzo e il controllo del flusso di dati vi permettono di rilevarli e di terminare le connessioni da soli.
Abbiamo dato un'interfaccia di accesso grezzo/diretto alle funzioni di rete, comprese le implementazioni TLS. Se li usate, siete voi che dovete avvolgere correttamente le funzioni grezze in un gestore SocketIsReadible/SocketRead sicuro/controllato.
Se volete fare richieste di alto livello senza dover pensare alle minuzie, ci sono le funzioni WebRequest. Tutte le protezioni sono costruite lì dentro.