[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 403

 
solnce600:
¿Qué botón utiliza para hacerle sonreír o animarse?

Urri no lo sabía, y yo tampoco conozco el botón, pero a veces movemos la cola... :)))
 
lottamer:

2 horas tratando de escribir una pieza de prueba, para seguir probando diferentes condiciones.

No funciona.

Por favor, dame el error.

la cuestión es que las órdenes se abren después de 2pp en su propia dirección.

abre la venta y termina...



Todo parece ser lógicamente correcto. Sólo atención - todas las variables deben ser declaradas por encima del inicio, incluyendo la que está entre paréntesis.
 
hoz:


Me pregunto por qué hay una condición aquí?


Existe un bucle while, que en principio podría ser infinito, por lo que se han tomado medidas para facilitar la salida del EA del gráfico o su desactivación.

Es mejor terminar el inicio si algo va mal, en lugar de hacer un bucle. En el siguiente tic, repítelo.

 
lottamer:

La función de Kim tiene un parámetro de tiempo ="Fecha y hora en segundos desde 1970"

He probado 2 variantes.

y ambos dan un beneficio no para el día actual, sino un beneficio completo sobre toda la historia....

El día actual comienza al principio de la barra D1 actual (iTime (NULL, PERIOD_D1, 0)), pero no busca formas fáciles... :)))
 
hoz:

No entiendo muy bien la lógica de escribir una función separada. Después de todo, la propia función RefreshRates() sirve para actualizar los datos de las variables predefinidas. Y Bid y Ask son variables predefinidas. Si la función RefreshRates() actualiza las variables predefinidas, ¿por qué escribir alguna función adicional?

Hay una peculiaridad ahí:

bool RefreshRates( )

Refresca los datos en variables predefinidas y matrices de series temporales. Esta función se utiliza cuando un Asesor Experto o un script ha estado realizando cálculos durante mucho tiempo y necesita datos actualizados. Devuelve TRUE si los datos están actualizados, en caso contrario FALSE. Los datos no pueden actualizarse sólo porque corresponden al estado actual del terminal cliente. Los Asesores Expertos y los scripts trabajan con su propia copia de datos históricos. La copia de los datos del símbolo actual se crea en el primer lanzamiento del Asesor Experto o del script. En cada siguiente lanzamiento del Asesor Experto (recuerde que el script se ejecuta una vez y no depende de los ticks entrantes), se actualiza la copia creada inicialmente. Mientras se ejecuta el Asesor Experto o el script, pueden llegar uno o varios ticks nuevos, por lo que los datos pueden quedar desfasados.

Además, los datos no se actualizan al instante. Esto tiene que ser controlado.

 
Zhunko:

Hay una peculiaridad ahí:

bool RefreshRates( )

Refresca los datos en variables predefinidas y arrays-series de tiempo. Esta función se utiliza cuando un Asesor Experto o un script ha estado realizando cálculos durante mucho tiempo y necesita datos actualizados. Devuelve TRUE si los datos están actualizados, en caso contrario FALSE. Los datos no pueden actualizarse sólo porque corresponden al estado actual del terminal cliente. Los Asesores Expertos y los scripts trabajan con su propia copia de datos históricos. La copia de los datos del símbolo actual se crea en el lanzamiento inicial del Asesor Experto o del script. En cada siguiente lanzamiento del Asesor Experto (recuerde que el script se ejecuta una vez y no depende de los ticks entrantes), se actualiza la copia creada inicialmente. Mientras se ejecuta el Asesor Experto o el script, pueden llegar uno o varios ticks nuevos, por lo que los datos pueden quedar desfasados.

Además, los datos no se actualizan al instante. Esto tiene que ser controlado.


Basándonos en la referencia dada, tomemos el precio ASK. Si ejecutamos RefreshRates(), los datos de las matrices de variables predefinidas se actualizan. Si el precio deASC ha cambiado, después de ejecutarRefreshRates(), ASC tomará el nuevo valor. Y si lo hace:

Los datos no pueden actualizarse sólo porque coincidan con el estado actual del terminal cliente.

entonces el valor del ASC no ha cambiado. Así, el valor ASK anterior se utilizará en el cálculo, tal como estaba, ya que no ha cambiado.

Después de todo, siRefreshRates() devuelve el valor de TRU, significa que ha actualizado los datos con éxito, por lo que no es necesario comprobarlo. ¿No estás de acuerdo?

 
hoz:


Basándonos en esta referencia, tomemos el precio del CSA. Si ejecutamos RefreshRates(), se actualizan los datos de las matrices de variables predefinidas. Así, si el precio del ASC ha cambiado, después de ejecutarRefreshRates() elASC tomará el nuevo valor. Y si va así:

entonces el valor del ASC no ha cambiado. Así, en los cálculos se utilizará el valor ASK anterior, que es el que había porque no ha cambiado.

Al fin y al cabo, siRefreshRates() devuelve el valor TRU, ha actualizado los datos con éxito y no necesitamos comprobarlo. ¿No estás de acuerdo?

No. Puede devolver FALSE y los datos serán frescos.

La única razón por la que los datos podrían no actualizarse es porque corresponden al estado actual del terminal cliente.

Tienes que encontrar una indicación que te diga que los datos son frescos. Puede ser diferente para diferentes tareas.
 
Zhunko:

No. Puede devolver FALSE y los datos serán frescos.

Entonces, ¿hay un error evidente en la documentación? ¿Y la documentación no es fiable?

Zhunko:

Hay que encontrar una indicación que permita suponer que los datos son frescos. Puede ser diferente para diferentes tareas.

Supongamos que estamos hablando del precio ASK. Tenemos dos variables:

ASC - Pide el valor después deRefreshRates().

_ASK - valor de Ask last known.

_____________________________________________________________________________________

Es difícil de decir. ¿Cuál podría ser la señal aquí? Hay dos posibilidades:

1. El valor de la variable predefinida ha cambiado. RefreshRates() devuelve True.

2. El valor de la variable predefinida no ha cambiado. RefreshRates() devuelve False.

Si miramos al otro lado, sobre encontrar una señal. Hay dos posibilidades:

1. El valor de la variable predefinida ha cambiado. Es decir, en nuestro caso Ask = ASC

2. El valor de la variable predefinida no ha cambiado. Es decir, Ask = _ASK

Hay un valor modificado o un valor sin modificar, no hay otra opción. ¿Qué quieres hacer entonces?

 
hoz:

Entonces, ¿hay un error flagrante en la documentación? ¿Y la documentación no es de fiar?

Digamos que estamos hablando del precio ASK. Tenemos 2 variables:

ASC - Pide el valor después deRefreshRates().

_ASK - valor de Ask last known.

_____________________________________________________________________________________

Es difícil de decir. ¿Cuál podría ser la señal aquí? Hay dos variantes:

1. El valor de la variable predefinida ha cambiado. RefreshRates() devuelve True.

2. El valor de la variable predefinida no ha cambiado. RefreshRates() devuelve False.

Si miramos al otro lado, sobre encontrar una señal. Hay dos posibilidades:

1. El valor de la variable predefinida ha cambiado. Es decir, en nuestro caso Ask = ASC

2. El valor de la variable predefinida no ha cambiado. Es decir, Ask = _ASK

Hay un valor modificado o un valor sin modificar, no hay otra opción. ¿Cómo quieres proceder entonces?

La documentación está en orden. Está exactamente descrito y eso es lo que te señalé.

Se devuelve TRUE si los datos fueron actualizados, en caso contrario se devuelve FALSE. La única razón por la que los datos pueden no actualizarse es porque coinciden con el estado actual del terminal cliente.

Así que esta función sólo dice que se han recibido nuevos datos.

No sé cómo quieres hacer el resto. Compruebo los datos del servidor (MarketInfo()) con barra cero. Espero hasta que sean iguales. Por cierto, esto no garantiza que no haya un "agujero" en la historia del futuro cercano. Podría faltar fácilmente 1, 2 o 3 barras o varias barras, y la barra cero estará ahí. A veces vienen después. A veces no lo hacen.

 
Zhunko:

Es decir, esta función dice que han llegado nuevos datos, pero eso es todo.

Así que si llegan nuevos datos, eso es lo que necesitamos, ¿no?
Zhunko:

Compruebo los datos del servidor (MarketInfo()) con la barra cero. Espero que sean iguales. Por cierto, esto no garantiza que no haya un "agujero" en la historia más cercana. Podría faltar fácilmente 1, 2 o 3 barras o varias barras, y la barra cero estará ahí. A veces llegan más tarde. A veces no lo hacen.

Bueno, sí, necesitamos los datos de la barra 0. MarketInfo() extrae los datos de la barra cero, eso es todo. ¿Por qué deberíamos comprobarlo con algo más?
Zhunko:

Por cierto, no garantiza la ausencia de un "agujero" en la historia más cercana. Puede que falten 1, 2 o 3 compases o varios compases y el cero estará ahí. A veces llegan más tarde. A veces no lo hacen.

Aunque haya un vacío en el historial, no afectará a los cálculos actuales. Tendría en el momento en que había un agujero. ¡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, estoy investigando a fondo, pero quiero entender cómo comportarme mejor.

Tú, Vadim, dijiste que escribí la función incorrectamente arriba, la duplicaré de nuevo, con líneas añadidas:

double fGet_TradePrice(int fi_price,       // Цена: 0 - Bid; 1 - Ask
                       string fs_symbol)   // валютная пара
{
   double ld_price = 0.0;
   
   switch (fi_price)
   {
         case 0:
         if (fs_symbol == Symbol())
         {
             RefreshRates();
             ld_price = Bid;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_BID);
         
         case 1:
         if (fs_symbol == Symbol())
         {
             RefreshRates();
             ld_price = Ask;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_ASK);
   }
   
    if (ld_price != 0)
        return (ld_price);
}

En su opinión, ¿qué hay de malo en ello?