Ayuda con la codificación de este problema: ordenar órdenes de compra
Ayuda con la codificación de este problema: ordenar órdenes de compra

 

Publi

Resultados 1 al 7 de 7

Tema: Ayuda con la codificación de este problema: ordenar órdenes de compra

  1. #1
    Hola a todos,

    Estoy tratando de escribir un código que permita a mi EA recorrer mis órdenes de compra abiertas, ordenarlas por su precio de apertura desde el precio más alto hasta el precio más bajo y luego generar el número de ticket para la orden que se encuentra en una posición determinada que Nomino en la nueva lista ordenada.

    Como ejemplo, si proporciono a este nuevo código/función el número 3, me gustaría que el nuevo código ordene las órdenes de compra en orden descendente según su precio de apertura y, en este ejemplo, proporcione el número de ticket para la orden que es el tercero de la lista. p.ej. 3er más alto.

    Ejemplo de Órdenes de Compra Abiertas (antes del nuevo pedido)

    Operación 1 tomada: precio de apertura = 1.336
    Operación 2 tomada: precio de apertura = 1.343
    Operación 3 tomada: precio de apertura = 1.375
    Operación 4 tomada: precio de apertura = 1.339

    Nueva lista después de volver a ordenar:

    Operación 3 tomada: precio de apertura = 1.375
    Operación 2 tomada: precio de apertura = 1.343
    Operación 4 tomada: precio de apertura = 1.339
    Operación 1 tomada: precio de apertura = 1.336

    número de billete resultado @ posición 3 = 4

    ¿Alguien sabe cómo puedo hacer esto?

  2.                         
    Publicidad
  3. #2

    Cita Iniciado por ;
    Veo. Aquí hay una muestra de código, espero que funcione: { int tickets[100]; precios de apertura dobles[100]; int k = 0;/recopilar for(int i = 0; i lt; OrdersTotal(); i ) { if(OrderSelect(i, SELECT_BY_TICKET)) { if(OrderType() == OP_BUY) { tickets[k] = OrderTicket(); preciosabiertos[k] = PrecioAbrirOrden(); k ; } } }/ordenar for(int i = 0; i lt; k-1; i ) { for(int j = 0; j lt; k-1; j ) { if(preciosabiertos[j] lt; preciosabiertos[ j 1]) { double tmp = precios abiertos[j]; preciosabiertos[j] = preciosabiertos[j 1]; precios de apertura[j 1] = tmp; tmp = entradas[j]; entradas[j] = entradas[j 1]; entradas[j 1] = tmp; }...
    Gracias rockit por tu ayuda aquí. Ahora tengo tanto su código como el de Gumrai para mirar y, con suerte, aprender de ellos.

  4. #3
    Pruebe este código insertado int Position_to_search_for=3; double BuyOrderArray#91;#93;#91;2#93;; int BuyArraySize=0; double SellOrderArray#91;#93;#91;2#93;; int SellArraySize=0; for(int x=OrdersTotal()-1;xgt;=0;x--) { if(OrderSelect(x,SELECT_BY_POS,MODE_TRADES)) if(OrderType()==OP_BUY OrderSymbol()==Symbol()) { ArrayResize(BuyOrderArray,BuyArraySize 1); BuyOrderArray#91;BuyArraySize#93;#91;0#93;=OrderOp enPrice(); BuyOrderArray#91;BuyArraySize#93;#91;1#93;=OrderTi cket(); ComprarTamañoArray ; } else if(OrderType()==OP_SELL OrderSymbol()==Symbol()) { ArrayResize(SellOrderArray,SellArraySize 1); SellOrderArray#91;SellArraySize#93;#91;0#93;=Order OpenPrice(); SellOrderArray#91;SellArraySize#93;#91;1#93;=Order Ticket(); SellArraySize ; } } ArraySort(BuyOrderArray,WHOLE_ARRAY,0,MODE_DESCEND );/Ordene SellOrderArray como desee if(Position_to_search_forgt;BuyArraySize) Alert(Menos de (cadena)Position_to_search_for Órdenes de compra abiertas); else Alert(Number (string)Position_to_search_for en la lista de órdenes de compra es # DoubleToStr(BuyOrderArray#91;Position_to_search_fo r-1#93;#91;1#93;,0) El precio de apertura es DoubleToStr(BuyOrderArray#91; Position_to_search_for-1#93;#91;0#93;,Dígitos));

  5. #4
    Veo. Aquí hay una muestra de código, espero que funcione: Código insertado { int tickets#91;100#93;; precios de apertura dobles#91;100#93;; int k = 0;/recolectar para(int i = 0; i lt; OrdersTotal(); i ) { if(OrderSelect(i, SELECT_BY_TICKET)) { if(OrderType() == OP_BUY) { tickets#91;k#93; = TicketPedido(); precios abiertos#91;k#93; = PrecioAbrirOrden(); k ; } } }/ordenar for(int i = 0; i lt; k-1; i ) { for(int j = 0; j lt; k-1; j ) { if(openprices#91;j#93; lt; precios abiertos#91;j 1#93 { double tmp = precios abiertos#91;j#93;; precios abiertos#91;j#93; = preciosapertura#91;j 1#93;; precios abiertos#91;j 1#93; = tmp; tmp = entradas#91;j#93;; entradas#91;j#93; = entradas#91;j 1#93;; entradas#91;j 1#93; = tmp; } } } for(int i = 0; i lt; k; i ) Print(entradas#91;i#93; }

  6. #5
    Hay varios métodos. Describiré un método simple (no OOP): 1. recorrer la cola de órdenes y colocar los números de boleto (de órdenes de compra abiertas) en una matriz y los precios de apertura correspondientes en otra; 2. haga una ordenación de burbujas (búsquelo en wiki) en la matriz de precios abierta mientras que al mismo tiempo realiza la misma operación de volteo en la matriz de boletos (es decir, si voltea los valores en la matriz de precios, también voltea los boletos ); 3. las matrices están ordenadas: elige tu posición en la matriz de entradas.

  7. #6

    Cita Iniciado por ;
    Hay varios métodos. Describiré un método simple (no OOP): 1. recorrer la cola de órdenes y colocar los números de boleto (de órdenes de compra abiertas) en una matriz y los precios de apertura correspondientes en otra; 2. haga una ordenación de burbujas (búsquelo en wiki) en la matriz de precios abierta mientras que al mismo tiempo realiza la misma operación de volteo en la matriz de boletos (es decir, si voltea los valores en la matriz de precios, también voltea los boletos ); 3. las matrices están ordenadas: elige tu posición en la matriz de entradas.
    Hola rockit y gracias por el aporte. Soy bastante nuevo en la programación de MQL4, por lo que hasta la fecha no he tenido experiencia con matrices o cómo obtener datos en ellas. ¿Sería capaz de ofrecer alguna ayuda adicional en este sentido? Revisé la documentación de MQL4 y la busqué en Google, pero sin ejemplos me resulta un poco difícil de entender. Hasta ahora, mi código simplemente recorre las órdenes de compra y compara el precio de apertura con una variable. Si el precio de apertura es más alto que el variable, el precio se pasa a la variable. Esto continúa para todas mis órdenes de compra y al final del bucle for tengo mi orden, que es la más alta o la más baja de la lista. Eso es todo lo que he llegado hasta ahora.

  8. #7

    Cita Iniciado por ;
    Prueba esto int Position_to_search_for=3; matriz de orden de compra doble [] [2]; int BuyArraySize=0; matriz de orden de venta doble [] [2]; int SellArraySize=0; for(int x=OrdersTotal()-1;xgt;=0;x--) { if(OrderSelect(x,SELECT_BY_POS,MODE_TRADES)) if(OrderType()==OP_BUY OrderSymbol()==Symbol()) { ArrayResize(BuyOrderArray,BuyArraySize 1); BuyOrderArray[BuyArraySize][0]=OrderOpenPrice(); BuyOrderArray[BuyArraySize][1]=OrderTicket(); ComprarTamañoArray ; } else if(OrderType()==OP_SELL OrderSymbol()==Symbol()) { ArrayResize(SellOrderArray,SellArraySize 1); SellOrderArray[SellArraySize][0]=OrderOpenPrice();...
    Hola Gumrai, gracias por tu aporte. Agradezco su ayuda aquí e intentaré revisar y comprender su código.

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Uso de cookies
Utilizamos cookies propias y de terceros para elaborar información estadística y mostrarle publicidad personalizada a través del análisis de su navegación. Si continúa navegando acepta su uso. Más información y política de cookies.
     

Aviso legal: Ni forosforex.com ni ninguna persona involucrada en forosforex.com aceptarán ninguna responsabilidad por cualquier pérdida o daño en el trading como resultado de la confianza en la información contenida en este sitio web, incluidos datos, cotizaciones, gráficos y señales de compra/venta. Por favor, infórmese plenamente de los riesgos y costes asociados a las operaciones en los mercados financieros, una de las formas de inversión que más riesgos entrañan.
forosforex.com le quiere recordar que los datos contenidos en este sitio web no son necesariamente en tiempo real ni exactos. forosforex.com no asume responsabilidad alguna por las pérdidas en que usted podría incurrir como resultado de la utilización de estos datos. Este acuerdo se rige por su versión en inglés, que prevalecerá siempre que haya alguna discrepancia entre la versión en inglés y la versión en español. Los CFD son un producto difícil de entender, varios organismos reguladores consideran que no es adecuado para inversores minoristas debido a su complejidad y riesgo.
Advertencia de riesgo: Los CFDs son un producto difícil de entender, y puede no ser adecuado para inversores minoristas debido a su complejidad y riesgo. Existe la posibilidad de sufrir una pérdida igual o superior a la inversión. Por lo tanto, no debe invertir o arriesgar dinero que no pueda permitirse perder. Debe asegurarse de que comprende todos los riesgos. Antes de abrir una cuenta en un broker por favor sea consciente e infórmese de los riesgos asociados con el trading. El contenido de este sitio web no debe interpretarse como asesoramiento personal. ForosForex recomienda que busque el consejo de un asesor financiero independiente.