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

 
dzhini:

Genial, está todo aquí. Publicado anoche, pero el hilo ya ha llegado bastante lejos con las explicaciones de lo que es un magik y cómo se prepara )))

Por favor, denme una respuesta a mi pregunta.

Mi EA establece BUYLIMIT y SELLLIMIT en determinados momentos. Me gustaría hacer que borrara las órdenes pendientes (OP_BUY u OP_SELL) en una dirección cuando se abre la orden.

Esta era mi variante:


Se ve mejor así:

void start(){
  .....

  for(int i=OrdersTotal() -1;i>=0;i--) 
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
     {
      if(CalculateCurrentOrders(Symbol())>0) {Alert(CalculateCurrentOrders(Symbol()));ClosePendingOrder(OP_SELLLIMIT);} // (1) 
      if(CalculateCurrentOrders(Symbol())<0) {Alert(CalculateCurrentOrders(Symbol()));ClosePendingOrder(OP_BUYLIMIT);} //(2) 
      if(TimeCurrent() - OrderOpenTime()>=HowManyHours*60*60) {ClosePendingOrder(OP_BUYLIMIT);ClosePendingOrder(OP_SELLLIMIT);} //(3) 
     } 
   ....

}

Sin entrar en la lógica, la ausencia de llaves y la organización incorrecta de OrderSelect() son inmediatamente evidentes

 
eddy:

¿por qué no hacer estas preguntas agrupadas temáticamente y añadir la posibilidad de hacer preguntas directamente allí? sería un cuestionario normal.

Y si añades la posibilidad de añadir no sólo preguntas sino también tareas, con códigos/artículos como respuestas, obtienes lo que propongo: una estructura de sitio diferente que incluye todo su contenido existente

Román, el trabajo preparatorio se ha hecho durante mucho tiempo, la ideología de las preguntas frecuentes se ha desarrollado previamente y se publicará en una rama especial, la base técnica se ha acordado con la administración.
Espere a la liberación de la rama, vea cómo coincide con sus ideas y, si es necesario, puede desarrollar e implementar su proyecto si está a su alcance.
 
Sergey_Rogozin:

Se ve mejor así:

Sin entrar en la lógica, la falta de llaves y la organización incorrecta de OrderSelect() son inmediatamente evidentes

¿Puedes explicar qué pasa con OrderSelect() ? Porque, como escribí antes, si hago la eliminación de las órdenes en la dirección del comercio ya abierto, todo va sin problemas. También va sin problemas eliminando todos los pedidos en un tiempo estrictamente definido.
 
dzhini:
¿Podría explicar qué es lo que falla en OrderSelect() ? Porque, como escribí antes, si hago la eliminación de las órdenes en la dirección del comercio ya abierto, todo va sin problemas. Tampoco tenemos problemas para eliminar todos los pedidos a una hora determinada.
Sin ver el código, es difícil decirlo definitivamente. Quizás OrderSelect() funcione tal cual, si no necesita seleccionar por símbolo, mago, tipo de operación, etc.
 

Esto es esencialmente un intento de hacer una práctica para el futuro, para trabajar con diferentes conjuntos de órdenes (no sólo dos).

Cuando el ciclo de la vista de la orden se está ejecutando, el EA funciona bastante bien hasta la alerta, pero no quiere trabajar correctamente con la función de borrado:

void ClosePendingOrder(int ORDERType)
{
 while(!IsTradeAllowed()) Sleep(100);
 if(OrderType()==ORDERType)
 {
 if(OrderSymbol()==Symbol())
 { 
 if(!OrderDelete(OrderTicket(),CLR_NONE))
   Print("Order close error",GetLastError());
return;
      }
    }
}
 
granit77:
la ideología de las FAQ está prediseñada y la base técnica ha sido acordada con la administración.
ver cómo se ajusta a tus ideas y, si es necesario, puedes desarrollar tu propio proyecto
¿He recibido la respuesta: "todo está ya pensado y acordado con la administración (es decir, no hay manera de cambiarlo), si algo no se ajusta a tus ideas, puedes hacer las tuyas"?
 
eddy:
He entendido bien la respuesta: "Todo está ya pensado y acordado con la administración (es decir, no hay forma de cambiarlo), si algo no se ajusta a tus ideas, puedes hacer las tuyas"?
"Todo ha sido ya robado antes que tú"))
 
dzhini:

Esto es esencialmente un intento de hacer una práctica para el futuro, para trabajar con diferentes conjuntos de órdenes (no sólo dos).

Cuando el ciclo de la vista de la orden se está ejecutando, el EA funciona bastante bien hasta la alerta, pero no quiere trabajar correctamente con la función de borrado:

Parece que todo está en su sitio. No lo sé.
 
Sergey_Rogozin:

Cómo funciona esto: ClosePendingOrder(OP_SELLLIMIT);} // (1) ?

Su código.

El código de la función para eliminar un pedido se da en el propio mensaje... Tal vez no he entendido la pregunta, pero intentaré explicarla tal y como la he entendido:

Un bucle for establece una enumeración de todas las órdenes abiertas y pendientes disponibles. ClosePendingOrder(OP_SELLLIMIT) - selecciona de esta lista las que coinciden con el símbolo de la moneda y el parámetro OP_SELLLIMIT . En cuanto encuentra estas coincidencias, elimina esta orden pendiente.

 
dzhini:

He dado el código de la función de borrar la orden en ese mismo mensaje... Tal vez no he entendido la pregunta, pero intentaré explicarla tal y como la he entendido:

Un bucle for establece una enumeración de todas las órdenes abiertas y pendientes disponibles. ClosePendingOrder(OP_SELLLIMIT) - selecciona de esta lista las que coinciden con el símbolo de la moneda y el parámetro OP_SELLLIMIT . En cuanto encuentra estas coincidencias, elimina esta orden pendiente.

Ya me lo he imaginado. Al principio sólo lo miraba sin prestar atención.

No veo el error.

Razón de la queja: