Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 726

 
Igor Petrov:

Herzlichen Dank!!!

Bitte sagen Sie mir, ob dies (CHARTEVENT_CLICK) beim Testen eines EA verwendet werden kann?
 
Yuriy Vins:
Bitte sagen Sie mir, ob dies (CHARTEVENT_CLICK) beim Testen eines EA verwendet werden kann?

Leider nein.

 
ukrop1203:

Ich habe die Daten von MetaQuotes Software Corp im Menü "History Center" heruntergeladen, was haben die Daten des Brokers damit zu tun?

Von wem wurde das Terminal heruntergeladen, von wo aus die Daten in MT4 gezogen werden. Genauer gesagt, und höchstwahrscheinlich - in wessen Konto Sie zum Zeitpunkt des Herunterladens eingeloggt sind, von dort wird der Verlauf übernommen.

 
Vladimir Baskakov:
Was wollen Sie damit sagen?

Dass Leuten wie Ihnen der Status als Verkäufer entzogen werden sollte. Machen Sie eine Lehre als Sanitärfachkraft.

 
Andrei Novichkov:

Dass Leuten wie Ihnen der Status als Verkäufer entzogen werden sollte. Machen Sie eine Lehre als Sanitärfachkraft.

Ich wünsche Ihnen einen schönen Tag.
 

Hallo zusammen,

Ich habe eine Schaltfläche zum Schließen von Aufträgen in den EA eingefügt, aber es werden alle Aufträge im Terminal geschlossen. Ich brauche sie nur in der aktuellen Tabelle. Können Sie bitte helfen?

//----------------------------------------------------------------------
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:

Hallo zusammen,

Ich habe eine Schaltfläche zum Schließen von Aufträgen in den EA eingefügt, aber es werden alle Aufträge im Terminal geschlossen. Ich brauche sie nur auf der aktuellen Karte. Können Sie bitte helfen?

Ersetzen Sie die Schließfunktion

//+------------------------------------------------------------------+
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:

Ersetzen Sie die Schließfunktion

Es klappt. Ich danke Ihnen vielmals.

 
Außerdem wollte ich eine Multiplikatorfunktion für den Schritt bei jedem Handel hinzufügen. Irgendwelche Tipps?
 
Carcass77:
Außerdem wollte ich eine Multiplikatorfunktion für den Schritt bei jedem Handel hinzufügen. Irgendwelche Tipps?

Wenn es darum geht, die Losgröße eines neuen Auftrags im Verhältnis zur maximalen Losgröße der bereits geöffneten Aufträge zu erhöhen, sollten Sie bei der Zählung der Aufträge die maximale Losgröße der Aufträge berücksichtigen

wie diese:

//_______________________________________________________________________
//возвращает суммарное кол-во открытых рыночных ордеров, в переменных
// 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_);
  }
//+------------------------------------------------------------------+