Discussione sull’articolo "20 Segnali di Trading in MQL5" - pagina 3

 

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:

      for (int i=0;i<CSymTotal;i++)
      {
      H_Ind[i]=iSAR(CSymList[i],PSARTF,PSARStep,PSARMax);
      }
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,

   if(H_Ind[CSymListItem]==INVALID_HANDLE)//--- se l'handle non è valido
     {
      //--- создадим его снова                                                      
      H_Ind[CSymListItem]=iSAR(CSymList[CSymListItem],PSARTF,PSARStep,PSARMax);
      //--- uscire dalla funzione
      return(0);
     }
   else
     {
      cb=CopyBuffer(H_Ind[CSymListItem],0,0,BarsCheck,PSARBuffer);
...

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?

Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
  • www.mql5.com
Получение рыночной информации / SymbolIsSynchronized - Документация по MQL5
 
pronych:

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?

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.
 

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...

 
sergey1294:
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?

 
pronych:

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...)))

ДО и ПОСЛЕ CopyBuffer(..)
ДО и ПОСЛЕ CopyBuffer(..)
  • www.mql5.com
Какие проверки, условия, или задержки надо внести ДО и ПОСЛЕ CopyBuffer(), для того, чтоб, ГАРАНТИРОВАННО получить те 400(0) значений индикатора, которые необходимы сейчас(!
 
Ci piace molto questo articolo. Finora abbiamo creato 10 expert advisor con il nostro software visual wizard utilizzando questi segnali. Potete vederli qui: http://www.molanis.com/products/expert-advisor-visual-wizard/expert-advisors-mt5
Expert Advisors for MT5 - Examples
  • Molanis Marketing
  • www.molanis.com
Please note that these Expert Advisors were created for educational purposes and do not constitute any financial advice. Before using the following EAs, please take into account the following: THE DOWNLOAD FILES ARE IN MOL5 FORMAT (MOLANIS 5 FORMAT - A .MOL5 FILE FOR THE EA VISUAL WIZARD). TO OBTAIN THE EA FOR MT5, DOWNLOAD THE STRATEGY...
 
Ho provato a scaricare alcuni EA ma senza successo.
 

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.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов - Документация по MQL5
 
1CMaster:

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.

L'articolo è stato scritto in base al compito tecnico, se volete controllare l'intersezione, chi vi impedisce di farlo.