[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 404
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
1. Bueno, si llegaron nuevos datos, esto es lo que necesitamos, ¿no?
2. Bueno, sí, necesitamos datos de la barra 0, por supuesto. MarketInfo() extrae los datos de la barra cero, eso es todo. Entonces, ¿por qué compararlo con otra cosa?
3. aunque haya un agujero en la historia, no afectará a los cálculos actuales. Habría tenido un impacto en el momento en que el agujero estaba allí. ¡Es decir, si obtenemos la Ask actual, no nos importa realmente lo que eran los precios hace varias barras (me refiero no formalmente, sino en lo que se refiere al momento actual con respecto a una determinada variable de mercado, porque la función RefreshRates() hará el truco con respecto al momento actual en el tiempo en la barra 0-th!
Por supuesto, he profundizado, pero quiero entender cómo comportarme mejor.
4. Tú, Vadim, me has dicho que he escrito mal la función de arriba:
En su opinión, ¿qué tiene de malo?
1. ¿Si no hay datos, pero no sabemos nada al respecto? Devuelve FALSE. ¿Cómo debe evaluarse esto? ¿No hay datos o hay un error, o todavía hay datos?
2. Tienes que conciliar para resolver el problema del primer punto.
3. No se tiene en cuenta la dinámica del proceso. Encienda el ordenador, el terminal. Parece que todos los datos han llegado. Todo convergió en la barra de cero. Las señales se encuentran. El trato está hecho. Resulta que no llegaron todos los datos. 5 minutos después tenemos las barras que faltan con los números 1,2,3,4,5. La señal desapareció. ¿Qué hacer?
4. Lo he marcado en rojo. Todavía no se gestiona un posible error de elección de un identificador erróneo en el interruptor. Más arriba escribí cómo debe hacerse.
Es inútil llamar a RefreshRates() sin esperar el resultado. Puede fallar durante mucho tiempo.
¿Quién hace esa pregunta?
En su opinión, ¿qué tiene de malo?
No está mal, sólo está embarrado.
Finalizando:
Si ld_price = 0, la función devolverá 0 por sí misma. Por lo tanto, no es necesario realizar ninguna comprobación.
Esta es una avería:
También es innecesario. Puede utilizar MraketInfo() en todos los casos.
Al final, la función se convierte en una función MarketInfo() pura (si se eliminan todas las cosas innecesarias).
En principio, teóricamente, estos son los lugares adecuados:
No nos importa lo que devuelva RefreshRates(), lo importante es que las variables Ask y Bid tengan los últimos valores conocidos por la terminal.
¡Hola!
¿A qué se deben los diferentes resultados del probador para el mismo EA?
El periodo probado, el par de divisas y el marco temporal son los mismos, pero los resultados obtenidos hoy son muy diferentes a los anteriores, el EA ha dejado de abrir posiciones largas.
Si la culpa es de las cotizaciones del terminal o es el fin de semana, no lo sé. ¿Quizás los entendidos puedan abrirme los ojos a la razón obvia?
¡Hola!
¿A qué se deben los diferentes resultados del probador para el mismo EA?
El periodo probado, el par de divisas y el marco temporal son los mismos, pero los resultados obtenidos hoy son muy diferentes a los anteriores, el EA ha dejado de abrir posiciones largas.
Si la culpa es de las cotizaciones del terminal o es el fin de semana, no lo sé. ¿Quizás los entendidos puedan abrirme los ojos a la razón obvia?
Incluso dos pruebas seguidas, una tras otra, pueden ser diferentes, y de forma muy notable. El broker cambia el spread y la prueba se hace con un spread diferente. Un cambio de un punto es suficiente.
Si hubo una prueba anterior hace mucho tiempo, tal vez los ajustes se hayan aflojado.
1. ¿Si no hay datos y al mismo tiempo hay todos estos datos, pero no sabemos nada de ellos? Devuelve FALSE. ¿Cómo debe interpretarse esto? ¿No hay datos o hay un error, o hay datos?
No te entiendo. Vamos por orden... Llamamos a RefreshRates(), no llegaron datos... Pero hay datos. Lo que tenemos aquí es un desastre. Si los datos no llegaron, los datos no estarán disponibles o los datos no han sido actualizados porque la variable del mercado no ha cambiado... Sólo hay dos opciones.
Si devuelve TRU después de llamar aRefreshRates(), entonces los datos han sido actualizados. Y si devuelve FELS, entonces o no han actualizado, porque hay un error o no han actualizado, porque los datos son frescos y no necesitan ser actualizados.
Por lo tanto, entiendo que esto se puede ver de la siguiente manera:RefreshRates() comprueba los datos, si los datos no son nuevos, no actualiza aquellos datos que no son nuevos, es decir, que no han cambiado, y si son nuevos, los actualiza. Así que sólo puede confiar en la bandera devuelta porRefreshRates(). ¿Tiene alguna otra opción?
2. Es necesario conciliar para resolver el problema del primer punto.
Tú lo has dicho:
Concilio los datos del servidor (MarketInfo()) con la barra cero. Esperando que sean los mismos.
Bueno MarketInfo() está tirando de la barra cero como es... ¿Qué quieres decir con lo anterior?
3. No se tiene en cuenta la dinámica del proceso. Encendió el ordenador, el terminal. Parece que todos los datos han llegado. Todo convergió en la barra cero. Las señales se encuentran. El trato está hecho. Resulta que no llegaron todos los datos. 5 minutos después tenemos las barras que faltan con los números 1,2,3,4,5. La señal desapareció. ¿Qué hacer?
He decidido actualizarlo de nuevo. ¿Pero qué pasa si llamamos a RefreshRates() y actualiza los datos lentamente? Es decir, algunos de los cálculos se realizarán con algunos datos del mercado, y otros con otros datos... ¿Y entonces qué?
4. Marcada en rojo. Además, no se gestiona un posible error de selección del identificador equivocado en el interruptor. He escrito más arriba cómo se debe manejar.
Es inútil llamar a RefreshRates() sin esperar el resultado. Puede fallar durante mucho tiempo.
Hm. Bueno, si lo esperamos, la cita puede cambiar... ¿Hay una vía de doble sentido aquí?
RefreshRates(); // ¿Por qué este freno sin procesar el valor de retorno?
Lo mencionas varias veces, pero todavía no hay nada concreto. Es decir, por mucho que vea que esta función se utiliza habitualmente, es justo antes del código donde se utilizan las variables de datos del mercado y ya está. Realmente no piensan en ello. Pero pensé en ello y decidí averiguar cómo hacerlo bien. Para saber con certeza que tal o cual enfoque es realmente correcto y que funcionará en todas las condiciones normales.
Entonces, Vadim, ¿qué quieres decir con esta expresión?
"
¿Por qué este freno sin procesar el valor de retorno?"
¿Cómo se pueden procesar? Escribí mi lógica arriba, pero no obtuve respuesta. Lo he descrito con bastante precisión y sin variantes.
No está mal, sólo está embarrado.
Finalizando:
Si ld_price = 0, la función devolverá 0 por sí misma. Por lo tanto, no es necesario realizar ninguna comprobación.
Ese es el desglose:
Tampoco es necesario. Puede utilizar MraketInfo() en todos los casos.
Al final, la función se convierte en una función MarketInfo() pura (si se eliminan todas las cosas innecesarias).
Y entonces, ¿para qué preguntar (si hablamos específicamente del precio de compra), si siempre podemos usar MarketInfo(fs_symbol, MODE_ASK)? Al fin y al cabo, si lo miras así, remitiéndote a Ask, no puedes estar seguro de que sea preciso en este momento...
No importa lo que devuelva la función RefreshRates(), lo importante es que las variables Ask y Bid tengan los últimos valores conocidos por la terminal.
Prácticamente, necesitamos algo más, por lo que entiendo. Y necesitamos el último servidor de Ask y Bid y no los terminales locales. ¿Verdad?
Por eso inicié una discusión aquí, para entender de una vez por todas cómo organizarlo de forma más lógica y correcta. Pues en teoría esto es correcto, pero en la práctica...