[¡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 484

 

Se han enviado parámetros incorrectos a la función de comercio, por ejemplo, símbolo incorrecto, comercio no identificado, tolerancia de precio negativa, número de billete inexistente, etc. Hay que cambiar la lógica del programa.


Pruebe el segundo parámetro para poner OrderOpenPrice() en lugar de cero

 
sergeev:

Acostúmbrese a imprimir cualquier parámetro que pueda ser relevante para el error.

if (!OrderModify(...)) { Print(GetlastError()+.... Lista de parámetros OrderModify ); }



Sí, es un buen hábito. Gracias).

FOReignEXchange 03.07.2011 18:35

Prueba el segundo parámetro en lugar de cero para poner OrderOpenPrice()

Sí, así es. )) Y por alguna razón estaba convencido de que no se pueden establecer parámetros que no es necesario modificar, ya que eso provocará otro error. ¿Existe algo similar a lo que estoy hablando?

Algo así se fija en mi mente:

La función intenta cambiar el parámetro al mismo valor.

 
tol64:


Y por alguna razón estaba convencido de que no se pueden establecer parámetros que no se quieran modificar, ya que eso llevaría a otro error. ¿Existe algo similar a lo que estoy hablando?

Algo así se fija en la cabeza:

La función intenta cambiar el parámetro al mismo valor.


Podría cambiar sólo un parámetro y dejar el resto sin cambios y escribir OrderOpenPrice(), OrdsrStopLoss() etc. en todas partes.
 
Hola, ¿alguien tiene un ejemplo de una red de arrastre de un determinado nivel de precios con un determinado tono? Gracias.
 

Esta es otra pregunta que tengo. En el ejemplo de código que di arriba (tol64 03.07.2011 18:20).

El programa no siempre sincroniza el stop loss de las diferentes posiciones. Es decir, se selecciona la posición, se cumple la condición, también se registra en el diario, pero no se modifica el stop loss.

En la imagen anterior el stop loss para la posición con ticket 4 debe ser modificado y puesto al mismo valor que para la posición con ticket 1. El programa llega a este punto con la impresión, pero la ejecución posterior parece estar bloqueada.

   for(count = 0; count < OrdersTotal(); count++)
      {  
         if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 
            Print("Ticket: ",OrderTicket(),", Type: ",OrderType(),", Magic: ",OrderMagicNumber(),", StopLoss: ",OrderStopLoss());

         double Op_Price = NormalizeDouble(OrderOpenPrice(),Digits);
         double Stp_Loss = NormalizeDouble(OrderStopLoss(),Digits);
         
         if(OrderMagicNumber() == Magic_SP01)
            {  if(OrderType() == OP_SELLSTOP)
                  {  if(Low_1 < SP_Level_01 && new_val > Op_Price && new_val < Open_0)  
                        {  OrderModify(OrderTicket(),new_val,OrderStopLoss(),0,0,DeepPink);  }

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

         ...

Porque la variante en la que no se cumple la condición tampoco se registra. Probé muchas combinaciones diferentes, pero ninguna funcionó. Por favor, ayuda.

 

Y aquí.

 if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

¿No es esa la forma de hacerlo?

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

Y aquí.

¿No es esa la manera de hacerlo?


No, no lo hace. Devuelve un bool de todos modos.
 
tol64:

Aquí hay otra pregunta que tengo. En el ejemplo de código que di arriba (tol64 03.07.2011 18:20).

El programa no siempre sincroniza el stop loss de las diferentes posiciones. Es decir, se selecciona la posición, se cumple la condición, también se registra en el diario, pero no se modifica el stop loss.

En la imagen anterior el stop loss para la posición con ticket 4 debe ser modificado y puesto al mismo valor que para la posición con ticket 1. El programa llega a este punto con la impresión, pero la ejecución posterior parece estar bloqueada.

Porque la variante en la que no se cumple la condición tampoco se registra. Probé muchas combinaciones diferentes, pero ninguna funcionó. Me gustaría que me ayudaras.


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

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

Y sustituir el cero (resaltado) en el código

OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink)

A OrderTakeProfit()

 
FOReignEXchange:

¿Para qué sirve entonces esta condición, si no hay condición? Y los datos del pedido no se utilizan entonces.


Entonces dime qué código es mejor

if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

escríbelo como:

if(!OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) continue;
 
abolk:


entonces y dime cuál es el mejor código

escríbelo como:


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

If es un operador de condición. Y debería haber una condición entre paréntesis. Me parece más lógico que sea así. Aunque puede que no haya ninguna diferencia.