Discusión sobre el artículo "Recetas MQL5 - Creando el búfer circular para calcular rápidamente los indicadores en la ventana móvil" - página 4
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
Un gran artículo, ¡el hombre sabe programar!
¡¡¡¡¡Si la traducción al alemán no fuera tan horrible!!!!!
Hola,
Muchas gracias por el consejo. La traducción ha sido corregida.
Saludos cordiales
¡Buenos días, Vasiliy Sokolov!
Sus indicadores creados con la ayuda de la memoria cíclica muestran algo poco claro, supongo que el método ChangeValue no funciona, o tal vez he entendido algo mal?
Lo he visto. Como he comprobado los ejemplos que has proporcionado. Muestran el mismo problema que tuve cuando se trata de actualizar los valores mientras el mercado está en marcha. Compruebe el estocástico que ha proporcionado. Agregar un nuevo valor no es un problema, pero cuando tratamos de usar Stoch.ChangeLast() o OnChangeValue() en la clase CRiMaxMin, no funciona. No cambia el valor en consecuencia. Si pudieras comprobarlo o enviar un ejemplo de un código que funcione, estaría muy bien.
Gracias.
Gran trabajo aquí, muchas gracias al autor. Tal vez el error que estás viendo, Savio, está aquí:
int RingBuffer::iToRealInd(int iIndex)
{
if(iIndex >= iNumElements() || iIndex < 0)
return iBufferSize-1; //previous bug was caused by no -1 here
...
He añadido el -1 en la última línea citada; antes no estaba y provocaba que se devolviera un índice incorrecto. Ten en cuenta que cambié los nombres de las variables/métodos a mi estilo de programación pero es la misma idea.
Gran trabajo aquí, muchas gracias al autor. Tal vez el error que estás viendo, Savio, está aquí:
int RingBuffer::iToRealInd(int iIndex)
{
if(iIndex >= iNumElements() || iIndex < 0)
return iBufferSize-1; //previous bug was caused by no -1 here
...
He añadido el -1 en la última línea citada; antes no estaba y provocaba que se devolviera un índice incorrecto. Ten en cuenta que he cambiado los nombres de las variables/métodos a mi estilo de programación pero es la misma idea
He probado tu corrección, pero sigue sin actualizarse bien. Parece que hay algo que falta y no puedo encontrar el problema cuando se trata de ejecutar el búfer de anillo en la formación de una nueva barra. Cuando el mercado se está ejecutando, las líneas High/Low se mezclan completamente. El código funciona muy bien y muy rápido mientras procesa datos antiguos, pero con los nuevos datos que llegan durante la formación de una nueva barra, simplemente no me funciona.
Si se me permite hacer algunos comentarios:
1. En la clase void CRiMaxMin::OnChangeValue(int index, double del_value, double new_value), en el método " OnChangeValue " en la línea
.
Imagen:
errata - signo "menor o igual que".

2.Cuando se buscan los elementos Min y Max de un array, si se utiliza exactamente como un buffer anular (cuando se empiezan a escribir nuevos elementos al principio del array), min y mah se definen incorrectamente. El mínimo es mayor que el máximo. En un array. Todo funciona usando los métodos estándar (ArrayMinimum y ArrayMaximum).
Picture:
En algún sitio la indexación va por mal camino. No puedo arreglarlo yo mismo. Si alguien puede arreglarlo, sería genial. He adjuntado un asesor de prueba.
Tienes un error en ToRealInd(int index).
Debería ser