Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1163

 
Roman:

Wenn sie eingegeben wurde, dann besteht ein Unterschied.
Das Lesen einer initialisierten Variablen ist immer schneller als das Lesen einer Funktion.

Es gibt keinen Unterschied. Ich kann den Link nicht mehr finden, aber die Antwort wurde schon vor langer Zeit gegeben.

 
Vladimir Karputov:

Es gibt keinen Unterschied. Ich kann den Link nicht mehr finden, aber die Antwort wurde schon vor langer Zeit gegeben.

Für Juan und die Compiler-Warnungen gibt es keinen Unterschied ))

 
Vladimir Karputov:

Es gibt keinen Unterschied. Beim Kompilieren wird alles in einem einzigen Aufruf zusammengefasst. Deshalb ist es besser , alles über Funktionen abzuwickeln.

Lasst uns auch darüber einen eigenen Thread eröffnen und darüber streiten wie über Pips und Punkte... Das wird den Leuten etwas zu tun geben...

Ihr liebt es, jedem eure Meinung aufzudrängen...

 

Es gibt einen MA mit einer gewissen Verschiebung. Es sei MA_shift = 5;

Warum ist es nur möglich, den richtigen Wert von MA aus dem Null-Balken des Diagramms zu erhalten, wenn eine doppelte negative Verschiebung an CopyBuffer übergeben wird?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);

MA_Buf[0] hat jetzt den richtigen Wert.

 
RickD:

Es gibt einen MA mit einer gewissen Verschiebung. Es sei MA_shift = 5;

Warum ist es nur möglich, den korrekten Wert von MA aus dem Nullbalken des Diagramms zu übernehmen, wenn Sie eine doppelte negative Verschiebung in CopyBuffer übergeben?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);

MA_Buf[0] hat jetzt den richtigen Wert.

Zeichnen Sie zunächst ein Bild und legen Sie mit dem Parameter "Verschiebung" fest, was für Ihren Indikator ein "Null-Balken" ist.

 
Roman:

Lesen einer Variablen, schneller als eine Funktion.

Nicht wirklich, ich habe überprüft, was schneller ist als _Symbol oder Symbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905.

die Zugriffszeit ist die gleiche, Code-Optimierung in MQL ist sehr cool, so verwenden, was bequem ist.

nach meinen Tests kann die Zugriffszeit unterschiedlich sein, je nachdem, wo die Variable beschrieben wird und mit welchen Modifikatoren, aber es gibt eine 2-5% Geschwindigkeit, die im Prinzip auf die Implementierung in einem bestimmten Build abgeschrieben werden kann, es hängt von der Build-Nummer

 
Können Sie mir sagen, wie ich am einfachsten und schnellsten das Ergebnis der letzten Transaktion für das aktuelle Symbol ermitteln kann? Weil in der Dokumentation alles so kompliziert ist. Um das Ergebnis zu erhalten, müssen Sie zuerst das Ticket des gewünschten Geschäfts finden. Um das Ticket zu finden, müssen Sie das Geschäft in der Historie anhand seines Indexes finden, der Index sollte in der Historie gesucht werden, ganz zu schweigen davon, dass Sie auch nach dem Symbol filtern müssen.
 
WinZip:
Könnten Sie mir bitte sagen, wie ich einfach und schnell das Ergebnis des letzten Handels mit dem aktuellen Symbol erhalten kann? Denn die Dokumentation ist sehr komplex. Um das Ergebnis zu erhalten, müssen Sie zuerst das Ticket des gewünschten Handels finden, um das Ticket zu finden, müssen Sie den Handel in der Geschichte durch seinen Index finden, der Index sollte in der Geschichte gesucht werden, nicht zu erwähnen, dass wir nach dem Symbol filtern sollten.

Um zu vermeiden, dass Sie jedes Mal die Handelshistorie aufrufen, fangen Sie das Geschäft einfach inOnTradeTransaction mit dem Typ

TRADE_TRANSACTION_DEAL_ADD - Hinzufügen eines Geschäfts zur Historie


//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_ticket       =0;
      long     deal_order        =0;
      long     deal_time         =0;
      long     deal_time_msc     =0;
      long     deal_type         =-1;
      long     deal_entry        =-1;
      long     deal_magic        =0;
      long     deal_reason       =-1;
      long     deal_position_id  =0;
      double   deal_volume       =0.0;
      double   deal_price        =0.0;
      double   deal_commission   =0.0;
      double   deal_swap         =0.0;
      double   deal_profit       =0.0;
      string   deal_symbol       ="";
      string   deal_comment      ="";
      string   deal_external_id  ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_ticket       =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
         deal_order        =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
         deal_time         =HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_time_msc     =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
         deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason       =HistoryDealGetInteger(trans.deal,DEAL_REASON);
         deal_position_id  =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);

         deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_price        =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
         deal_commission   =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
         deal_swap         =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
         deal_profit       =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);

         deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_comment      =HistoryDealGetString(trans.deal,DEAL_COMMENT);
         deal_external_id  =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
        }
      else
         return;
      ENUM_DEAL_ENTRY enum_deal_entry=(ENUM_DEAL_ENTRY)deal_entry;
      if(deal_symbol==m_symbol.Name() && deal_magic==InpMagic)
        {
         if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
           {
            
...
           }
        }
     }
  }

m_symbol.Name() - aktuelles Symbol, InpMagic - eindeutiger Bezeichner des Expert Advisors

 
Hallo Ich habe mich auf der Website und Facebook-Mail registriert und kann nicht in meta trader 5-4 erhalten helfen Sie mir mein Konto aufzufüllen
 
Igor Makanu:

keine Tatsache, ich habe überprüft, was schneller ist als _Symbol oder Symbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905

D.h. die Zugriffszeit ist ein und dasselbe, die Code-Optimierung in MQL ist sehr cool, also was auch immer bequem ist, verwenden Sie es.

nach meinen Tests die Zugriffszeit kann unterschiedlich sein, je nachdem, wo die Variable beschrieben wird und mit welchen Modifikatoren, aber es 2-5% Geschwindigkeit, die im Prinzip auf die Umsetzung in einem bestimmten Build abgeschrieben werden kann, hängt es von der Build-Nummer

Ich stimme zu, dass der Optimierer gut funktioniert, aber es ist falsch, sich immer auf den Optimierer des Compilers zu verlassen.
Sie müssen vorausschauend darüber nachdenken, wie der Code auf der Ebene des Speichers, der Initialisierung und der Wertrückgabe ausgeführt wird.
Das heißt, man berechnet die Anzahl der ausgeführten Aktionen pro Vorgang, und wenn es weniger Aktionen gibt, ist der Code schneller. Und machen Sie es sich zur Gewohnheit, sofort einen optimalen Code zu schreiben.
Bei kurzen Codes gibt es vielleicht keinen Unterschied, aber bei einem Projekt mit Hunderten von Dateien kann es zu Verzögerungen kommen,
und es wird nur einen Profiler geben und den Code neu schreiben. Jeder wählt seine eigene Harke )).

Googeln Sie auch nach Schlüsselwörtern

__inline 
__forceinline
Seltsamerweise sind sie in mql als undokumentiert aufgeführt.
Grund der Beschwerde: