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

 
KostelloArtua:

¡¡¡Muchas gracias por los consejos!!! He solucionado mi problema. Resulta que el broker que buscaba, al colocar una orden de mercado, es decir, según las condiciones, no me permite colocar niveles de stop al mismo tiempo. Ahora las órdenes se colocan sin niveles de parada y establezco niveles de parada inmediatamente después de cada orden. Tengo un problema con esto: Sólo una parte muy pequeña de las órdenes se modifican, mientras que la mayoría de las órdenes muestran los siguientes resultados en la sección "Expert Advisors":

2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: open #30906670 sell 0.01 CLM1 at 99.79 ok
2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: invalid ticket for OrderModify function
2011.05.19 09:55:40 Spacenewcomer-Svecha ESM1,M5: open #30906787 buy 0.01 ESM1 at 1337.50 ok

2011.05.19 10:00:03 Spacenewcomer-Svecha EURUSD,M15: ticket no válido para la función OrderModify

Este es el texto del código:

{
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);


OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopLoss*Point,Ask-TakeProfit*Point,0,Red);
return(0);

}

Además, ¡es la primera orden que se modifica después de iniciar el Asesor Experto!

Evidentemente, he puesto mal la modificación de los pedidos en el código... ¡Por favor, ayúdenme!

res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);

OrderSelect(res, SELECT_BY_TICKET);
OrderModify(OrderTicket(),, OrderOpenPrice(),NormalizeDouble(Ask+StopLoss*Point, Dig its),NormalizeDouble( Ask-TakeProfit*Point, Digits),0,Red);
 
ilunga:
res=Enviar orden(Símbolo(),OP_Venta,0,01,Oferta,3,0,0, "básico",_NúmeroMágico,0,Rojo);

OrderSelect(res, SELECT_BY_TICKET);
OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble( Ask+StopLoss*Point,Digits),NormalizeDouble( Ask-TakeProfit*Point,Digits),0,Red);
¡¡¡Gracias por el consejo!!!
 
Sancho77:
Estimados programadores, pido ayuda para modificar el Expert Advisor: tengo una posición abierta y al cabo de un tiempo hay una segunda señal para abrir la posición en la misma dirección. Quiero llenar la posición por la segunda señal sólo si la primera orden ya está en la posición más. Lo he implementado comparando el tamaño del saldo y la equidad (si la equidad es mayor que el saldo, la orden abierta está en el plus).
¿Puedes sugerir un código para determinar el beneficio/pérdida de la última orden abierta que tienes?

Si su número de billete está guardado, entonces simplemente

OrderSelect(ticket, SELECT_BY_TICKET);

if (OrderProfit() > )

{

          // доливаем ордер

}
 
ilunga:

Si su número de billete está guardado, simplemente


Gracias. ¿Pueden decirme cómo guardar el ticket del último pedido?
 
Sancho77:
Gracias. ¿Pueden aconsejar cómo guardar el ticket del último pedido?

bueno, la opción más sencilla es declarar una variable global int ticket

y sustituir ticket = OrderSend(...) en todas partes por ticket = OrderSend(...)

siempre almacenará el número de la última orden abierta

O bien, ¡consulte el tema "Funciones útiles de KimIV" únicamente!

 
ilunga:

bueno, la opción más sencilla es declarar una variable global int ticket

y sustituir ticket = OrderSend(...) en todas partes por ticket = OrderSend(...)

siempre almacenará el número de la última orden abierta

o ver sólo el tema "Funciones útiles de KimIV".

Gracias por toda su ayuda.
 
rustein:

Ayúdame a encontrar un error,

Gracias


BuySL*Point // зачем умножать на Point ? Тоже самое для SelSL*Point
 
khorosh:

Gracias,

No sé... Pensé que funcionaría, no funciona sin ninguno de los dos, lo hice así y funciona....

//-----
  double Spread = (NormalizeDouble(Ask,Digits) - NormalizeDouble(Bid,Digits)) / Point;
  double BuySL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,0,1),Digits);
  double SelSL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,1,1),Digits);
//-----
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)
  {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;
    {
      if(OrderType() == OP_BUY && OrderMagicNumber()==Magic && OrderStopLoss() != BuySL-Spread*Point
      && BuySL-Spread*Point > OrderStopLoss() && BuySL-Spread*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL-Spread*Point,OrderTakeProfit(),0,CLR_NONE);
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL+Spread*Point
      && SelSL+Spread*Point < OrderStopLoss() && SelSL+Spread*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL+Spread*Point,OrderTakeProfit(),0,CLR_NONE);
      }
    }
  }
}

 
Roger:
¡¡¡¡PRICE_OPEN !!!! - ¡no se puede utilizar este precio! Sólo funciona para los indicadores. Utilice la oferta o la demanda.

¡¡¡Gracias!!! Sí, es una posibilidad cierta.
 

Chicos una pregunta más complicada......

Cómo hacer que un EA cierre todas las órdenes cuando se alcanza un determinado beneficio .... Cerrar sólo las órdenes sobre un símbolo ...

Ejemplo : EA trabaja en 3 pares cantidad para cerrar todas las órdenes en un símbolo 100p ...

Si el EUR tiene más de 100p sólo cerrará las órdenes en EUR mientras que otras pueden tener 200p ...

¡¡¡¡Si tomo accountbalanse() entonces el asesor se cerrará sólo cuando la suma de los tres pares es más de 100p. esta opción no se ajusta a mí !!!!

Ayuda por favor.........

Razón de la queja: