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...
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);
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.
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 |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(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);
}
elsereturn;
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)
{
...
}
}
}
}
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.
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.
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 ))
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.
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.
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ö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
m_symbol.Name() - aktuelles Symbol, InpMagic - eindeutiger Bezeichner des Expert Advisors
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.
Seltsamerweise sind sie in mql als undokumentiert aufgeführt.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