Discusión sobre el artículo "20 señales de trading en MQL5" - página 3

 

Aquí tengo una pregunta práctica.

¿Por qué es necesario comprobar el mango del indicador de discapacidad en cada llamada de CopyBuffer()? En mi EA hice este procedimiento una vez (con la llegada del primer tick, después de comprobar la sincronización de datos), y más tarde empecé a recibir el error 4807 Error indicator handle. CSymTotal=7. Las asas se recibieron en una matriz:

      for (int i=0;i<CSymTotal;i++)
      {
      H_Ind[i]=iSAR(CSymList[i],PSARTF,PSARStep,PSARMax);
      }
La comprobación de impresión muestra que los siete H_Ind[0..6] tienen valores 10..15 respectivamente, es decir, diferentes de -1. Los handles parecen válidos, pero en respuesta a CopyBuffer(H_Ind[0-6]...) obtengo CopyBuffer=-1, LastError=4807(!!!).A veces va normal, y a veces obtiene errores.

Después introduje comprobaciones como en este artículo,

   if(H_Ind[CSymListItem]==INVALID_HANDLE)//--- si el manejador no es válido
     {
      //--- создадим его снова                                                      
      H_Ind[CSymListItem]=iSAR(CSymList[CSymListItem],PSARTF,PSARStep,PSARMax);
      //--- salir de la función
      return(0);
     }
   else
     {
      cb=CopyBuffer(H_Ind[CSymListItem],0,0,BarsCheck,PSARBuffer);
...

hasta ahora todo funciona correctamente. Misterio...

No entiendo cuál es mi fallo.... Y lo más importante, ¿por qué es necesario comprobar la validez del handlecada vez que uso CopyBuffer() y lo creo de nuevo? ¿No se guarda hasta que el Asesor Experto termina su trabajo? ¿Es una necesidad en general, o es sólo para la conveniencia del ejemplo?

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

Aquí tengo una pregunta práctica.

¿Por qué es necesario comprobar el mango del indicador de discapacidad en cada llamada de CopyBuffer()? En mi EA hice este procedimiento una vez (con la llegada del primer tick, después de comprobar la sincronización de datos), y más tarde empecé a recibir el error 4807 Error indicator handle. CSymTotal=7. Las asas se recibieron en una matriz:

La comprobación de impresión muestra que los siete H_Ind[0..6] tienen valores 10..15 respectivamente, es decir, diferentes de -1. Los handles parecen válidos, pero en respuesta a CopyBuffer(H_Ind[0-6]...) obtengo CopyBuffer=-1, LastError=4807(!!!).A veces va normal, y a veces obtiene errores.

Después introduje comprobaciones como en este artículo,

hasta ahora todo funciona correctamente. Misterio...

No entiendo cuál es mi fallo.... Y lo más importante, ¿por qué es necesario comprobar la validez del handlecada vez que uso CopyBuffer() y lo creo de nuevo? ¿No se guarda hasta que el Asesor Experto termina su trabajo? ¿Es una necesidad en absoluto, o es sólo para la conveniencia del ejemplo?

en mis ejemplos la condición es la siguiente: si el handle es válido, procedemos a copiar los datos. si no, creamos de nuevo el indicador y salimos de esta función, ya que el cálculo del indicador lleva su tiempo. lo mismo ocurre con la copia, durante la copia el indicador puede recalcularse, por lo que CopyBuffer() devuelve -1, en cuanto los datos estén listos la función hará su trabajo, por eso es necesario comprobarlo todo.
 

En general, la pregunta debería formularse de forma más amplia:

¿Qué comprobaciones, condiciones o retardos deberían introducirse ANTES y DESPUÉS de CopyBuffer(), para obtener GARANTIZADAMENTE esos valores de indicador 400(0), que necesito ahora(!), en siete (diez) instrumentos en condiciones de máxima velocidad (en un bucle)?

Pues, return(0) = "ah, bueno, no funcionó ahora, tal vez la próxima vez funcione...".

Aquí, por cierto, el resto de Copy está al lado...

PD. Quizás ya sea off-topic. Bueno, la pregunta no es para el autor, sino para todo aquel que pueda aclararlo...

 
sergey1294:
En mis ejemplos la condición es la siguiente: si el handle es válido, procedemos a copiar los datos. si no, creamos de nuevo el indicador y salimos de esta función, ya que el cálculo del indicador lleva su tiempo. lo mismo ocurre con la copia, durante la copia el indicador puede recalcularse, por lo que CopyBuffer() devuelve -1, en cuanto los datos estén listos la función hará su trabajo, por eso es necesario comprobarlo todo.

Sí, Sergey, lo entiendo. No pretendía hacer sombra al artículo ni al autor. El artículo es excelente. No es una queja, sino un intento de encontrar una respuesta. Es simplemente la discusión más cercana que he encontrado sobre el tema. Probablemente a ti también te gustaría saber la respuesta con más precisión, ¿no? )

¿Quizás deberíamos ponerlo en un hilo aparte?

 
pronych:

¿Quizás ponerlo en un hilo aparte?

https://www.mql5.com/ru/forum/1880.

Aquí, ponlo en el tema. Sergey, te pido disculpas por salirme del tema del artículo. Estaré encantado...)))

ДО и ПОСЛЕ CopyBuffer(..)
ДО и ПОСЛЕ CopyBuffer(..)
  • www.mql5.com
Какие проверки, условия, или задержки надо внести ДО и ПОСЛЕ CopyBuffer(), для того, чтоб, ГАРАНТИРОВАННО получить те 400(0) значений индикатора, которые необходимы сейчас(!
 
Nos gusta mucho este artículo. Hasta ahora hemos creado 10 asesores expertos con nuestro software visual wizard usando esas señales. Puede verlos aquí: 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...
 
He intentado descargar algunos EAs pero sin éxito.
 

¡¡¡¡¡¡deseo que alguien puede dar 20 métodos para la gestión del dinero!!!!!!

 

Para este artículo, la idea es muy buena. Pero has olvidado el concepto de OOP y programación en general: ABSTRACCIÓN. Dentro de sus funciones son hard-coded inicators, símbolo actual, período actual, los parámetros del indicador. La idea es buena, pero no se aplica plenamente, está lejos de la perfección. Por ejemplo - quiero comprobar el cruce de líneas indicadoras, cada una de ellas de un marco de tiempo diferente y de diferentes símbolos - esa es una. En segundo lugar - ¿qué pasa con sus funciones si el terminal pierde temporalmente la conexión con el servidor y se perdió las tres barras que está procesando? Hay una señal, pero se pierde la entrada. La búsqueda de una señal debe realizarse con una CARGA. Luego hay que comprobar si la señal ya ha sido procesada. Puede tener tantas intersecciones que usted mismo se sorprenderá. Basta con pasar parámetros (número de indicador, símbolo, marco temporal, inicio de búsqueda, fin de búsqueda, línea de indicador...) a las funciones. - y usted hará su sistema más flexible y el Asesor Experto será capaz de ver lo que es inaccesible para los seres humanos - la intersección de las líneas de diferentes símbolos y diferentes marcos de tiempo. Esto es mucho mejor que las funciones dadas aquí. También necesita trabajar el concepto de nombrar variables - tiene demasiadas variables con nombres que no significan nada - pero esto es un tema aparte. Esto se llama estilo de programación. Cada uno tiene su propio estilo. Pero veo que poco a poco te vas acercando a los conceptos que traté de usar en MT4 - eso es muy alentador.

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

Para este artículo, la idea es muy buena. Pero has olvidado el concepto de OOP y programación en general: ABSTRACCIÓN. Dentro de sus funciones son hard-coded inicators, símbolo actual, período actual, los parámetros del indicador. La idea es buena, pero no se aplica plenamente, está lejos de la perfección. Por ejemplo - quiero comprobar el cruce de líneas indicadoras, cada una de ellas de un marco de tiempo diferente y de diferentes símbolos - esa es una. En segundo lugar - ¿qué pasa con sus funciones si el terminal perdió temporalmente la conexión con el servidor y se perdió los tres bares que está procesando? Hay una señal, pero se pierde la entrada. La búsqueda de una señal debe realizarse con una CARGA. Luego hay que comprobar si la señal ya ha sido procesada. Puede tener tantas intersecciones que usted mismo se sorprenderá. Basta con pasar parámetros (número de indicador, símbolo, marco temporal, inicio de búsqueda, fin de búsqueda, línea de indicador...) a las funciones. - y usted hará su sistema más flexible y el Asesor Experto será capaz de ver lo que es inaccesible para los seres humanos - la intersección de las líneas de diferentes símbolos y diferentes marcos de tiempo. Esto es mucho mejor que las funciones dadas aquí. También necesita trabajar el concepto de nombrar variables - tiene demasiadas variables con nombres que no significan nada - pero esto es un tema aparte. Esto se llama estilo de programación. Cada uno tiene su propio estilo. Pero veo que poco a poco se están acercando a los conceptos que traté de utilizar en MT4 - esto es muy alentador.

El artículo fue escrito de acuerdo a la tarea técnica, Si desea comprobar la intersección, que le impide hacerlo.