Antwort

Mögliche Kodierung, um die Eröffnung mehrerer Gewerke über die maximale Losgröße hinaus zu ermöglichen

0 Antworten

jbrunet

Abonnent, bbp_participant, Gemeinschaft, 13 Antworten.

Profil besuchen

vor 10 Jahren #111607

Die meisten Broker haben ein Limit für die Anzahl der Lots, die sie Ihnen erlauben, zu eröffnen. In manchen Fällen ist es wünschenswert, mehrere Geschäfte zu eröffnen, um eine Anzahl offener Lots zu erreichen, die über die Höchstgrenze des Brokers für ein einziges Handelsticket hinausgeht. Ich habe einige Experimente durchgeführt und festgestellt, dass die folgende Änderung der Funktion sqOpenOrderWithErrorHandling() dies ermöglicht. Ich biete dies als Vorschlag für zukünftige Versionen an, falls dies von den Entwicklern und anderen Benutzern als wünschenswert erachtet wird. Wenn jemand dies ausprobieren möchte, steht es ihm frei, es zu versuchen, aber stellen Sie sicher, dass Sie es gründlich testen, um sicherzustellen, dass es nichts anderes kaputt macht. Meine persönlichen Tests haben (bisher) ergeben, dass es keine anderen Funktionen beeinträchtigt, und so habe ich es mit gutem Erfolg verwendet.

 

Bitte beachten Sie, dass ich anstelle von LotsDecimals, das vom EA-Assistenten als double definiert ist, in der Regel eine int-Variable, decimals, verwende, die eine globale int-Variable ist und als die Anzahl der Dezimalstellen definiert ist, die von diesem bestimmten Broker für die Losgröße zugelassen werden. In den meisten Fällen sind es 2, bei Brokern, die Mikro-Lots erlauben. Ich habe LotsDecimals in meiner benutzerdefinierten Codierung unten verwendet, da dies die Norm für EA Wizard ist, aber in meiner eigenen Praxis verwende ich stattdessen die int-Variable decimals.

 

int sqOpenOrderWithErrorHandling(string symbol, int orderType, double orderLots, double price, double realSL, double realPT, string comment, int orderMagicNumber) {
   int ticket, error;
 
***** Benutzerdefinierter hinzugefügter Code
  double mmaxlots=MarketInfo(Symbol(), MODE_MAXLOT) ;
  double mminlots=MarketInfo(Symbol(), MODE_MINLOT) ;
 
  double jlots=orderLots ;     
  double ilots=0.0 ;
  while(jlots>0.0) 
    {
        ilots=jlots ;
        if(ilots>mmaxlots) ilots=mmaxlots ;
        if(ilots<mminlots) ilots=mminlots ;
        ilots=NormalizeDouble(ilots,LotsDecimals) ;
        jlots=jlots-ilots ;
      
 
 
   if(symbol == "NULL") {
      ticket = OrderSend(Symbol(), orderType, ilots, price, MaxSlippage, 0, 0, comment, orderMagicNumber);
   } sonst {
      ticket = OrderSend(symbol, orderType, ilots, price, MaxSlippage, 0, 0, comment, orderMagicNumber);
   }
**** Ende des benutzerdefinierten hinzugefügten Codes für diesen Abschnitt...Siehe zusätzlichen Code am Ende der Funktion.
 

 

   if(ticket < 0) {
      // Bestellung fehlgeschlagen, Fehler ins Protokoll schreiben
      return(-1*GetLastError());
   }
 
   OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
   Log("Order geöffnet: ", OrderTicket(), " zum Preis:", OrderOpenPrice());
 
   // Stop-Loss und Gewinnziel einrichten
   // es muss separat erfolgen, um ECN-Broker zu unterstützen
   if((realSL > 0 || realPT > 0) && (OrderStopLoss() != realSL || OrderTakeProfit() != realPT))) {
      if(OrderModify(ticket, OrderOpenPrice(), realSL, realPT, 0, 0)) {
         Log("Auftrag geändert, StopLoss: ", realSL,", Profit Target: ", realPT);
      } sonst {
         error = GetLastError();
         Log("Fehler beim Ändern der Bestellung: ",error, " : ", ErrorDescription(error));
 
         RefreshRates();
         if(orderType == OP_BUY) price = Ask;
         if(orderType == OP_SELL) price = Bid;
         if(OrderClose(ticket, orderLots, price, 6) != true) {
            error = GetLastError();
            Log("Auftrag kann nicht geschlossen werden: ", OrderTicket(), ", Fehler beim Öffnen der Bestellung : ",error, " : ", ErrorDescription(error));
            return(-1*Fehler);
         }
      }
   }
 
***** Zusätzlich hinzugefügter Code

 

  if(jlots>0.0) continue ;
 }  
 
**** Ende des individuell hinzugefügten Codes für diesen Abschnitt

 

 
  zurück(ticket);
}

0