Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Realicé una pequeña prueba de estrés. Apagué el Internet, puso en marcha el indicador con el panel en el gráfico. Ya he proporcionado los parámetros anteriores. Luego encendí Internet y obtuve el siguiente resultado:
El indicador se estrelló.
También he notado algo extraño. Gráfico M15 en USDCHF.
Si nos fijamos en el gráfico USDCHF, o más bien en la curva roja del indicador MA(USDCHF, H1), durante las últimas 7 horas la transición al siguiente valor se produjo a las 00 minutos 5 veces. Lo he resaltado con verticales rojas. Y sólo para las últimas 2 horas todo es normal. Verticales azules. Imho, un claro error con el llenado de búfer....
Realicé una pequeña prueba de estrés. Apagué el Internet, puso en marcha el indicador con el panel en el gráfico. Ya he proporcionado los parámetros anteriores. Luego encendí el Internet y obtuve el siguiente resultado:
El indicador se estrelló.
También me di cuenta de algunas cosas extrañas. Gráfico M15 en USDCHF.
Si nos fijamos en el gráfico USDCHF, o más bien en la curva roja del indicador MA(USDCHF, H1), durante las últimas 7 horas la transición al siguiente valor se produjo a las 00 minutos 5 veces. Lo he resaltado con verticales rojas. Y sólo para las últimas 2 horas todo es normal. Verticales azules. Imho, un claro error con el llenado de búfer....
Realicé una pequeña prueba de estrés. Apagué el Internet, puso en marcha el indicador con el panel en el gráfico. Ya he proporcionado los parámetros anteriores. Luego encendí el Internet y obtuve el siguiente resultado:
El indicador se estrelló.
En la línea 211, en la posición 34 del cursor, se accede al array predefinido time[]:
DrawData(mouse_bar_index,time[mouse_bar_index]);Resulta que el índice pasado al array es incorrecto.
Difícilmente puede ser mayor que rates_total-1, lo más probable es que sea igual a -1, porque recibe sus valores en el manejador OnChartEvent por la función iBarShift(), que puede devolver -1:
En DrawData(), un valor de índice inválido se maneja llamando a CopyRates(), que no obtendrá ningún dato si el índice es negativo, y entonces saldrá de DrawData():
Así que - antes de acceder al array time[], es necesario comprobar el índice de barra pasado al array (en la línea 211):
En general - teoría. No lo he probado, ya que estoy ocupado desarrollando la continuación del tema (buffers de colores de multi-indicadores y así sucesivamente). Después de que se publique el próximo artículo sobre este tema, lo comprobaré y probaré (si no lo pruebas antes que yo con los cambios en p.211).
En la línea 211, se accede a la matriz predefinida time[] en la posición 34 del cursor:
Parece que el índice del array se pasa incorrectamente.
Difícilmente puede ser mayor que rates_total-1, lo más probable es que sea igual a -1, porque recibe sus valores en el manejador OnChartEvent por la función iBarShift(), que puede devolver -1:
En DrawData(), un valor de índice inválido se maneja llamando a CopyRates(), que no obtendrá ningún dato si el índice es negativo, y entonces saldrá de DrawData():
Así que - antes de acceder a la matriz time[], es necesario comprobar el índice de barra pasado a la matriz (en la línea 211):
En general - teoría. No lo he probado, ya que estoy ocupado desarrollando la continuación del tema (buffers de colores de multiindicadores y demás). Después de la publicación del próximo artículo sobre este tema, voy a comprobar y probar (si no lo prueba antes que yo con los cambios en la p.211).
Artem, el índice de barra puede ser actual, iBarShift() devuelve 0. Pero no se puede poner menos de 1 en CopyRates(). Por eso probablemente deberíamos escribir iBarShift()+1 en cualquier variante, ya que el número de barra y el número de barras no son iguales.
Artem, el índice de barra puede ser actual, iBarShift() devuelve 0. Pero no se puede poner menos de 1 en CopyRates(). Por lo tanto, probablemente deberíamos escribir iBarShift()+1 en cualquier variante, ya que el número de barra y el número de barras no son iguales.
En este contexto: el índice es el número de compás
En este contexto: el índice es el número de compás
Artem, índice - sí, puede ser cero. Pero el número de elementos copiados
no puede ser igual a cero.
Al igual que el número de elementos y el índice en la lista de elementos ...
Artem, el índice - sí, puede ser cero. Pero el número de elementos copiados
no puede ser igual a cero.
Al igual que el número de elementos y el índice en la lista de elementos ...
Justo aquí:
¿dónde apunta el índice?
Está aquí mismo:
¿dónde apunta el índice?
Ya está, me callo. No miré el código de la función DrawData(mouse_bar_index,time); por eso me equivoqué...
Foro sobre negociación, sistemas automatizados de negociación y ensayo de estrategias de negociación
Discusión del artículo "Preparación de indicadores multisímbolo multiperiodo"
Artyom Trishkin, 2023.11.01 04:46 AM
...Después de publicar el próximo artículo sobre este tema, voy a comprobar y probar (si no me prueba antes con los cambios en p.211).
Para probar algo, hay que estar en el paradigma de lo que pasa ))
Me di cuenta de que es más fácil para mí esbozar mi propia versión, ya que no estoy cerca del enfoque actual. En concreto, me parece que la clase CIndMSTF es una especie de superclase. A partir de ella se crean un montón de clases indicadoras. Creepy - el archivo IndMSTF.mqh es 4 mil líneas de código )) Tomé el camino de usar una instancia de la clase CIndicators como una colección de indicadores . Es muy conveniente. No hace falta inventar una bicicleta.
Entonces, ¿por qué la clase CIndMSTF debe almacenar los datos en buffers (SBuffer m_buffers[])? Los calculamos una vez en OnCalculate() y es suficiente. Es decir, aceptados como parámetro por referencia, calculados y dados....
Escribiré más tarde sobre lo que no estoy de acuerdo una vez termine mi versión....
Sí, me gusta que exista este mecanismo:
...При работе с данными не текущего графика для исключения "освобождения" таймсерии, необходимо не реже. чем раз в две минуты обращаться к этой таймсерии. В этом случае будет происходить "удержание" таймсерии, что ускорит к ней обращение (не нужно будет каждый раз дожидаться синхронизации данных)...
Artem, una cosa más. Si los artículos están escritos como un manual, que hay un deseo de estudiar, entonces, imho, no hay suficientes esquemas de relaciones de esas clases, que el desarrollador crea....
Entonces, ¿por qué poner el código de todos los indicadores en el material del artículo? Me refiero a esta sección - "Una lista completa de todas las clases herederas de la clase base del indicador multiperiodo multisímbolo". Miré cuántas líneas de código hay.
Aquí está el principio:
Y aquí está el final:
Casi 2 mil. ¡Vaya!