Questions des débutants MQL4 MT4 MetaTrader 4 - page 5

 
Les gars, s'il vous plaît, dites-moi ce qui ne va pas avec le testeur. Au lieu des chandeliers, il montre seulement les prix d'ouverture dans le mode "Tous les ticks, la méthode la plus précise" et dans les autres modes aussi.
MT4 Batter volume est également inadéquate dans le testeur
Dossiers :
 

Pouvez-vous me dire pourquoi il s'ouvre à chaque 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:

Pouvez-vous me dire pourquoi il s'ouvre à chaque tic?

Parce que je teste toujours dans ce mode

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);
  }
Dossiers :
 
Ibragim Dzhanaev:

Pouvez-vous me dire pourquoi il s'ouvre à chaque tic-tac?

Parce que c'est ainsi que le code est écrit.

En termes simples, votre algorithme ressemble à ceci : s'il n'y a pas d'ordres, ouvrez l'option Achat, et à chaque tick, ouvrez l'option Vente.

 
Vitalie Postolache:

Parce que c'est comme ça que le code est écrit.

En termes simples, votre algorithme ressemble à ceci : s'il n'y a pas d'ordre, ouvrez un Achat, et à chaque tick, ouvrez une Vente.

Comment pouvez-vous modifier le code pour qu'il fonctionne sans conditions supplémentaires ?
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:
Comment modifier le code pour qu'il fonctionne sans conditions supplémentaires ?

Mais vous ne pouvez pas, si vous devez à la fois acheter et vendre et limiter leur nombre. Seulement je ne regarderais pasOrdersTotal(), et compterais combien d'achats et combien de ventes.

Et encore une fois, pourquoi avez-vous besoin de ce "if(Sborinfo(Magic)==0)" si vous utilisez ensuiteOrdersTotal() ?

 
Vitalie Postolache:

Mais vous ne pouvez pas, si vous devez à la fois acheter et vendre et limiter leur nombre. Seulement je ne regarderais pasOrdersTotal(), et compterais combien d'achats et combien de ventes.

Et encore une fois, pourquoi avez-vous besoin de ce "if(Sborinfo(Magic)==0)", si vous utilisez ensuiteOrdersTotal() ?

Vous voulez dire comme ça ? Existe-t-il d'autres options, plus 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);
      }
 

Camarades ! J'ai une question.
Le conseiller expert ouvre des ordres en suspens à 00:00 du début de la journée sur la base des extremums de la journée précédente.

En semaine, tout fonctionne bien, mais avec l'ouverture du lundi, lesordres en attente ne sont pas placés aux extrêmes du vendredi, mais aux niveaux du jeudi pour une raison quelconque. Comment cela se fait-il ?

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:
Tu veux dire comme ça ? Y a-t-il d'autres options - plus simples ?

Oui, c'est à peu près ça. Combien plus simple ?

 
Vitalie Postolache:

Oui, c'est à peu près ça. Comment cela pourrait-il être plus facile ?

Connaissez-vous des cours sur les tableaux ? Si vous le faites, envoyez-moi le lien.
Raison: