Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 726

 
Igor Petrov:

Grazie mille!!!

Potresti dirmi se questo (CHARTEVENT_CLICK) può essere usato quando si testa un EA?
 
Yuriy Vins:
Si può usare questo (CHARTEVENT_CLICK) quando si testa un EA?

Ahimè, no.

 
ukrop1203:

Ho scaricato i dati da MetaQuotes Software Corp nel menu "History Center", cosa c'entrano i dati del broker?

Da chi ha scaricato il terminale, è da lì che i dati vengono tirati in MT4. E più precisamente, e molto probabilmente - di chi è l'account in cui sei loggato al momento del download, tira fuori la storia da lì.

 
Vladimir Baskakov:
Cosa stai dicendo?

Che la gente come te dovrebbe essere spogliata del suo status di venditore. Vai a fare l'apprendista addetto alle pulizie.

 
Andrei Novichkov:

Che la gente come te dovrebbe essere spogliata del suo status di venditore. Vai a fare l'apprendista addetto alle pulizie.

Buona giornata.
 

Ciao a tutti,

Ho messo un pulsante di chiusura degli ordini nell'EA, ma chiude tutti gli ordini nel terminale. Mi serve solo sulla tabella attuale. Potete per favore aiutarmi?

//----------------------------------------------------------------------
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---            
   if(sparam== "CloseButton")
      {
      CloseAllOpenPositions(MaxSlippage); 
      ObjectSetInteger(0,"CloseButton",OBJPROP_STATE,false);    
      }   
      if(sparam== "CloseBuy")
      {
      CloseAllBuy(MaxSlippage); 
      ObjectSetInteger(0,"CloseBuy",OBJPROP_STATE,false);    
      }         
         if(sparam== "CloseSell")
      {
      CloseAllSell(MaxSlippage); 
      ObjectSetInteger(0,"CloseSell",OBJPROP_STATE,false);    
      }         
//---      
  }
  
//+------------------------------------------------------------------+
void CloseAllOpenPositions(int intMaxSlippage)
  {
   bool checkOrderClose = true;        
   int index = OrdersTotal()-1;   
   while (index >=0 && OrderSelect (index,SELECT_BY_POS,MODE_TRADES)==true)
      {
         
      if (OrderType()==OP_BUY || OrderType()==OP_SELL)
         {         
         checkOrderClose = OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(), MaxSlippage, CLR_NONE); 
         
         if(checkOrderClose == false)
            {
            int errorCode = GetLastError();
            
            if (errorCode == 1 || errorCode == 2 || errorCode == 5 || errorCode == 6 || errorCode == 64 || errorCode == 65 || errorCode == 132 || errorCode == 133 || errorCode == 139) break;
            else continue;        
            }          
         }           
      index--;
     }     
  }
  //----------------------------------------------------------------------------
 
Carcass77:

Ciao a tutti,

Ho messo un pulsante di chiusura degli ordini nell'EA, ma chiude tutti gli ordini nel terminale. Mi serve solo sulla tabella attuale. Potete per favore aiutarmi?

Sostituire la funzione di chiusura

//+------------------------------------------------------------------+
void CloseAllOpenPositions(int intMaxSlippage)
  {
   bool checkOrderClose=true;
   int index=OrdersTotal()-1;
   while(index>=0 && OrderSelect(index,SELECT_BY_POS,MODE_TRADES)==true)
     {
      if(OrderSymbol()==Symbol())   //Добавил  
        {

         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            checkOrderClose=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),intMaxSlippage,CLR_NONE);

            if(checkOrderClose==false)
              {
               int errorCode=GetLastError();

               if(errorCode==1 || errorCode==2 || errorCode==5 || errorCode==6 || errorCode==64 || errorCode==65 || errorCode==132 || 
                errorCode==133||errorCode==139) break;
               else continue;
              }
           }

        }
      index--;
     }
  }
//+------------------------------------------------------------------+
 
Alekseu Fedotov:

Sostituire la funzione di chiusura

Funziona. Grazie mille.

 
Inoltre, volevo aggiungere una funzione moltiplicatore per il passo con ogni commercio. Qualche consiglio?
 
Carcass77:
Inoltre, volevo aggiungere una funzione moltiplicatore per il passo con ogni commercio. Qualche consiglio?

Se si tratta di aumentare la dimensione del lotto di un nuovo ordine rispetto alla dimensione massima del lotto degli ordini già aperti, allora quando si contano gli ordini, ricordate la dimensione massima del lotto degli ordini

come questo:

//_______________________________________________________________________
//возвращает суммарное кол-во открытых рыночных ордеров, в переменных
// lotmaxbuy_ и lotmaxsell_ вернет максимальные лоты по типам ордеров
int NumberOfOrders(int magic_,double &lotmaxbuy_,double &lotmaxsell_)
  {
   int i,ot,buy_=0,sell_=0,k=OrdersTotal();
   lotmaxbuy_=0.0; lotmaxsell_=0.0;
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         ot=OrderType();
         if((OrderMagicNumber()==magic_) && (OrderSymbol()==_Symbol))
           {
            if(ot==OP_BUY) { buy_++;  lotmaxbuy_  = fmax(lotmaxbuy_,OrderLots());  }
            if(ot==OP_SELL){ sell_++; lotmaxsell_ = fmax(lotmaxsell_,OrderLots()); }
           }
        }
     }
   return(buy_+sell_);
  }
//+------------------------------------------------------------------+