Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 5

 
Pessoal, por favor, avisem o que há de errado com o testador. em vez de candelabros, ele mostra os preços de abertura no modo "Todos os carrapatos, o método mais preciso" e em outros modos também.
O volume da bateria MT4 também é inadequado no equipamento de teste.
Arquivos anexados:
 

Você pode me dizer por que ele abre a cada tique?

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:

Você pode me dizer por que ele abre a cada tique?

Porque eu sempre testei neste 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);
  }
Arquivos anexados:
 
Ibragim Dzhanaev:

Você pode me dizer por que ele abre a cada tique?

Porque é assim que o código é escrito.

Em termos simples, seu algoritmo é assim: se não houver pedidos, abrir Comprar, e a cada carrapato, abrir Vender.

 
Vitalie Postolache:

Porque é assim que o código é escrito.

Em termos simples, seu algoritmo é assim: se não houver pedidos, abra uma Compra, e a cada tique, abra uma Venda.

Como você pode alterar o código para que ele funcione sem condições adicionais ?
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:
Como você muda o código para trabalhar sem condições adicionais ?

Mas você não pode, se precisar tanto comprar como vender e limitar o número deles. Só que eu não olharia para oOrderTotal(), e contaria quanto compraria e quanto venderia.

E novamente, por que você precisa deste "if(Sborinfo(Magic)==0)" se você então usaOrderTotal()?

 
Vitalie Postolache:

Mas você não pode, se precisar tanto comprar como vender e limitar o número deles. Só que eu não olharia para oOrderTotal(), e contaria quanto compraria e quanto venderia.

E novamente, por que você precisa deste "if(Sborinfo(Magic)==0)", se você então usaOrderTotal()?

Você quer dizer assim? Existem outras opções - mais simples?
{
  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! Eu tenho uma pergunta.
O Expert Advisor abre as ordens pendentes às 00:00 do início do dia, com base nos extremos do dia anterior.

Nos dias de semana, tudo funciona bem, mas com a abertura na segunda-feira,os pedidos pendentes não são colocados nos extremos da sexta-feira, mas nos níveis da quinta-feira, por alguma razão. Como assim?

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:
Você quer dizer assim? Existem outras opções - mais simples?

Sim, é mais ou menos isso mesmo. Quão mais simples?

 
Vitalie Postolache:

Sim, é mais ou menos isso mesmo. Quão mais fácil poderia ser?

Por acaso você conhece alguma lição sobre arrays? Se o fizer, por favor, envie-me o link.
Razão: