EA schickt im realmode keine Order - Seite 2

 
Otto Pauser:

Hallo David,

normalerweise ist es umgekehrt. MT4 hedging, MT5 netting.

Am Code ändert sich prinzipiell nichts, im Nettingmode werden die Positionen einfach zusammengefasst,

im Hedgingmode werden neue zusätzliche Positionen eröffnet. Deswegen ist hier das iterieren über alle Positionen erforderlich.

Also ändert sich doch was, aber das würde hier den Rahmen sprengen.

Wichtig ist im MT5 die Unterscheidung zwischen Position, Order und Deal (steht alles in derDokumentation).

Schau doch im Log nach was da los ist, da steht drin warum er eine Order nicht ausführen kann!!!!!!!!!

LG, Otto

Hallo, welche Art von MT5 Account hast du denn ? Netting oder Heding?

Falls Heding, dann versuche mal bitte:


mrequest.type_filling = ORDER_FILLING_IOC;

Oder, falls die Anwendung auf verschiedenen Kontotypen möglich sein soll:

   ENUM_ACCOUNT_MARGIN_MODE acmm=(ENUM_ACCOUNT_MARGIN_MODE) AccountInfoInteger(ACCOUNT_MARGIN_MODE);
   if(acmm == ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)
        mrequest.type_filling = ORDER_FILLING_IOC;
   else
        mrequest.type_filling = ORDER_FILLING_FOK;
 

Ich arbeite im Netting-Mode, mein Broker bietet beide Modi an, und du hast immer noch nicht in's Log geschaut.

Ich glaub ich hab jetzt genug geantwortet.

 

Hallo Community,

danke nochmal für die Antworten, habe jetzt ne Lösung gefunden das Ding läuft jetzt im Hedgingmode, musste halt ein paar sachen ändern.


#define EXPERT_MAGIC 343 //Wichtig ohne das Ding läufts nicht

//---------------------     Funtion zum Öffnen des trades -----------------------
void LongPositionOpen(string command,double lots,double stopLoss,double takeProfit, string KOMMENTAR)
  {
   ResetLastError();
   MqlTick             tick;    SymbolInfoTick(_Symbol,tick);
   MqlTradeRequest     request; ZeroMemory(request);
   MqlTradeResult      result;  ZeroMemory(result);
   MqlTradeCheckResult check;   ZeroMemory(check);
   
   request.action       = TRADE_ACTION_DEAL;
   request.symbol       = Symbol();
   request.volume       = HandelsLots;
   request.type         = ORDER_TYPE_BUY;
   request.price        = SymbolInfoDouble(Symbol(),SYMBOL_ASK);
   request.type_filling = ORDER_FILLING_FOK;
   request.deviation    = 100;
   request.sl           = stopLoss;
   request.tp           = takeProfit;
   request.comment      = KOMMENTAR;
   request.magic        = EXPERT_MAGIC;
//--- Anfrage senden
   if(!OrderSend(request,result))
      PrintFormat("OrderSend error %d",GetLastError());     // wenn die Anfrage konnte nicht gesendet werden, den Fehlercode anzeigen
//--- Details zur Transaktion
   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
  
}


//--------------------   Funtion zum Schließen des trades --------------------------
void LongPositionClose()
{ 
 //--- die Anfrage und das Ergebnis deklarieren
   MqlTradeRequest request;
   MqlTradeResult  result;
   int total=PositionsTotal(); // Anzahl offener Positionen   
//--- in allen offenen Positionen suchen
   for(int i=total-1; i>=0; i--)
     {
      //--- Parameter der Order
      ulong  position_ticket=PositionGetTicket(i);                                      // das Ticket der Position
      string position_symbol=PositionGetString(POSITION_SYMBOL);                        // Symbol 
      int    digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS);              // Stellen nach dem Komma
      ulong  magic=PositionGetInteger(POSITION_MAGIC);                                  // MagicNumber der Position
      double volume=PositionGetDouble(POSITION_VOLUME);                                 // das Volumen der Position
      ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);    // Typ der Position
      //--- Details zur Position anzeigen
      PrintFormat("#%I64u %s  %s  %.2f  %s [%I64d]",
                  position_ticket,
                  position_symbol,
                  EnumToString(type),
                  volume,
                  DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
                  magic);
      //--- wenn MagicNumber übereinstimmt
      if(magic==EXPERT_MAGIC)
        {
         //--- die Werte der Anfrage und des Ergebnisses auf Null setzen
         ZeroMemory(request);
         ZeroMemory(result);
         //--- Parameter der Transaktion setzen
         request.action   =TRADE_ACTION_DEAL;        // Typ der Transaktion
         request.position =position_ticket;          // das Ticket der Position
         request.symbol   =position_symbol;          // Symbol 
         request.volume   =volume;                   // das Volumem der Position
         request.deviation=50;                        // zulässige Abweichung vom Preis
         request.magic    =EXPERT_MAGIC;             // MagicNumber der Position
         //--- den Preis und den Ordertyp je nach dem Positionstyp setzen
         if(type==POSITION_TYPE_BUY)
           {
            request.price=SymbolInfoDouble(position_symbol,SYMBOL_BID);
            request.type =ORDER_TYPE_SELL;
           }
         else
           {
            request.price=SymbolInfoDouble(position_symbol,SYMBOL_ASK);
            request.type =ORDER_TYPE_BUY;
           }
         //--- Informationen über das Schließen anzeigen
         PrintFormat("Close #%I64d %s %s",position_ticket,position_symbol,EnumToString(type));
         //--- Senden der Anfrage
         if(!OrderSend(request,result))
            PrintFormat("OrderSend error %d",GetLastError());  // wenn die Anfrage konnte nicht gesendet werden, den Fehlercode anzeigen
         //--- Details zur Transaktion   
         PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
         //---
        }
    }
}

Mein fehler war, hatte die Magicnumber normal als int variable Definiert, dadurch lief es nicht.

define EXPERT_MAGIC 1234 // So ist es Richtig
Grund der Beschwerde: