Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 749

 
Vinin:

Esta fórmula es bastante fácil de ajustar a las necesidades. Sólo hay que tener en cuenta el lote mínimo

Esto parece un poco diferente

lot=Min_Lot+lotstep*MathRound((AccountBalance()-X)*0.001/lotstep);

Donde X - Saldo para abrir el lote mínimo,

Pero todavía tenemos que comprobar el lote mínimo.

¿Por qué necesitamos todas estas complejidades, X que deben calcularse por separado? Además, necesitaremos una comprobación adicional...

¿No sería más fácil comprobar directa y honestamente la validez y la aceptabilidad de todos los valores de la fórmula, y luego simplemente calcularla honestamente?

Por cierto, MathRound() redondea al entero más cercano, es decir, puede fácilmente sobreestimar de forma errónea, lo que puede causar consecuencias adicionales.

 

Pobrecito.

 
simpleton:
Tú no.
 
Hola. Estoy tratando de calcular el StopLoss desde el mínimo y el máximo de la primera barra, después de colocar la orden pendiente, para comprar y vender respectivamente. Pero no obtuve ningún resultado, sólo 130 de error, eso es todo. Gracias de antemano.
if(ticket>0)
           {
            SL = NormalizeDouble(Low[1] - StopLoss*Point, Digits);
            {
               if(OrderModify(ticket, OrderOpenPrice(), SL, 0, 0))
...
//+-------------------------------------------------------------------------+
if(ticket>0)
           {
SL = NormalizeDouble(High[1] + StopLoss*Point, Digits);
            {
               if(OrderModify(ticket, OrderOpenPrice(), SL, 0, 0))
...                     																							
 
Estás normalizando lo que no debes.
 
Petiyashaket:
Si puedes explicarlo en una línea de código y con comentarios, como en mi código anterior, te lo agradeceré enormemente.

"Tengo dudas", y no puedo evitar la sensación de que se trata del mecanismo de caché del entorno del mercado.

Para que el terminal no tenga que "correr al servidor" para cada ocasión, como OrdersTotal(), OrderSymbol() etc., el entorno del mercado se copia en algún caché, y parece ser diferente para cada script, pero el script se ocupa sólo de este caché. La caché NO se actualiza automáticamente durante todo el tiempo de ejecución de la función principal del script, incluso después de la ejecución exitosa de funciones como OrderSend() cambiando el entorno del mercado en el servidor, por lo tanto, la orden que aparece en el script "no es visible", es decir, hace una ilusión de su ausencia. Simplemente no se puede detectar en el bucle for, por lo que no se llama a OrderModify(). Se trata de una hipótesis surgida a partir de vagas dudas y sentimientos incomprensibles.

La caché descrita puede actualizarse forzosamente mediante la llamada RefreshRates(), por ejemplo, inmediatamente después de llamar a OrderSend(). Comprueba si la hipótesis es correcta.

Si, entre otras cosas, RefreshRates() devuelve verdadero, esto es una confirmación indirecta adicional de la hipótesis.

 
Petiyashaket:
Si me lo explicas en una línea de código y con comentarios, como en mi código anterior, te lo agradeceré enormemente.
Si no lo entiende, léalo aquí. Y aquí. Luego haz que las variables no pierdan su significado en cada tic y organiza el bucle de forma adecuada.
 
simpleton:

"Tengo dudas", y no puedo evitar la sensación de que todo tiene que ver con el mecanismo de caché del entorno del mercado.

Para que el terminal no tenga que "correr al servidor" para cada ocasión, como OrdersTotal(), OrderSymbol() etc., el entorno del mercado se copia en algún caché, y parece ser diferente para cada script, pero el script se ocupa sólo de este caché. La caché NO se actualiza automáticamente durante todo el tiempo de ejecución de la función principal del script, incluso después de la ejecución exitosa de funciones como OrderSend() cambiando el entorno del mercado en el servidor, por lo tanto, la orden que aparece en el script "no es visible", es decir, hace una ilusión de su ausencia. Simplemente no se puede detectar en el bucle for, por lo que no se llama a OrderModify(). Esta es la hipótesis que surgió a partir de vagas dudas y sentimientos poco convincentes.

La caché descrita puede actualizarse forzosamente mediante la llamada RefreshRates(), por ejemplo, justo después de la llamada OrderSend(). Comprueba si la hipótesis es correcta.

Si, entre otras cosas, RefreshRates() devuelve verdadero, esto es una confirmación indirecta adicional de la hipótesis.

¿Tomas drogas?
 
noob1:
Hola. Por favor, si lo sé, estoy intentando calcular un StopLoss desde el mínimo y el máximo de la primera barra, después de colocar una orden pendiente, para comprar y vender respectivamente. Pero no tengo nada, sólo 130 de error y nada más. Gracias de antemano.

Comprueba si OrderOpenPrice() está demasiado cerca del SL, y si los stops están "a la derecha del precio". Puede leerlo aquí:

Los precios StopLoss y TakeProfit no pueden estar demasiado cerca del mercado. La distancia mínima del stop en pips puede obtenerse utilizando la función MarketInfo() con el parámetro MODE_STOPLEVEL. El error 130 (ERR_INVALID_STOPS) se generará en caso de paradas erróneas o no normalizadas.

En este caso, es decir, para una orden pendiente, el "mercado" es su "precio abierto pendiente".

 
tara:
Estás normalizando lo que no es.
De la documentación: