Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 5

 
Chicos, por favor, aconsejen que es lo que está mal con el probador. en lugar de velas sólo muestra los precios de apertura en el modo "Todos los ticks, el método más preciso" y en otros modos también.
El volumen de MT4 Batter también es inadecuado en el probador
Archivos adjuntos:
 

¿Puede decirme por qué se abre en cada tic?

void OnTick()
  {
   Alert(Sborinfo(Magic));
   if(Sborinfo(Magic)<=0)
     {
      MassivPrice(step); 
      tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,0,0,NULL,0,0,Blue);
      if(tiket>=0
         LastPrice=Ask
      else LastPrice=-1
     }
   MassivPrice(step);
   tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,0,0,0,NULL,0,0,Red);
   if(tiket>=0)
      LastPrice=Bid;
   else LastPrice=-1;
  }
//+------------------------------------------------------------------+
int Sborinfo(int magic)
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      Print("колличество ордеров ",kol);
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==magic)
         kol++;
     }
   Print("новые ордера ",kol);
   return(kol);
  }
 
Ibragim Dzhanaev:

¿Puede decirme por qué se abre en cada tic?

Porque siempre pruebo en este modo

void OnTick()
  {
   Alert(Sborinfo(Magic));
   if(Sborinfo(Magic)<=0)
     {
      MassivPrice(step); 
      tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,0,0,NULL,0,0,Blue);
      if(tiket>=0
         LastPrice=Ask
      else LastPrice=-1
     }
   MassivPrice(step);
   tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,0,0,0,NULL,0,0,Red);
   if(tiket>=0)
      LastPrice=Bid;
   else LastPrice=-1;
  }
//+------------------------------------------------------------------+
int Sborinfo(int magic)
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      Print("колличество ордеров ",kol);
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==magic)
         kol++;
     }
   Print("новые ордера ",kol);
   return(kol);
  }
Archivos adjuntos:
 
Ibragim Dzhanaev:

¿Puede decirme por qué se abre en cada tic?

Porque así es como está escrito el código.

En términos sencillos, su algoritmo es el siguiente: si no hay órdenes, abre Compra, y en cada tick, abre Venta.

 
Vitalie Postolache:

Porque así es como está escrito el código.

En términos sencillos, su algoritmo es el siguiente: si no hay órdenes, abre una Compra, y en cada tick, abre una Venta.

¿Cómo se puede cambiar el código para que funcione sin condiciones adicionales?
Alert(Sborinfo(Magic));
  // Closse(Magic);
   if(Sborinfo(Magic)==0)
     {
     Print("количество ордеров ",Sborinfo(Magic));
      MassivPrice(step);
      if(OrdersTotal()<2)// без таких условий
         tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,slippage,0,0,NULL,0,0,Green);
      if(tiket>=0)
         LastPrice=Ask;  
     }

   MassivPrice(step);
   if(OrdersTotal()<2)// без таких условий
      tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,slippage,0,0,NULL,0,0,Red);
   if(tiket>=0)
      LastPrice=Bid;
  
  }
//+------------------------------------------------------------------+
int Sborinfo(int magic)
  {
  kol=0;
   for(int i=0; i<OrdersTotal(); i++)
     {
     Print(" чему ровно кол " , kol );
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==magic)
      {
      Print(" ордера после " , kol );
      
        // kol++;
         }
     }
   return(kol);
  }
 
Ibragim Dzhanaev:
¿Cómo se cambia el código para que funcione sin condiciones adicionales?

Pero no puedes, si necesitas tanto comprar como vender y limitar su número. Sólo que no miraríaOrdersTotal(), y contaría cuánto compra y cuánto vende.

Y de nuevo, ¿por qué necesitas este "if(Sborinfo(Magic)==0)" si luego utilizasOrdersTotal()?

 
Vitalie Postolache:

Pero no puedes, si necesitas tanto comprar como vender y limitar su número. Sólo que yo no miraríaOrdersTotal(), y contaría cuánta compra y cuánta venta.

Y de nuevo, ¿por qué necesita este "if(Sborinfo(Magic)==0)", si luego utilizaOrdersTotal()?

¿Te refieres a esto? ¿Hay otras opciones más sencillas?
{
  CloseFirst(Magic);
   int b=0;
   int s=0;
   for(int i=0; i<=OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol )
        {
         if(OrderType()==OP_BUY)
            b++;
         if(OrderType()==OP_SELL)
            s++;
        }
   if(b==0)
      tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,slippage,0,0,NULL,Magic,0,Green);
  if(s==0)
      tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,slippage,0,0,NULL,Magic,0,Red);
      }
 

¡Camaradas! Tengo una pregunta.
El Asesor Experto abre las órdenes pendientes a las 00:00 del comienzo del día basándose en los extremos del día anterior.

Entre semana, todo funciona bien, pero con la apertura del lunes,las órdenes pendientes no se colocan en los extremos del viernes, sino en los niveles del jueves por alguna razón. ¿Por qué?

OpenTime="00:00";
currtime=TimeToStr(TimeCurrent(),TIME_MINUTES);
Format=Digits();
DH=NormalizeDouble(iHigh(NULL,PERIOD_D1,1),Format) ;
DL=NormalizeDouble(iLow(NULL,PERIOD_D1,1),Format);
if (currtime==OpenTime)
{
отложки
}
 
Ibragim Dzhanaev:
¿Te refieres a esto? ¿Hay otras opciones más sencillas?

Sí, así es. ¿Cuánto más simple?

 
Vitalie Postolache:

Sí, así es. ¿Cuánto más fácil puede ser?

¿Conoces alguna lección sobre matrices? Si lo hace, por favor envíeme el enlace.