EA mezcla órdenes de COMPRA y VENTA - página 2

 

Sin conocer el ea completo y cómo lo estás usando, sólo estaremos adivinando qué es lo que está mal. Asumiendo que está seleccionando una orden correcta para pasar esta declaración.

while (!OrderSelect(cnt, SELECT_BY_POS)) {Sleep(500);}

no hay manera de que se pase:

if ((orderType == OP_BUY || orderType == OP_BUYSTOP)) {

si su Op_Sell. A menos que usted tiene esta cosa en múltiples gráficos del mismo símbolo.

Viendo que estás usando un bucle while contencioso. Esto es probablemente alguna forma de Rapid Order Maker.

Mi conjetura final. La orden seleccionada cambia después de la comprobación de Ordertype :)

Cualquier otra cosa, sugiero como Raptor que utilices un montón de declaraciones de impresión.

 
  1. La orden seleccionada NO puede cambiar después del orderSelect.
  2.  for(cnt = total-1; cnt >= 0; cnt--)  {
          while (!OrderSelect(cnt, SELECT_BY_POS)) {Sleep(500);}
    Si el orderSelect falla, fallará continuamente y tendrá un bucle infinito. Si varias órdenes se cierran en otro gráfico mientras usted está actualizando el suyo, la selección de la siguiente iteración fallará. Muy peligroso.
 

He imprimido el número de Ticket y no coincide con el OrderType().


Si el pedido seleccionado es de tipo OP_BUY, se procesará el correcto si, pero luego en mi llamada OrderModify(...), paso OrderTicket() como primer parámetro, pero es el ticket de otro pedido.


¿Alguna idea?

 
dvarrin:

¿Alguna idea?

Tal vez usted está tratando de modificar una orden que ya está cerrada - usted no está especificando una piscina que usted está seleccionando sus operaciones de .

OrderSelect( int index, int select, int pool=MODE_TRADES) 
MODE_TRADES (por defecto) - orden seleccionada del pool de negociación (órdenes abiertas y pendientes),

MODE_HISTORY - orden seleccionada del pool histórico (orden cerrada y cancelada).


	          
 
RaptorUK:

Tal vez esté intentando modificar una orden que ya está cerrada... no está especificando un pool del que esté seleccionando sus operaciones...

MODE_TRADES (por defecto)- orden seleccionada del pool de negociación (órdenes abiertas y pendientes),

MODE_HISTORY - orden seleccionada del pool histórico (orden cerrada y cancelada).


Yo también lo he intentado, pero no ha cambiado nada. Parece que tengo que almacenar todos los datos de la orden seleccionada que quiero utilizar:


int ticket=0;

doble SL = 0.0;

OrderSelect(cnt, ...);

ticket = OrderTicket();

SL = OrderStoploss();

if (OrderType() == OP_BUY) {


}


...


¿Por qué es así? No entiendo qué es lo que falla en mi código para que OrderTicket() no se corresponda con la misma orden a la que hace referencia OrderType().

 
dvarrin:

He imprimido el número de Ticket y no coincide con el OrderType().


Si el pedido seleccionado es de tipo OP_BUY, se procesará el if correcto, pero luego en mi llamada OrderModify(...), paso OrderTicket() como primer parámetro, pero es el ticket de otro pedido.

¿Es el siguiente pedido en la secuencia, es el anterior en la secuencia?
 

orderType = OrderType()

cambiar a

int orderType = OrderType(); y eliminar la declaración original.

 
forexCoder:

orderType = OrderType()

cambiar a

int orderType = OrderType(); y eliminar la declaración original.


OrderType está bien. Es el OrderTicket() el que no es el ticket del pedido correcto.
 

Te animo a que averigües cuál es la causa de tu problema en lugar de codificar a su alrededor. ...

La ingeniería de software se basa en la resolución de problemas, así es como aprendemos y mejoramos. Estoy en mi tercer intento desde el sábado en la codificación de un problema particular para hacer con Fibs, estoy casi allí . . el uso cuidadoso de la función Print() ayuda mucho .

 
dvarrin:

OrderType está bien. Es el OrderTicket() el que no es el ticket del pedido correcto.

int OrderType = OrderType() no está bien, una puede estar ocultando a la otra (las declaraciones locales ocultan a las globales sin error.) Prueba

int orderType = OrderType()