Fehler, Irrtümer, Fragen - Seite 2932

 

Fehler in der Beschreibung:

Fehler

Dieses Feld heißt: time_type

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

Ich versuche, dem Benutzer die Möglichkeit zu geben, beide Zeitrahmen und deren Anzahl aus dem Menü des Indikatoreinrichtungsfensters auszuwählen:

und ich möchte, dass die ausgewählten Zeiträume direkt in PArray gespeichert werden. Aus dem obigen Beispiel geht jedoch hervor, dass ich dem Array die im Programm voreingestellten Werte zuweise und nicht die von einem Benutzer eingegebenen Werte. Darüber hinaus erzeugt der Compiler Warnungen:

Wenn ich versuche, die letzte Zeile zu ersetzen durch:

erzeugt der Compiler insgesamt einen Fehler:

Außerdem bedeutet NO_PERIOD=0PERIOD_CURRENT, und das brauche ich nicht, ich brauche etwas wie false oder EMPTY_VALUE, aber die passen überhaupt nicht.

Wie kann ich es reparieren?

Ich habe es fast geschafft.

 
Die Symboleinstellungen im Tester halten nicht, die Handelszeiten werden am Donnerstag und Freitag gekürzt, deshalb gibt es immer einen Fehler Markt geschlossen, Positionen werden nicht eröffnet, Optimierung ist unmöglich, der Roboter funktioniert nicht richtig, andere Broker sind in Ordnung, aber ich brauche diesen, was soll ich tun? Ich weiß es nicht, aber ich hatte noch nie ein solches Problem. Ich weiß nicht, ob ich den Handelsroboter bereits registriert habe, aber ich konnte noch nie eine Position eröffnen. Wer weiß, was zu tun ist? Ein neues Konto registriert, das Terminal von temporären Dateien bereinigt, ein anderes Terminal ausprobiert, keine Hilfe. Videoprobleme https://radikal.ru/video/1HA3UfUNVZt
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
SymbolInfoSessionQuote - Получение рыночной информации - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Können Sie uns sagen, welche Methoden zur Bekämpfung des Fehlers "array out of range" zur Verfügung stehen? Erstens kann ich Print nicht verwenden, um ein Array-Element zu drucken, das den Bereich verlassen hat, weil der Fehler zu weit vor dem Element liegt und es nie zum Drucken kommt. Zweitens tritt dieser Fehler nicht systematisch auf, sondern nach Belieben: Er ist einmal aufgetreten, und der Indikator hat nicht funktioniert (er ist jedoch in der Indikatorliste im Diagramm vorhanden), alle anderen Male ist er nicht aufgetreten, ohne dass der Indikator neu kompiliert wurde, was nichts über seine Änderung aussagt.
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:
Sagen Sie mir, welche Methoden der Bekämpfung gibt es für das Abfangen und Korrigieren von "Array out of range" Fehler?

ArrayResize() vor dem Schreiben eines Array-Elements die Anzahl der Elemente zählen und dort eingeben, die im Array sein sollen, oder ein dynamisches Array verwenden, das selbst fett wird. Du gehst einfach über das Array hinaus, z. B. gibst du eine Größe von 100 Elementen an, aber da das erste Element die Nummer 0 ist, kommen manche Leute durcheinander. Wenn du die Zahlen in eine Reihe schreibst, passen 0-99. Ich bin kein professioneller Programmierer, wenn überhaupt (aber ich kann), das erste, was in meinem Kopf kam, es funktioniert)))

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Объект динамического массива - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
freelancerAntonyan:

Führen Sie ArrayResize() aus, bevor Sie ein Element des Arrays schreiben, zählen Sie die Anzahl der Elemente, die im Array sein sollen, und geben Sie sie dort ein, oder verwenden Sie ein dynamisches Array, das selbst wächst.

Eigentlich ist es sowieso dynamisch. Aus der Hilfe:"Die Funktion kann nur auf dynamische Arrays angewendet werden. Beachten Sie, dass dynamische Arrays, die von der Funktion SetIndexBuffer() als Indikatorpuffer zugewiesen werden, nicht in ihrer Größe verändert werden sollten. Bei Indikatorpuffern werden alle Größenänderungsoperationen vom ausführenden Subsystem des Terminals durchgeführt. "Aber es ist kein Indikatorpuffer, man muss also mit den Händen und dem Kopf denken...

 
x572intraday:

Eigentlich ist sie bereits dynamisch. Aus der Hilfe:"Die Funktion kann nur auf dynamische Arrays angewendet werden. Sie sollten bedenken, dass dynamische Arrays, die von der Funktion SetIndexBuffer() als Indikatorpuffer zugewiesen werden, nicht in ihrer Größe verändert werden können. Bei Indikatorpuffern werden alle Größenänderungsoperationen vom ausführenden Subsystem des Terminals durchgeführt. "Aber es ist kein Indikatorpuffer, also musst du mit deinen Händen und deinem Kopf denken...

Das Problem, solche Fehler abzufangen, wird nur durch die Verwendung von "Schichten" gelöst, z. B. durch eine benutzerdefinierte Array-Klasse, die die Adressierung abfängt.

MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
  • 2016.11.08
  • www.mql5.com
Today we're starting a patchy subject, which will combine many different things. This is why I decided to split it into parts. Out final goal is exception handling, but before we can address it, we
 

Wenn der EA bei deaktiviertem Algotrading gestartet und dann das Algotrading aktiviert wird:

Dem Fehlercode zufolge bleibt das Handelsverbot bestehen, obwohl die Eigenschaft TERMINAL_TRADE_ALLOWED wahr ist

#include <Greshnik\\ErrorDescription.mqh>
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
     {
      return;
     }
   MqlTradeRequest tr;
   MqlTradeResult r;
   ResetLastError();
   if(!OrderSend(tr,r))
     {
      int err=GetLastError();
      Print(err,"  ",cLng::CodeDescription(err));
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
2020.12.30 15:25:38.629 Experts automated trading is enabled
2020.12.30 15:25:39.159 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.297 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.397 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.499 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.725 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:42.781 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.129 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.758 Experts automated trading is disabled

Das Ergebnis sollte wie folgt aussehen:

2020.12.30 15:29:58.406 Experts automated trading is enabled
2020.12.30 15:30:02.247 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.368 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.486 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:04.320 Experts automated trading is disabled
 
CopyTime(_Symbol,tf,0,1,Arr);
Offensichtlich muss immer ArraySize(Arr)=1. Dies ist der Fall bei erfolgreichem Kopieren. Aber in welchen Fällen könnte das Kopieren der Bar scheitern? Denn wennder Fehler "array out of range" auftritt, zeigt das Terminal auf Arr[0].
 
x572intraday:
Offensichtlich sollte es immer ArraySize(Arr)=1 sein. Dies ist der Fall bei erfolgreichem Kopieren. Aber in welchen Fällen könnte das Kopieren der Bar scheitern? Wenn derFehler "array out of range" auftritt, zeigt das Terminal auf Arr[0].

Habe den Fehler doch noch gefunden, Zitat aus der Hilfe:

4401

Angeforderter Verlauf nicht gefunden.

In das Logbuch ausgedruckt - verstanden:

2020.12.31 14:45:20.474 test (EURUSD,H2)        ArraySize(Arr)=0; copied=-1; TF=PERIOD_H2
2020.12.31 14:45:20.474 test (EURUSD,H2)        Error Code = 4401

Was mache ich jetzt damit, wohin soll ich gehen? Bin ich ein schlechtes Blatt oder...? Ich kopiere ja nur einen Balken von 0 auf 1. Wie kann sie (die Geschichte) nicht sein? Dies umso mehr, als der Fehler nicht immer vorhanden ist. Oder muss man den Verlauf vorher zwangsweise überprüfen und herunterladen?