Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 985
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
do { ... código de llenado del buffer
}
mientras(estos dos valores no coinciden)
en resumen, obtener los valores en el bucle hasta que coincidan, sólo entonces ejecutar el siguiente códigodo { ... código de llenado del buffer
}
mientras(estos dos valores no son iguales)
En resumen, obtener los valores en el bucle, hasta que sean iguales, sólo entonces ejecutar el siguiente códigoLa cuestión es que hasta que no funcione un indicador, los datos (flujo) no se pasan al otro, es decir, el bucle del indicador sinOnCalculate de este indicador no servirá. Y en cuanto termina OnCalculate, los datos se pasan al Asesor Experto, y son erróneos.
O tal vez no entiendo su idea.Así, el punto es que hasta que un indicador funcione, los datos (flujo) no se transfieren a otro, es decir, el bucle en el indicador sin la terminación de OnCalculate de este indicador no ayudará.
recibes los valores de los buffers de otros indicadores uno a uno, si su número no es el mismo, los obtienes de nuevo hasta que sea el mismo, olvídate de los flujos. Pero en general, nadie lo hace de esta manera - es muy lento
Entonces, el punto es que hasta que un indicador funcione, los datos (flujo) no se pasan a otro, es decir, el bucle en el indicador sin OnCalculate de este indicador no servirá. Pero en cuanto termina OnCalculate, los datos se pasan al Asesor Experto, y son erróneos.
O no entiendo su idea.necesitas que se cumpla la condición, entonces sólo se llenarán los buffers, según entiendo (el número de barras en los buffers de otros indicadores será el mismo)
cumplir forzosamente todas las condiciones antes de llenar los búferes del indicador actual
o devolvérsela al programador equivocado: ¿por qué debemos resolver sus problemas en el campo equivocado?
obtienes los valores de los buffers de otros indicadores uno por uno, si su número no es el mismo, los obtienes de nuevo hasta que sea el mismo, olvídate de los flujos. pero en general, nadie lo hace así - es una perversión de los indicadores de los indicadores, muy lento
necesitas que se cumpla la condición, entonces sólo se llenarán los buffers, según tengo entendido (el número de barras en los buffers de otros indicadores será el mismo)
Ejecución forzada de todas las condiciones antes de que se llenen los buffers del indicador actual
o devolvérsela al programador con mala mano, ¿por qué debemos resolver sus problemas en el lugar equivocado?
Si el cálculo no está listo desde otros indicadores, los valores serán cero, por lo que no tiene sentido forzar el llenado aquí, se pueden llenar los datos pasados, pero con el mismo efecto, se pueden solicitar datos no para la barra actual del indicador, sino para la pasada y entonces el código no debe ser cambiado en absoluto.
¿Por qué estamos discutiendo aquí? Porque la situación en el probador y en la cuenta real es diferente, la simulación de Sleep funciona muy extraño, y el recálculo del indicador para 15 segundos de deslizamiento se produce sólo una vez, mientras que debe ocurrir en cada tic, o en la solicitud, y se produce no en 15 segundos, pero en 13, de acuerdo con el registro.
Además, el problema de la sincronización es relevante, y sería bueno añadir para tales situaciones la posibilidad de informar al indicador sobre la necesidad de pasar el flujo de datos a otros indicadores, sin lo cual es imposible realizar más cálculos - esto sería una solución - el comando para pasar el flujo a otro indicador sin completar el cálculo.
Respectivamente, el Asesor Experto debería esperar los datos del indicador y saltarse los ticks hasta que se realice el cálculo completo; ahora, al intentar utilizar la sentencia "while", el resultado del cálculo se cuelga/se queda parado (es decir, no pasa nada, el probador se queda parado), y eso tampoco es correcto.
Por supuesto, he informado al desarrollador, pero no he tenido noticias suyas en más de un mes: el coste de ser autónomo.
la situación en el probador y en la cuenta real es diferente, la simulación del sueño funciona muy extraño, y el recálculo del indicador de 15 segundos de deslizamiento se produce sólo una vez, mientras que debería ocurrir en cada garrapata, o en la demanda, pero no se produce en 15 segundos, pero en 13, de acuerdo con el registro.
Además, el problema de la sincronización es relevante, y sería bueno añadir para tales situaciones la posibilidad de informar al indicador sobre la necesidad de pasar el flujo de datos a otros indicadores, sin lo cual es imposible realizar más cálculos - esto sería una solución - el comando para pasar el flujo a otro indicador sin completar el cálculo.
Respectivamente, el Asesor Experto debería esperar los datos del indicador y saltarse los ticks hasta el final del cálculo completo, pero ahora, al intentar usarla sentencia "while" para esperar los resultados correctos del cálculo, se congela/se queda parado (es decir, no pasa nada, el probador se queda parado), y esto tampoco es correcto.
EstimadoArtyom Trishkin
Espero que, puesto que han determinado que las preguntas anteriores son para principiantes, ya sepan la respuesta y puedan ayudarme.
Estoy esperando la respuesta de un profesional.
EstimadoArtyom Trishkin
Espero que, puesto que han determinado que las preguntas anteriores son para principiantes, ya sepan la respuesta y puedan ayudarme.
Estoy esperando la respuesta de un profesional.
El único consejo que puedo dar es el siguiente: el indicador debería salir de OnCalculate() si no ha recibido el número de barras requerido para el cálculo: if(rates_total<number of_bars required) return 0;
El Asesor Experto debe comprobar los datos recibidos del indicador, y si no son iguales al valor vacío del indicador, sólo entonces realizar los cálculos con los datos recibidos.
... ... ...
Sólo puedo aconsejar: el indicador debe salir de OnCalculate() si no obtuvo el número correcto de barras para el cálculo: if(rates_total<number_of_bars required) return 0;
Gracias por el consejo, no hay problema con la salida, pero no resuelve la situación, lo he hecho como un cálculo fallido por ahora
Y de alguna manera llena los buffers y obtiene datos de otros indicadores y los datos no se pasan al EA hasta que se cumpla una condición. Todavía no he comprobado la exactitud de los datos, pero parece correcto. ¿O tal vez me equivoque y algo esté definitivamente mal?
El Asesor Experto debe comprobar los datos recibidos del indicador y si no son iguales al valor vacío del indicador, sólo entonces realiza los cálculos con los datos recibidos.
El Asesor Experto realiza los cálculos uno a la llegada de una nueva barra, y respectivamente, el intento de esperar el valor correcto del indicador conduce a una parada del probador.
... ... ...
1. Es cierto.
2. Y así sucede. Este cálculo será correcto en el siguiente tick, pero quiero recibir el cálculo correcto en el primer tick, porque el Asesor Experto no espera en el bucle otros ticks o la expectativa no es conmensurable con mi paciencia, es decir, no es realista - hay un error.
3.
4. Por supuesto.
5. Sí, lo hacemos, pero el indicador necesita recibir datos de otros indicadores y ese es el problema.
6. 1-2. no es correcto poner deliberadamente datos falsos en el búfer del indicador, sólo complicará la detección del error del algoritmo en el código del Asesor Experto.
7. Estoy describiendo todo lógicamente, pero yo no escribí el indicador, por lo que es difícil para mí entender cuál es la razón, describí la manifestación razonable del indicador, a saber, la incapacidad de realizar un cálculo sin recibir los valores de búfer de otros indicadores, debido al monopolio del flujo de datos (los indicadores se calculan secuencialmente).
8. Ya he señalado aquí y antes que no soy el autor, que he dedicado mucho tiempo -casi un día- a identificar las razones.
9. Y estoy buscando una solución al problema, además, si alguien se ha enfrentado a esto, puede ayudarme rápidamente. Repito, en ese hilo empecé a escribir por lo del Sueño, y luego salieron las otras características del probador, que también creo el error.
Gracias por la respuesta.
Gracias por el consejo, no hay problema con la salida, pero no resuelve la situación, he hecho como un cálculo fallido hasta ahora
Y de alguna manera llena los buffers y obtiene datos de otros indicadores, los datos no se pasan al EA hasta que se cumpla la condición. Todavía no he comprobado la exactitud de los datos, pero parece correcto. ¿O tal vez me equivoque y algo esté definitivamente mal?
El Asesor Experto realiza el cálculo solo cuando llega una nueva barra y por lo tanto, al tratar de esperar el valor correcto del indicador, lleva a una detención del probador.
1. lo hace.
Y así es. 2. Este cálculo será correcto en el siguiente tick, pero necesito obtener un cálculo correcto en el primer tick, porque mi Asesor Experto no espera en el bucle otros ticks o la expectativa no es conmensurable con mi paciencia, es decir, no es realista - hay un error.
3.
4. Por supuesto.
5. Sí, lo hacemos, pero el indicador necesita recibir datos de otros indicadores y ese es el problema.
6. 1-2. no es correcto poner deliberadamente datos falsos en el búfer del indicador, sólo complicará la detección del error del algoritmo en el código del Asesor Experto.
7. Estoy describiendo todo lógicamente, pero yo no escribí el indicador, por lo que es difícil para mí entender cuál es la razón, describí la manifestación razonable del indicador, a saber, la incapacidad de realizar un cálculo sin recibir los valores del buffer de otros indicadores, debido al monopolio del flujo de datos (los indicadores se calculan secuencialmente).
8. Ya he señalado aquí y antes que no soy el autor, pasé mucho tiempo - casi un día - para identificar las causas.
9. Y estoy buscando una solución al problema, además, si alguien se ha enfrentado a esto, puede ayudarme rápidamente. Repito, en ese hilo empecé a escribir por lo del Sueño, y luego salieron las otras características del probador, que también creo el error.
Gracias por la respuesta.
En OnInit() llame a la serie temporal del símbolo: iTime(Symbol,Timeframe,1);
Al principio, en OnTick(), pida la barra requerida de la serie de tiempo requerida usando el correspondiente iFunc(), o si( iTime(Symbol,Timeframe,10)==0) retorne;
En este caso, el Asesor Experto no detectará una nueva barra y esperará al siguiente tick.
En OnInit() hemos solicitado los datos de la serie temporal, activando así la paginación de datos.
En OnTick() comprobamos si el historial mínimamente necesario está disponible para el EA y si aún no lo está, esperamos al siguiente tick.
Y hasta que se reciban todos los datos requeridos por el Asesor Experto, éste esperará al siguiente tick.
Tan pronto como se bombeen y obtengan todos los datos necesarios, el Asesor Experto comenzará a trabajar con la nueva barra y el historial requerido.
Para mantener los datos en serie actualizados, es imprescindible acceder a ellos al menos una vez cada dos minutos. Haga un segundo temporizador de aproximadamente un minuto y medio (90 segundos) y en él simplemente haga referencia a cualquier serie de tiempo del símbolo deseado, por ejemplo iTime(Symbol,Timeframe,1); Sin comprobar los datos recibidos - simplemente "mueva" la historia. Así, todos los datos del símbolo estarán siempre actualizados.