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

 
FAQ:
¿Por qué no se recuerda el ticket de la orden y no su posición. y qué ocurre en una transferencia directa si no existe dicha orden? ¿se elimina la orden cero?


Ya lo he probado. Esto tampoco funciona:

//+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложеннык шортов                                            |
//+-------------------------------------------------------------------------------------+
void DeletePendingSells(int& amountOfCurrPending)
{
   int total = OrdersTotal() - 1,
       ordersToDelete = level - amountOfCurrPending,  // Количество отложек, которые требуется удалить
       s_ticket = 1,                                  // Тикет искомого ордера
   amountOfCurrPendingBuys = 0;                       // Количество текущих отложек на покупку
   amountOfCurrPendingSells = 0;                      // Количество текущих отложек на продажу

   double OOP = 20.0;                                  // Зададим значение цены открытия отложки, которой не может быть..
   
   if (ordersToDelete == 0) return (0);

   for (int i=total; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if(OrderType() != OP_SELLSTOP) continue;         // Работает только с шортовыми ордерами
      
      if (OOP > OrderOpenPrice())
      {
          OOP = OrderOpenPrice();                  // Ищется ордер, с минимальной ценой открытия
          s_ticket = OrderTicket();                // Получаем тикет ордера с минимальной ценой открытия
      }
   }
   if (s_ticket != -1)
   {
      OrderDelete(s_ticket,Black);
   }
   return (0);
}
 
hoz:


Ya lo he intentado antes. Esto tampoco funciona:

Hay que tener más cuidado.
//+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложеннык шортов                                            |
//+-------------------------------------------------------------------------------------+
void DeletePendingSells(int& amountOfCurrPending)
{
   int total = OrdersTotal() - 1,
       ordersToDelete = level - amountOfCurrPending,  // Количество отложек, которые требуется удалить
       s_ticket = 1,                                  // Тикет искомого ордера
   amountOfCurrPendingBuys = 0;                       // Количество текущих отложек на покупку
   amountOfCurrPendingSells = 0;                      // Количество текущих отложек на продажу

   double OOP = 20.0;                                  // Зададим значение цены открытия отложки, которой не может быть..
   
   if (ordersToDelete == 0) return (0);

   for (int i=total; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if(OrderType() != OP_SELLSTOP) continue;         // Работает только с шортовыми ордерами
      
      if (OOP > OrderOpenPrice())
      {
          OOP = OrderOpenPrice();                  // Ищется ордер, с минимальной ценой открытия
          s_ticket = OrderTicket();                // Получаем тикет ордера с минимальной ценой открытия
      }
   }
   if (s_ticket != -1)
   {
      OrderDelete(s_ticket,Black);
   }
   return (0);
}
 

¡Por fin funciona! En principio, funcionaba y la versión anterior. El fallo principal estaba en la llamada a la función, no en la función en sí.

Desde el punto de vista de un profesional, todas las variables deberían ponerse a cero al entrar en una función, a no ser que sean estáticas, es decir, no hay necesidad de mantener su valor específico, ¿no?

 
hoz:

¡Por fin funciona! En principio, funcionaba y la versión anterior. El error principal estaba en la llamada a la función, no en la función misma.

Desde el punto de vista de un profesional, todas las variables deberían ponerse a cero al entrar en una función, a no ser que sean estáticas, es decir, no hay necesidad de mantener su valor específico, ¿no?

Inicialice las variables de la función con valores que no provoquen el mal funcionamiento de la función y los errores más difíciles de encontrar.

Suelo usar 0 o -1, dependiendo del propósito de la variable. Si la variable de la función va a almacenar el índice de posición encontrado, entonces inicialícela a -1. Si se inicializa a cero, después de buscar la posición correcta y su ausencia, todavía se puede elegir la posición con índice 0, aunque no será la posición que se busca. Con -1 no se elegirá la posición. Este es uno de todos los ejemplos posibles en los que el error es difícil de encontrar - todo parece ser correcto en la función, pero la salida es totalmente errónea... y el EA no funciona con el orden/posición que esperábamos...

 

Una función debe ser corta (opcional, pero deseable) y perfectamente clara (su propósito). como 2*2=4. es decir, el programador debe entender claramente para qué sirve y qué operación realiza. luego debe sacarla de su mente y olvidarse de lo que tiene dentro, y usarla como una "caja negra".

Todas las variables utilizadas por una función deben pasarse a ésta como argumentos. El uso de variables globales sin pasarlas como argumentos sólo se justifica si son, por ejemplo, Externs (en el caso de MT). Cambiar los globales en una función es inaceptable, si falta un valor de retorno, pase las variables por referencia en la lista de argumentos.

Es decir, si tienes que tirar esta función, entonces no tienes que recordar por qué la versión reducida no funciona porque cualquier global en esta función se ha modificado. Todo ello con el fin de que, en caso de tener que rehacerlo, no se produzca una reacción en cadena

 

Hola a todos.

Probando Pound-En.

La orden debería haber cerrado en TAKE PROFIT antes que en STOP LOSS.

Pero mi orden no se cerró en Take Profit por alguna razón.

PREGUNTA: ¿POR QUÉ MI ORDEN NO SE CERRÓ EN EL PUNTO DE TOMA DE BENEFICIOS COMO SE INDICA EN LA FUNCIÓN DE NEGOCIACIÓN?

Método de modelado: todas las garrapatas.

Ejemplo en el enlace

http://clip2net.com/s/55pdDU

NOTA.Tales casos - no ocurren a menudo.En la mayoría de los casos, las operaciones se cierran en 10 pips parada. en el tiempo.

Es decir, me parece que probablemente no tiene nada que ver con la distancia mínima aceptable entre el precio y el stop.

¿Cuál puede ser la razón?

Gracias.

 

Ayuda para tomar datos en variables globales de un indicador

aproximadamente:

6,5 DÓLARES

6,6 EUROS

3,3 LIBRAS ESTERLINAS

etc.

Gracias de antemano por su ayuda.

/*Descompilación eliminada. Advertencia*/.

 
FAQ:

Una función debe ser corta (opcional, pero deseable) y perfectamente clara (su propósito). como 2*2=4. es decir, el programador debe entender claramente para qué sirve y qué operación realiza. luego debe sacarla de su mente y olvidarse de lo que tiene dentro, y usarla como una "caja negra".

Todas las variables utilizadas por una función deben pasarse a ésta como argumentos. El uso de variables globales sin pasarlas como argumentos sólo se justifica si son, por ejemplo, Externs (en el caso de MT). Cambiar los globales en una función es inaceptable, si falta un valor de retorno, pase las variables por referencia en la lista de argumentos.

Es decir, si tienes que tirar esta función, entonces no tienes que recordar por qué la versión reducida no funciona porque cualquier global en esta función ha sido modificado. Todo esto con la intención de que si tengo que volver a hacerlo, no provoque una reacción en cadena


Gracias, y, Artem, ¡por supuesto! Me has abierto los ojos a esos puntos, que en principio son lógicos, pero que a veces la falta de experiencia hace que pasen desapercibidos.

Hay otros malentendidos. Escribiste que si hay variables globales en EA, deben ser usadas en funciones sólo pasándolas como argumentos, ¿cierto?

Sólo estoy tratando de entender, ¿hay alguna razón para crear variables globales (no externas)... Si deben ser pasadas sólo a través de argumentos, una larga cadena de funciones dependientes puede recoger un montón de argumentos, y los nombres de las funciones con argumentos serán muy largos.

Y de nuevo, puedes crear una variable global, pasarla a una función por referencia y hacer lo que quieras con ella, y devolverla por referencia de nuevo a global, ¿verdad?

Cuando leí tu post hoy, me puse a pensar en ello y transferí algunas variables de global a una función. Entonces me di cuenta de que esas variables son necesarias en otra función, que no está relacionada con la función donde las declaré. Si te escuchas aquí: "Cambiar los globales y la función no es aceptable", entonces resulta que la función que obtiene directamente las variables requeridas debe ser llamada en diferentes lugares? Pero esto ya hace que el código, por así decirlo, no sea agradable. Quieres que la función sea llamada cuando la necesites y no más veces de las que la necesites. Por ejemplo, la función que busca todas las menas, órdenes de compra y venta. Es razonable suponer que debe ser llamado sólo una vez por tic y no más de una vez. Pero si se llama al principio, no todas las funciones que utilizan estas variables devueltas por la función de búsqueda de órdenes pueden pasar por sus parámetros. Entonces seguimos volviendo a las variables globales, ¿o qué?

 

Por favor, ayude a resolver el problema con el límite del valor de desplazamiento en iHigh(Symbol(),timeframe,shift), que está limitado al número 1000.

iTime(Symbol(),timeframe,1001) da 1970.01.01 00:00
 
¿Cómo diablos se desactiva la alerta ???????? por qué después de pulsar la barra espaciadora, se mantiene el pitido ??????????