for (int i =::ArrayResize(TmpSort, ::ArraySize(ARRAY)) - 1; i >= 0; i--)
Ich rate Ihnen nicht, es so zu schreiben. Wenn das System nicht in der Lage ist, dem Array die erforderliche Menge an Speicher zuzuweisen, läuft das Programm unbemerkt weiter, was unvorhersehbare Folgen hat.
Ich rate Ihnen nicht, es so zu schreiben. Wenn das System nicht in der Lage ist, die erforderliche Menge an Speicher für das Array zuzuweisen, läuft das Programm unauffällig weiter, was zu unvorhersehbaren Folgen führt.
Für den realen Handel bin ich verpflichtet, dies zu tun.
dann erhalten Sie eine detaillierte Benachrichtigung, falls ein Fehler bei der Ausführung von ArrayResize oder ArrayCopy auftritt.
Dies ermöglicht es Ihnen, schwer zu identifizierende Probleme bei der Weitergabe von Informationen durch Arrays zu erkennen, aber - was noch wichtiger ist - eine Meldung zu erhalten, dass der EA aufgrund eines Arrays außerhalb des Bereichs angehalten wurde (was nicht die Schuld des EA ist). Zum Beispiel wegen eines Speichermangels oder eines anderen Fehlers. Mit anderen Worten: Sie werden sofort wissen, dass ein anormales Anhalten des EA stattgefunden hat, und es nicht zufällig erst einige Stunden später bemerken.
Die HistoryTicks-Bibliothek enthält diese Zeile bereits (es besteht keine Notwendigkeit, sie hinzuzufügen), denn der Hauptzweck der Tools ist die Bekämpfung von Expert Advisors auf realen Konten.
Im Terminaljournal gab es nur einen solchen Eintrag in einem anderen Projekt.
MemoryException 4471871064 bytes not available, 0 heapmin result
Dank der eingefügten Zeile können die Einzelheiten des Geschehens im Benutzerprotokoll eingesehen werden
Alert: ThirdPartyTicks - ERROR in int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint)! - see the logs.
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 64: ::MQLInfoString(MQL_PROGRAM_PATH) = C:\Program Files\ICMarkets - MetaTrader 5\MQL5\Scripts\fxsaber\ThirdPartyTicks.ex5
PROGRAM_SCRIPTint ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 66: typename(T) = MqlTickint ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 67: sizeof(T) = 60int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 68: Res = -1int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 69: NewSize = 129140int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 70: Reserve = 74402041int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 71: ::ArraySize(Array) = 129139int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 72: PrevSize = 129139int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 73: NewSize*sizeof(T) = 7748400int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 74: PrevSize*sizeof(T) = 7748340int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 75: Reserve*sizeof(T) = 169155164int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 76: ::GetLastError() = 4004int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 77: DuringTime = 1195int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 79: ::TerminalInfoInteger(TERMINAL_BUILD) = 2138int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 80: ::TerminalInfoInteger(TERMINAL_DISK_SPACE) = 6344int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 81: ::TerminalInfoInteger(TERMINAL_MEMORY_PHYSICAL) = 16301int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 82: ::TerminalInfoInteger(TERMINAL_MEMORY_AVAILABLE) = 31530int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 83: ::TerminalInfoInteger(TERMINAL_MEMORY_TOTAL) = 32602int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 84: ::TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1072int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 86: ::ChartID() = 132088214536525342int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 87: ::PeriodSeconds() = 60int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 88: ::Symbol() = EURUSD
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 89: ::TimeCurrent() = 2019.09.1019:49:15int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 90: ::TimeLocal() = 2019.09.1019:49:12int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 94: ::SymbolInfoTick(_Symbol,Tick) = true
time = 2019.09.1019:49:13.178 bid = 1.10436 ask = 1.10439 last = 0.00000 volume = 02TICK_FLAG_BIDint ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 97: ::ChartSetInteger(0,CHART_BRING_TO_TOP,true) = true
array out of range in 'Array.mqh' (11,10)
Ich habe verschiedene Varianten der Funktion SymbolInfoDouble(symbol, ...) in MQL5 ausprobiert, ich kann die richtige Variante nicht finden, sie gibt überall 0 zurück.
Ich habe verschiedene Varianten der Funktion SymbolInfoDouble(symbol, ...) in MQL5 ausprobiert, ich kann die richtige Variante nicht finden, sie gibt überall 0 zurück.
Все продукты Маркета перед публикацией проходят обязательную предварительную проверку, так как небольшая ошибка в логике советника или индикатора может привести к убыткам на торговом счете. Именно поэтому нами разработана серия базовых проверок, призванных обеспечить необходимый уровень качества продуктов Маркета. Если в процессе проверки...
Es tut mir leid, ich habe nicht verstanden, warum ich diesen Link brauche. Ich habe dort keine Antwort auf meine Frage gefunden.
Was genau haben Sie an dem Artikel nicht verstanden?
Beispiele für Kontrollen:
MQL5
bool CheckMoneyForTrade(string symb,double lots,ENUM_ORDER_TYPE type)
{
//--- получим цену открытияMqlTick mqltick;
SymbolInfoTick(symb,mqltick);
double price=mqltick.ask;
if(type==ORDER_TYPE_SELL)
price=mqltick.bid;
//--- значения необходимой и свободной маржиdouble margin,free_margin=AccountInfoDouble(ACCOUNT_MARGIN_FREE);
//--- вызовем функцию проверкиif(!OrderCalcMargin(type,symb,lots,price,margin))
{
//--- что-то пошло не так, сообщим и вернем falsePrint("Error in ",__FUNCTION__," code=",GetLastError());
return(false);
}
//--- если не хватает средств на проведение операцииif(margin>free_margin)
{
//--- сообщим об ошибке и вернем falsePrint("Not enough money for ",EnumToString(type)," ",lots," ",symb," Error code=",GetLastError());
return(false);
}
//--- проверка прошла успешноreturn(true);
}
//--- вызовем функцию проверкиif(!OrderCalcMargin(type,symb,lots,price,margin))
{
//--- что-то пошло не так, сообщим и вернем falsePrint("Error in ",__FUNCTION__," code=",GetLastError());
return(false);
}
//--- если не хватает средств на проведение операцииif(margin>free_margin)
{
//--- сообщим об ошибке и вернем falsePrint("Not enough money for ",EnumToString(type)," ",lots," ",symb," Error code=",GetLastError());
return(false);
}
Ich rate Ihnen nicht, es so zu schreiben. Wenn das System nicht in der Lage ist, dem Array die erforderliche Menge an Speicher zuzuweisen, läuft das Programm unbemerkt weiter, was unvorhersehbare Folgen hat.
Ich rate Ihnen nicht, es so zu schreiben. Wenn das System nicht in der Lage ist, die erforderliche Menge an Speicher für das Array zuzuweisen, läuft das Programm unauffällig weiter, was zu unvorhersehbaren Folgen führt.
Für den realen Handel bin ich verpflichtet, dies zu tun.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Bibliotheken: HistoryTicks
fxsaber, 2019.09.10 18:58
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Bibliotheken: HistoryTicks
fxsaber, 2018.12.10 13:55
Wenn Sie die folgende Zeile am Anfang eines beliebigen MT4/5 Expert Advisors schreibendann erhalten Sie eine detaillierte Benachrichtigung, falls ein Fehler bei der Ausführung von ArrayResize oder ArrayCopy auftritt.
Dies ermöglicht es Ihnen, schwer zu identifizierende Probleme bei der Weitergabe von Informationen durch Arrays zu erkennen, aber - was noch wichtiger ist - eine Meldung zu erhalten, dass der EA aufgrund eines Arrays außerhalb des Bereichs angehalten wurde (was nicht die Schuld des EA ist). Zum Beispiel wegen eines Speichermangels oder eines anderen Fehlers. Mit anderen Worten: Sie werden sofort wissen, dass ein anormales Anhalten des EA stattgefunden hat, und es nicht zufällig erst einige Stunden später bemerken.
Die HistoryTicks-Bibliothek enthält diese Zeile bereits (es besteht keine Notwendigkeit, sie hinzuzufügen), denn der Hauptzweck der Tools ist die Bekämpfung von Expert Advisors auf realen Konten.
Im Terminaljournal gab es nur einen solchen Eintrag in einem anderen Projekt.
Dank der eingefügten Zeile können die Einzelheiten des Geschehens im Benutzerprotokoll eingesehen werden
Bitte schlagen Sie ein Analogon der MQL4-Funktion MarketInfo(asymbol, MODE_MARGIN_REQUIRED) in MQL5 vor.
Ich muss den Betrag an freien Mitteln erhalten, der erforderlich ist, um 1 Los zum Kauf zu eröffnen.
Ich habe verschiedene Varianten der Funktion SymbolInfoDouble(symbol, ...) in MQL5 ausprobiert, ich kann die richtige Variante nicht finden, sie gibt überall 0 zurück.
Bitte schlagen Sie ein Analogon der MQL4-Funktion MarketInfo(asymbol, MODE_MARGIN_REQUIRED) in MQL5 vor.
Ich muss den Betrag an freien Mitteln erhalten, der erforderlich ist, um 1 Los zum Kauf zu eröffnen.
Ich habe verschiedene Varianten der Funktion SymbolInfoDouble(symbol, ...) in MQL5 ausprobiert, ich kann die richtige Variante nicht finden, sie gibt überall 0 zurück.
https://www.mql5.com/ru/articles/2555#not_enough_money
https://www.mql5.com/ru/articles/2555#not_enough_money
Es tut mir leid, ich habe nicht verstanden, warum ich diesen Link brauche. Ich habe dort keine Antwort auf meine Frage gefunden.
Es tut mir leid, ich habe nicht verstanden, warum ich diesen Link brauche. Ich habe dort keine Antwort auf meine Frage gefunden.
Was genau haben Sie an dem Artikel nicht verstanden?
Beispiele für Kontrollen:
MQL5
Was genau haben Sie an dem Artikel nicht verstanden?
Beispiele für Kontrollen:
MQL5
Sie müssenden Betrag an freien Mittelnerhalten, der für die Eröffnung von 1 Lot zum Kauf benötigt wird.
Was hat der Scheck in dem Artikel damit zu tun?
Siemüssenden Betrag der verfügbaren Mittelerhalten, der erforderlich ist, um 1 Los zum Kauf zu eröffnen.
Was hat der Scheck aus dem Artikel damit zu tun?
Denn der Artikel lehrt das sorgfältige Studium der Materie.
Das Beispiel enthält sogar die vollständige Funktion, die vor dem Absenden des Handelsauftrags zu prüfen ist.
Erstens:
und sofort den Verweis:
KONTO_MARGEN_FREI
Höhe der freien Mittel auf dem Konto in der Einzahlungswährung, die für die Positionseröffnung zur Verfügung stehen
AccountInfoDouble
und zwei ist der Mindestscheck:
Siemüssenden Betrag der verfügbaren Mittelerhalten, der erforderlich ist, um 1 Los zum Kauf zu eröffnen.
Was hat der Scheck aus dem Artikel damit zu tun?
dachten Sie nicht, dass Sie Probleme haben würden, den Kurzcode zu lesen, dann lesen Sie die Hilfehttps://www.mql5.com/ru/docs/trading/ordercalcmargin
Der Artikel lehrt zwar das sorgfältige Studium der Materie.
Das Beispiel zeigt sogar die vollständige Funktion der Überprüfung vor dem Senden eines Handelsauftrags.
Erstens:
und gleich die Referenz:
KONTO_MARGEN_FREI
Höhe der freien Mittel auf dem Konto in der Einzahlungswährung, die für die Positionseröffnung zur Verfügung stehen
AccountInfoDouble
und zwei - Mindestkontrolle:
Kontogröße in der Währung der Einlage zur Eröffnung einer Position, die ich nicht benötige
Ich berechne die Losgröße als Prozentsatz des Saldos.
Ich muss den Betrag derverfügbaren Mittelerhalten, der erforderlich ist, um 1 Los zum Kauf zu eröffnen.