[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 485

 
FOReignEXchange:


¿No lo entiendo? Estoy mirando en la ayuda, allí OrderSelect() utiliza una condición. Y no lo he visto en ningún sitio sin verdad.

if es una declaración de condición. Y debería haber una condición entre paréntesis. Eso me parece más lógico. Aunque puede que no haya ninguna diferencia.


especificación:

bool OrderSelect( int index, int select, int pool=MODE_TRADES) 

devuelve verdadero o falso

véase https://docs.mql4.com/ru/basis/operators/if.

Si la expresión es verdadera, se ejecuta el operador1 y se da el control al operador que sigue al operador2 (es decir, el operador2 no se ejecuta). Si la expresión es falsa, se ejecuta el operador2.

if (expresión) operator1 else operator2

La parte else del operador if puede omitirse. Por lo tanto, las sentencias if anidadas con la parte else omitida pueden causar ambigüedad. En este caso else está vinculado a la sentencia if precedente más cercana en el mismo bloque que no tiene parte else.

Es decir, no es necesario comparar OrderSelect ()==true, basta con utilizar OrderSelect() o !OrderSelect() en lugar de OrderSelect()==false

 

No me refiero a eso.

Es que cuando selecciono un pedido, siempre lo escribo completo.

if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)==true)

Nunca lo he visto sin verdad.

abolk:
то есть сравнение OrderSelect()==true делать не обязательно - достаточно просто использовать OrderSelect() или !OrderSelect() вместо OrderSelect()==false

Lo tengo.

 
FOReignEXchange:

Nunca he visto uno sin verdad.


Estás mirando los códigos de las personas equivocadas.
 
FOReignEXchange:

No me refiero a eso.

Es que cuando selecciono un pedido, siempre lo escribo completo.

Nunca lo he visto sin verdad.

Lo tengo.


dos entradas perfectamente iguales - una entrada no es peor ni mejor que la otra - cada uno hace lo que quiere, como entiende, como está acostumbrado
 
sergeev:

Estás mirando los códigos de la gente equivocada.


Por cierto, tengo que reconocerlo a FOReignEXchange.

Abrí "Moving Average.mq4" y lo vi:

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
 
abolk:


Print() para dar salida al valor de la variable global_trailing_SP directamente en la función que ha definido.

¿Dónde se lee el valor de esta variable?


¡Vaya! )) Si imprimo() el valor de la variableglobal_trailing_SP desde la función presentada, veo un valor completamente inesperado en el registro (resaltado en amarillo). Mientras que antes fuera de esta función se imprime correctamente (frente al punto rojo).

global_trailing_SP es una variable global. Se declara fuera de la función Start(),

double global_trailing_SP = 0.0; 

Después de que la función de trailing stop cambie con éxito el valor de la posición principal, el valor de la pérdida del stop de la posición principal se asigna en un bucle separado a la variableglobal_trailing_SP .

   for(count = OrdersTotal()-1; count >= 0; count--)
      {  OrderSelect(count,SELECT_BY_POS,MODE_TRADES);
         if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP)
            {  global_trailing_SP = NormalizeDouble(OrderStopLoss(),dgt); Print("global_trailing_SP: ",DoubleToStr(global_trailing_SP,5));  }
      }
Este es el valor indicado por el punto rojo de arriba.

Este valor se pasa a la función en la que tienen lugar varias modificaciones de orden. Pero como resultado, el registro muestra un valor que no esperaba y el valor de Stop Loss ciertamente no se modifica. ¿Cómo se puede resolver este problema? Resulta que no todo es siempre tan lógico como puede parecer a primera vista).

 

¿No es mejor hacerlo aquí donde está el SELLSTOP?

if((global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)) 
{  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);
Print("Условие ModifyOrder исполнилось: global_trailing_SP: ",global_trailing_SP,", Stop Loss: ",OrderStopLoss());  }
else   Print("Условие не выполняется!");

Para que todo sea exactamente igual que en SELL.

 
FOReignEXchange:

¿No es mejor hacerlo aquí, donde está el SELLSTOP?

Para que todo sea exactamente igual que en SELL.


Ese no parece ser el problema en este caso. Lea más arriba.
 
tol64:


¡Vaya! )) Si imprimo() el valor de la variable global_trailing_SP desde la función presentada, veo un valor absolutamente inesperado en el diario (resaltado en amarillo). Mientras que antes fuera de esta función se imprime correctamente (frente al punto rojo).

global_trailing_SP es una variable global. Se declara fuera de la función Start(),

Después de que la función de trailing stop cambie con éxito el valor de la posición principal, en un bucle separado se asigna a la variable global_trailing_SP el valor de la pérdida del stop de la posición principal.

Este es el valor indicado por el punto rojo de arriba.

Este valor se pasa a la función en la que tienen lugar varias modificaciones de orden. Pero como resultado, el registro muestra un valor que no esperaba y el valor de Stop Loss ciertamente no se modifica. ¿Cómo se puede resolver este problema? Resulta que no todo es siempre tan lógico como puede parecer a primera vista))


mostrar cómo se lee la variable global_trailing_SP
 

Así que no lo entiendo. ¿Existe la orden pendiente en el momento de la modificación de la orden principal?

Si existe, entonces la modificación de la orden principal y la modificación de la orden pendiente están en el mismo bloque. Y si la orden principal se modifica, la pendiente debería hacer lo mismo, si esa es tu idea.

Otra cosa es que nuestra idea no funcione. Eso significa un error en la condición. Trate de hacer todo de la misma manera que en la condición para la modificación de la orden principal, como he mostrado anteriormente. Me parece que el error está en la lógica. No me sorprende. Todo es muy complicado. Deberías hacerlo más sencillo.