[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 170

 
Zhunko:
No hay funciones o macros en MQL4 que devuelvan el número de compilación.


Lo tengo. Senkue.

Pensé que era posible hacer todo por analogía con la eliminación de un pedazo de código del tutorial fi nd responsable de búho de comercio sólo en una determinada cuenta, contraseña, etc.

 
Hola a todos. Por favor, ayuda.

Esto es lo esencial: Hay un bot que coloca automáticamente las órdenes pendientes, a un precio determinado.

Hay que prohibir que se haga una orden, siempre que la orden o una operación a ese precio estén abiertas.

Llevo tres días intentándolo y no hay suerte.
 

hay varias opciones.... hacer la prueba.

//
// проверим среди Выставленных ордеров /сработавших/ - есть ли Байка
//
void CheckOrdBye()
{
  int total = OrdersTotal();
  int TotalOpenOrders = 0;
  for( int cnt=0; cnt<total; cnt++){
     if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) == true)  {
        if (OrderSymbol()==Symbol() ) {
            if ( OrderType() == OP_BUY)   { OrdYN = 1; return;}
            if ( OrderType() == OP_SELL)  { OrdYN = 2; return;}
        }
     }
  }
}
 
bestfx:
Hola a todos. Por favor, ayuda.

Esto es lo esencial: Hay un bot que coloca automáticamente las órdenes pendientes, a un precio determinado. ...

Ponga esto delante del bloque de envío de pedidos:
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderOpenPrice()==bad_price) // bad_price - значение цены при котором не хотите выставить очередной ордер
      return(0);
}  }
 
Aleksander:

hay varias opciones.... hacer la prueba.



¿Podría comentar el código? No está claro qué hacer.
 
paladin80:
Ponga esto antes del bloque de envío de la orden:


¿Y si hay, por ejemplo, 30 pedidos?

La esencia es la siguiente: se colocan dos operaciones opuestas con una diferencia de 40 puntos del precio promediado hasta tres decimales.

Digamos 1.251 para eur/usd es decir comprar 1.253 vender 1.249 entonces el mercado por ejemplo recorta el precio de compra y vuelve a 1.251 y ahora coloca dos órdenes más a los mismos precios. Y mientras el mercado se movía hacia el precio de compra, el script podía colocar otras tantas órdenes y debían ser tratadas de la misma manera, es decir, un precio = una orden. ¿Cómo ponerlo en práctica?

 
bestfx:


¿Y si hay 30 pedidos, por ejemplo?

La esencia es la siguiente: se colocan dos tratos opuestos con una diferencia de 40 puntos del precio promediado hasta tres decimales.

Digamos 1.251 para eur/usd es decir comprar 1.253 vender 1.249 entonces el mercado por ejemplo recorta el precio de compra y vuelve a 1.251 y ahora coloca dos órdenes más a los mismos precios. Y mientras el mercado se movía hacia el precio de compra el script podía colocar otras tantas órdenes y debían ser tratadas de la misma manera, es decir, un precio = una orden. ¿Cómo ponerlo en práctica?


Sólo hay que hacer el Magic == precio
 
FAQ:

Sólo hay que hacer el Magic == precio

¿Podría ser un poco más específico?
 
Dividir el precio por los dígitos = reducirlo a un entero y escribirlo en un medjic, luego buscar el medjic en la matriz de órdenes abiertas antes de establecer una nueva orden.
 
bestfx:
Hola a todos. Por favor, ayuda.

La esencia es la siguiente: Hay un bot que coloca automáticamente las órdenes pendientes, a un precio determinado. ...
double main_price=1.251;
double price_to_byu=1.253;
double price_to_sell=1.249;
// --------
bool restriction=false;
if (Ask<=main_price)
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderType()==OP_BUY || OrderType()==OP_BUYSTOP)
      {  if (OrderOpenPrice()==price_to_byu) restriction=true;
}  }  }
if (restriction==false)
{  OrderSend(NULL,OP_BUYSTOP,Lot,price_to_byu, ...);
   return(0);
}
// --------
restriction=false;
if (Bid>=main_price)
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderType()==OP_SELL || OrderType()==OP_SELLSTOP)
      {  if (OrderOpenPrice()==price_to_sell) restriction=true;
}  }  }
if (restriction==false)
{  OrderSend(NULL,OP_SELLSTOP,Lot,price_to_sell, ...);
   return(0);
}

Si se realizan muchos pedidos similares, es necesario utilizar matrices. ¿Cómo? Lee sobre las matrices.