Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 5

 
Ragazzi, per favore consigliate cosa c'è di sbagliato nel tester. invece di candele mostra solo i prezzi di apertura in modalità "Tutti i tick, il metodo più accurato" e anche in altre modalità.
MT4 Batter volum è anche inadeguato nel tester
 

Puoi dirmi perché si apre ad ogni tick?

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:

Puoi dirmi perché si apre ad ogni tick?

Perché faccio sempre i test in questo 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);
  }
 
Ibragim Dzhanaev:

Potete dirmi perché si apre ad ogni spunta?

Perché è così che il codice è scritto.

In termini semplici, il tuo algoritmo è così: se non ci sono ordini, apri Buy, e ad ogni tick, apri Sell.

 
Vitalie Postolache:

Perché è così che il codice è scritto.

In termini semplici, il tuo algoritmo è così: se non ci sono ordini, apri un Buy, e ad ogni tick, apri un Sell.

Come si può cambiare il codice per farlo funzionare senza condizioni aggiuntive?
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:
Come si fa a cambiare il codice per farlo funzionare senza condizioni aggiuntive?

Ma non si può, se è necessario sia comprare che vendere e limitare il loro numero. Solo che non guardereiOrdersTotal(), e conterei quanto comprare e quanto vendere.

E ancora, perché avete bisogno di questo "if(Sborinfo(Magic)==0)" se poi usateOrdersTotal()?

 
Vitalie Postolache:

Ma non si può, se è necessario sia comprare che vendere e limitare il loro numero. Solo che non guardereiOrdersTotal(), e conterei quanto comprare e quanto vendere.

E ancora, perché avete bisogno di questo "if(Sborinfo(Magic)==0)", se poi usateOrdersTotal()?

Vuoi dire come questo? Ci sono altre opzioni - più semplici?
{
  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);
      }
 

Compagni! Ho una domanda.
L'Expert Advisor apre gli ordini pendenti alle 00:00 dall'inizio della giornata in base agli estremi del giorno precedente.

Nei giorni feriali, tutto funziona bene, ma con l'apertura di lunedì,gli ordini pendenti non vengono piazzati agli estremi di venerdì, ma ai livelli di giovedì per qualche motivo. Come mai?

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:
Vuoi dire come questo? Ci sono altre opzioni - più semplici?

Sì, è più o meno così. Quanto più semplice?

 
Vitalie Postolache:

Sì, è più o meno così. Quanto potrebbe essere più facile?

Per caso conosci qualche lezione sugli array? Se lo fai, per favore mandami il link.
Motivazione: