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
Ho una domanda pratica.
Perché è necessario verificare l'invalidità dell'indicatore ad ogni chiamata di CopyBuffer()? Nel mio EA ho eseguito questa procedura una volta (con l'arrivo del primo tick, dopo aver controllato la sincronizzazione dei dati), e successivamente ho iniziato a ricevere l'errore 4807 Error indicator handle. CSymTotal=7. Gli handle sono stati ricevuti in un array:
Il controllo di stampa mostra che tutti e sette gli H_Ind[0..6] hanno rispettivamente valori 10..15, cioè diversi da -1. Gli handle sembrano validi, ma in risposta a CopyBuffer(H_Ind[0-6]...) ottengo CopyBuffer=-1, LastError=4807(!!!).A volte va normalmente, altre volte riceve errori.Dopo aver introdotto controlli come in questo articolo,
finora tutto funziona correttamente. Mistero...
Non capisco quale sia il mio errore.... E soprattutto, perché è necessario verificare la validità dell'handleogni volta che utilizzo CopyBuffer() e lo creo di nuovo? Non viene salvato finché l'Expert Advisor non termina il suo lavoro? È una necessità in generale o è solo per la comodità dell'esempio?
Ho una domanda pratica.
Perché è necessario verificare l'invalidità dell'indicatore ad ogni chiamata di CopyBuffer()? Nel mio EA ho eseguito questa procedura una volta (con l'arrivo del primo tick, dopo aver controllato la sincronizzazione dei dati), e successivamente ho iniziato a ricevere l'errore 4807 Error indicator handle. CSymTotal=7. Gli handle sono stati ricevuti in un array:
Il controllo di stampa mostra che tutti e sette gli H_Ind[0..6] hanno rispettivamente valori 10..15, cioè diversi da -1. Gli handle sembrano validi, ma in risposta a CopyBuffer(H_Ind[0-6]...) ottengo CopyBuffer=-1, LastError=4807(!!!).A volte va normalmente, altre volte riceve errori.Dopo aver introdotto controlli come in questo articolo,
finora tutto funziona correttamente. Mistero...
Non capisco quale sia il mio errore.... E soprattutto, perché è necessario verificare la validità dell'handleogni volta che utilizzo CopyBuffer() e lo creo di nuovo? Non viene salvato finché l'Expert Advisor non termina il suo lavoro? È una necessità o è solo per la comodità dell'esempio?
In generale, la domanda dovrebbe essere formulata in modo più ampio:
Quali controlli, condizioni o ritardi dovrebbero essere introdotti PRIMA e DOPO CopyBuffer(), al fine di ottenere GARANTISAMENTE quei valori dell'indicatore 400(0), di cui ho bisogno ora(!), su sette (dieci) strumenti in condizioni di massima velocità (in un ciclo)?
Infatti, return(0) = "ah, beh, non ha funzionato ora, forse la prossima volta funzionerà...".
Qui, tra l'altro, il resto del Copy è accanto...
PS. Forse è già off-topic. Beh, la domanda non è per l'autore, ma per tutti coloro che possono chiarire...
Nei miei esempi la condizione è la seguente: se l'handle è valido, si procede alla copia dei dati. in caso contrario, si crea nuovamente l'indicatore e si esce da questa funzione, poiché il calcolo dell 'indicatore richiede tempo. lo stesso accade con la copia, durante la quale l'indicatore può essere ricalcolato, quindi CopyBuffer() restituisce -1, non appena i dati sono pronti la funzione farà il suo lavoro, ecco perché è necessario controllare tutto.
Sì, Sergey, capisco. Non intendevo gettare ombra sull'articolo o sull'autore. L'articolo è eccellente. Non è una lamentela, ma un tentativo di trovare una risposta. È solo la discussione più vicina che ho trovato sull'argomento. Ti piacerebbe conoscere la risposta in modo più preciso, vero? )
Forse dovremmo inserirla in un thread separato?
Magari inserirlo in un thread separato?
https://www.mql5.com/ru/forum/1880.
Ecco, inseriscilo nell'argomento. Sergey, mi scuso per essere andato oltre lo scopo dell'articolo. Ne sarò lieto...)))
desiderio qualcuno può dare 20 metodi per la gestione del denaro!!!!!!
Per questo articolo, l'idea è molto buona. Ma avete dimenticato il concetto di OOP e di programmazione in generale: l'ASSTRATTIVITÀ. All'interno delle vostre funzioni ci sono indicatori codificati, simbolo corrente, periodo corrente, parametri dell'indicatore. L'idea è buona, ma non è completamente implementata, è lontana dalla perfezione. Ad esempio, voglio controllare l'incrocio delle linee di un indicatore, ognuna di esse da un timeframe diverso e da simboli diversi - questo è uno. In secondo luogo, cosa succede alle vostre funzioni se il terminale perde temporaneamente la connessione con il server e perde proprio le tre barre che state elaborando? Il segnale c'è, ma l'input è stato perso. La ricerca del segnale deve essere effettuata con un CHARGE. Poi si deve controllare se il segnale è già stato elaborato. Potreste avere così tante intersezioni da rimanere sorpresi. È sufficiente passare alle funzioni dei parametri (numero dell'indicatore, simbolo, timeframe, inizio della ricerca, fine della ricerca, linea dell'indicatore...). - In questo modo renderete il vostro sistema più flessibile e l'Expert Advisor sarà in grado di vedere ciò che è inaccessibile agli esseri umani: l'intersezione di linee di diversi simboli e di diversi timeframe. Questo è molto meglio delle funzioni fornite qui. Dovete anche risolvere il concetto di denominazione delle variabili - avete troppe variabili con nomi che non hanno alcun significato - ma questo è un argomento a parte. Questo si chiama stile di programmazione. Ognuno ha il suo stile. Ma vedo che ti stai lentamente avvicinando ai concetti che ho cercato di utilizzare in MT4 - questo è molto incoraggiante.
Per questo articolo, l'idea è molto buona. Ma avete dimenticato il concetto di OOP e di programmazione in generale: l'ASSTRATTIVITÀ. All'interno delle vostre funzioni ci sono indicatori codificati, simbolo corrente, periodo corrente, parametri dell'indicatore. L'idea è buona, ma non è completamente implementata, è lontana dalla perfezione. Ad esempio, voglio controllare l'incrocio delle linee di un indicatore, ognuna di esse da un timeframe diverso e da simboli diversi - questo è uno. In secondo luogo, cosa succede alle vostre funzioni se il terminale perde temporaneamente la connessione con il server e perde proprio le tre barre che state elaborando? Il segnale c'è, ma l'input è stato perso. La ricerca del segnale deve essere effettuata con un CHARGE. Poi si deve controllare se il segnale è già stato elaborato. Potreste avere così tante intersezioni da rimanere sorpresi. È sufficiente passare i parametri (numero dell'indicatore, simbolo, timeframe, inizio della ricerca, fine della ricerca, linea dell'indicatore...) alle funzioni. - In questo modo renderete il vostro sistema più flessibile e l'Expert Advisor sarà in grado di vedere ciò che è inaccessibile agli esseri umani: l'intersezione di linee di diversi simboli e di diversi timeframe. Questo è molto meglio delle funzioni fornite qui. Dovete anche risolvere il concetto di denominazione delle variabili - avete troppe variabili con nomi che non hanno alcun significato - ma questo è un argomento a parte. Questo si chiama stile di programmazione. Ognuno ha il suo stile. Ma vedo che lentamente si stanno avvicinando ai concetti che ho cercato di utilizzare nella MT4 - questo è molto incoraggiante.