Fehler, Irrtümer, Fragen - Seite 2412

 
Andrey Barinov:

Dann debuggen Sie es. Drucken Sie Transaktionsscheine aus und sehen Sie im Prüfgerät, was dort tatsächlich ausgewählt ist. Fügen Sie jedoch einen Filter für die Geschäftsart hinzu.

Das Los wird korrekt angezeigt, so dass der Schein korrekt ausgewählt wird.

 
Andrey Dik:

das Los ist richtig, also ist auch der Schein richtig.

Nein. Beide Geschäfte, In und Out, haben das gleiche Los. Aber der Gewinn ist es nicht.

Hier ist mein Code. Es funktioniert.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
ulong LastOutDealTicket(const string symbol,const uint magic)
  {
//===============
   long lasttime=0;
//===============

//===============
   ulong ticket=0;
//===============

//===============
#ifdef __MQL5__
//===============
   ::HistorySelect(0,TimeCurrent()+60);
//===============
   const int deals=::HistoryDealsTotal();
//===============
   for(int i=deals-1;i>=0;i--)
     {
      //===============
      const ulong tempticket=::HistoryDealGetTicket(i);
      //===============

      //===============
      if(::HistoryDealGetInteger(tempticket,DEAL_ENTRY)!=DEAL_ENTRY_OUT || ::HistoryDealGetString(tempticket,DEAL_SYMBOL)!=symbol ||
         ::HistoryDealGetInteger(tempticket,DEAL_MAGIC)!=magic)continue;
      //===============

      //===============
      if(::MQLInfoInteger(MQL_TESTER))return(tempticket);
      //===============

      //===============
      if(::HistoryDealGetInteger(tempticket,DEAL_TIME)<=lasttime)continue;
      //===============

      //===============
      ticket=tempticket;
      lasttime=::HistoryDealGetInteger(tempticket,DEAL_TIME);
      //===============
     }
//===============
#endif 
//===============

//===============
#ifdef __MQL4__
//===============
   const int ordershistory=OrdersHistoryTotal();
//===============
   for(int i=ordershistory-1;i>=0;i--)
     {
      //===============
      if(!::OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) || ::OrderSymbol()!=symbol || ::OrderMagicNumber()!=magic || 
         (::OrderType()!=OP_SELL && ::OrderType()!=OP_BUY))continue;
      //===============

      //===============
      if(::MQLInfoInteger(MQL_TESTER))return(::OrderTicket());
      //===============

      //===============
      if(::OrderCloseTime()<=lasttime)continue;
      //===============

      //===============
      ticket=::OrderTicket();
      lasttime=::OrderCloseTime();
      //===============
     }
//===============
#endif 
//===============

//===============
   return(ticket);
//===============
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastClosedProfit(const string symbol,const uint magic)
  {
//===============
   const ulong lastoutticket=::LastOutDealTicket(symbol,magic);
//===============

//===============
   if(lastoutticket<=0)return(0);
//===============

//===============
   double result=0;
//===============

//===============
#ifdef __MQL5__
//===============
   result=::HistoryDealGetDouble(lastoutticket,DEAL_PROFIT);
//===============
#endif 
//===============

//===============
#ifdef __MQL4__
//===============
   if(::OrderSelect((int)lastoutticket,SELECT_BY_TICKET,MODE_HISTORY))result=::OrderProfit();
//===============
#endif 
//===============

//===============
   return(result);
//===============
  }
 
Andrey Barinov:

Nein. Beide Geschäfte, In und Out, haben das gleiche Los. Der Gewinn ist es nicht.

Hier ist mein Code. Es funktioniert.

ausprobiert, Ihr Code ergibt auch 0,0)))

Das Konto ist, wenn überhaupt, abgesichert.
 
Andrey Dik:

ausprobiert, Ihr Code ergibt auch 0,0)))

Das Konto ist, wenn überhaupt, abgesichert.

Ich habe soeben alles für das Baujahr 2009 überprüft. Mein Code gibt aus, was er soll. Wenn es 0 ergibt, bedeutet das, dass Sie dort 0 haben.

 
Andrey Barinov:

Ich habe soeben alle Daten der 2009er Version überprüft. Mein Code gibt das aus, was er ausgeben soll. Wenn es 0 ergibt, bedeutet das, dass Sie dort 0 haben.

Wie kommt es, dass es in der Historie geschlossene Geschäfte mit einem Ergebnis ungleich Null gibt, und es ergibt 0

 
Andrey Barinov:
Andrej Dik:

Es besteht die Möglichkeit, dass das Problem auf der Gleichstromseite liegt.

 
Alexey Kozitsyn:

Es besteht die Möglichkeit, dass das Problem auf der Gleichstromseite liegt.

Ich habe es mit Metaquotes und Robo im Testprogramm ausprobiert.

 
Habe meinen Fehler gefunden... Mein Fehler war, dass ich keinen Majik an die Positionsschließungsfunktion übergeben habe, sondern an die Eröffnungsfunktion, und als Ergebnis konnte das Geschäft nicht durch den Majik ausgewählt werden...
 

Wenn Sie CSymbolInfo in einer Mehrfachwährung verwenden, wird die Methode Name zum Zeitpunkt der Initialisierung aufgerufen:

if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
   return(false);
if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
   return(false);
if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
   return(false);

Während des Tests treten USDCAD-Symbolfehler auf:

no prices for symbol
 
Andrey Pogoreltsev:

Wenn Sie CSymbolInfo in einer Mehrfachwährung verwenden, wird die Methode Name zum Zeitpunkt der Initialisierung aufgerufen:

Während des Tests treten Fehler für das USDCAD-Symbol auf:

Versteht überhaupt jemand, wovon wir sprechen?