Fehler, Irrtümer, Fragen - Seite 1153

 
joo:
Das Video in den Forenbeiträgen wird nicht abgespielt. Anstelle des Videos ist ein leerer Raum zu sehen. Ich habe es mit verschiedenen Browsern versucht.
Das Video wird auf der youtube-Seite gut abgespielt. und auf anderen youtube-Seiten wird das Video abgespielt....
Schauen wir nach.
 
Renat:
Wie führt man ein in Windows 8.1 installiertes Programm aus? Mit /portable?
Nein. Ich lasse es normalerweise ohne /portable laufen. Um sicherzugehen, habe ich MT5 zweimal installiert und deinstalliert. Nach der Deinstallation habe ich auch die Ordner in AppData manuell gelöscht.
 

Wenn Sie unter Windows 8.1 als normaler Benutzer arbeiten, merkt sich das MT5-Terminal die eingegebenen Kontonummern nicht. Außerdem speichert MetaEditor den MQL5-Speicherstatus nicht. Dies kann nur behoben werden, wenn Sie als Administrator arbeiten oder in den Dateieigenschaften von metaeditor64.exe und terminal64.exe "Dieses Programm als Administrator ausführen" ausgewählt ist.

Aber in diesem Fall muss ich, wenn ich unter einem regulären Benutzerkonto arbeite, das Kennwort des Administrators eingeben - ist das korrekt, wenn wir Sicherheitsfragen berücksichtigen?

P.S. Das Terminal ist das neueste - aber das Problem ist nicht neu.


 

Guten Tag.

Ich habe einen recht ressourcenintensiven Indikator (der aus 7+ Arrays berechnet wird), er lädt normalerweise nur "sporadisch" im Terminal, ich weiß nicht aus welchem Grund. Keine Fehler in ihm, es ist etwas mit MT5 Terminal selbst...

Ich würde es gerne im Tester testen, aber im Tester gibt es immer wieder Fehler: Ich habe einen Screenshot beigefügt.

Gibt eseine Möglichkeit, den Fehler vor dem Start des Prüfgeräts zu bearbeiten und den Indikator im Prüfgerät zwangsweise neu zu laden, wenn er auftritt?

 
M1k3:

Guten Tag.

Ich habe einen recht ressourcenintensiven Indikator (der aus 7+ Arrays berechnet wird), er lädt normalerweise nur "sporadisch" im Terminal, ich weiß nicht aus welchem Grund. Keine Fehler in ihm, es ist etwas mit MT5 Terminal selbst...

Ich würde es gerne im Tester testen, aber im Tester gibt es immer wieder einen Fehler: Ich habe einen Screenshot angehängt.

Gibt eseine Möglichkeit, den Fehler vor dem Start des Prüfgeräts zu behandeln und den Indikator im Prüfgerät zwangsweise neu zu laden, wenn er auftritt?

.

Der Fehler liegt in Ihrem Code, nicht im Terminal. Es gibt sogar einen Hinweis, wo der Fehler zu suchen ist: Zeile 302, Position 49. Dieser Fehler ist ein Array außerhalb seines Bereichs. Sie haben zum Beispiel ein Array mit der Größe [4], aber Sie versuchen, den Wert [5] zu erhalten.
 
barabashkakvn:
Der Fehler liegt in Ihrem Code, nicht im Terminal. Es gibt sogar einen Hinweis, wo der Fehler zu suchen ist: Zeile 302, Position 49. Dieser Fehler ist ein Array-Ausgang aus seinem Bereich. Sie haben zum Beispiel ein Array mit der Größe [4], aber Sie versuchen, den Wert [5] zu erhalten.

Ich kann es nicht beheben, das Array ist mit Anführungszeichen (100%) oder Indikatorwerten gefüllt. Im Terminal wird zu einem bestimmten Zeitpunkt der Wert der Kurse oder der Indikatoren X NULL ausgegeben, und zu einem anderen Zeitpunkt wird ein normaler Wert ausgegeben (nicht am 0. Balken). Ich weiß nicht, warum das so ist.

Der NULL-Wert ist im Prüfgerät immer vorhanden. Der Fehler tritt auf, wenn ich versuche, einen Kurs- oder Indikatorwert zu multiplizieren, der aber NULL ist.

 
M1k3:

Ich kann es nicht beheben, das Array ist mit Anführungszeichen (100%) oder Indikatorwerten gefüllt. Im Terminal gibt der Wert der Kurse X zu einem bestimmten Zeitpunkt NULL an, und zu einem anderen Zeitpunkt gibt er einen normalen Wert an (nicht am 0. Takt). Ich weiß nicht, warum das so ist.

Der NULL-Wert ist im Prüfgerät immer vorhanden. Der Fehler tritt auf, wenn ich versuche, einen Kurs- oder Indikatorwert zu multiplizieren, der aber NULL ist.

Verwenden Sie Code-Debugging oder fügen Sie Print()-Operatoren in zweifelhafte Codeabschnitte ein. Auf diese Weise können Sie feststellen, wo der Fehler liegt.
 
barabashkakvn:

Dieser Code ist der Code des Indikators und der Funktion OnInit(). Dementsprechend wird OnInit() im Moment des Terminalstarts verarbeitet - und dieser Code zeigt den Tickpreis korrekt an. Es ist OnInit() und nicht init() - wie bei Ihnen. Wenn der Fehler wiederholt auftritt, senden Sie bitte den Code und die Terminalversion.

Der Fehler liegt darin, dass Sie versuchen, Marktinformationen (MarketInfo...) in OnInit() vom Indikator zu erhalten. Der Indikator hat keine Handelsfunktionen und wartet daher während der Initialisierung nicht auf die Aktualisierung von Konto- und Marktinformationen.

Um Marktdaten zu erhalten, verwenden Sie OnInit() des EA, nicht den Indikator.

Wenn Sie die Marktinformationen im Indikator verwenden wollen, sollten Sie ein Flag (bool) eingeben und die Richtigkeit der Kontoinformationen (Account...) in der Funktion OnCalculate() im Falle des ersten Laufs oder in OnInit() überprüfen, wenn Sie den Zeitrahmen oder die Indikatoreinstellungen ändern.

Führen Sie die Menschen nicht in die Irre. Unabhängig davon, ob init() oder OnInit() des Indikators verwendet wird, garantiert das Terminal nicht, dass dieser Handler aufgerufen wird, wenn die Anmeldung bereits erfolgt ist und der Tickwert bekannt ist. Es ist also einfach, auch in OnInit den Wert Null zu erhalten. Es gibt auch kein Verbot der Verwendung von Marktinformationen in Indikatoren. Aber in diesem Fall müssen wir die Initialisierung wirklich in den Berechnungsteil des Indikators übertragen und bei den ersten Ticks ausführen.
 
marketeer:
Führen Sie die Menschen nicht in die Irre. Unabhängig davon, ob init() oder OnInit() des Indikators verwendet wird, garantiert das Terminal nicht, dass dieser Handler aufgerufen wird, wenn die Anmeldung erfolgt ist und der Tick-Wert bekannt ist. Es ist also einfach, auch in OnInit den Wert Null zu erhalten. Es gibt auch kein Verbot der Verwendung von Marktinformationen in Indikatoren. Aber in diesem Fall müssen wir die Initialisierung wirklich in den Berechnungsteil des Indikators übertragen und bei den ersten Ticks ausführen.

Der Indikator verfügt über keine Handelsfunktionen. Der Expert Advisor hat Handelsfunktionen. Wenn der EA also die Marktumgebung und/oder Kontoinformationen aufruft, läuft alles korrekt in OnInit() ab.

Zum Beweis meiner Worte, hier ist ein einfacher EA, in dem OnInit() auf die Handelsumgebung und die Kontoinformationen verweist:

//+------------------------------------------------------------------+
//|                                                  test_expert.mq4 |
//|                              Copyright © 2014, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  //--- выведем всю информацию, доступную из функции AccountInfoDouble()
      printf("ACCOUNT_BALANCE =  %G",AccountInfoDouble(ACCOUNT_BALANCE));
      printf("ACCOUNT_CREDIT =  %G",AccountInfoDouble(ACCOUNT_CREDIT));
      printf("ACCOUNT_PROFIT =  %G",AccountInfoDouble(ACCOUNT_PROFIT));
      printf("ACCOUNT_EQUITY =  %G",AccountInfoDouble(ACCOUNT_EQUITY));
      printf("ACCOUNT_MARGIN =  %G",AccountInfoDouble(ACCOUNT_MARGIN));
      printf("ACCOUNT_FREEMARGIN =  %G",AccountInfoDouble(ACCOUNT_FREEMARGIN));
      printf("ACCOUNT_MARGIN_LEVEL =  %G",AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));
      printf("ACCOUNT_MARGIN_SO_CALL = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL));
      printf("ACCOUNT_MARGIN_SO_SO = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_SO));
      //--- MarketInfo
      Print("Symbol=",Symbol());
      Print("Минимальная дневная цена=",MarketInfo(Symbol(),MODE_LOW));
      Print("Максимальная дневная цена=",MarketInfo(Symbol(),MODE_HIGH));
      Print("Время поступления последней котировки=",(MarketInfo(Symbol(),MODE_TIME)));
      Print("Последняя поступившая цена предложения=",MarketInfo(Symbol(),MODE_BID));
      Print("Последняя поступившая цена продажи=",MarketInfo(Symbol(),MODE_ASK));
      Print("Размер пункта в валюте котировки=",MarketInfo(Symbol(),MODE_POINT));
      Print("Количество цифр после запятой в цене инструмента=",MarketInfo(Symbol(),MODE_DIGITS));
      Print("Спрэд в пунктах=",MarketInfo(Symbol(),MODE_SPREAD));
      Print("Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах=",MarketInfo(Symbol(),MODE_STOPLEVEL));
      Print("Размер контракта в базовой валюте инструмента=",MarketInfo(Symbol(),MODE_LOTSIZE));
      Print("Размер минимального изменения цены инструмента в валюте депозита=",MarketInfo(Symbol(),MODE_TICKVALUE));
      Print("Минимальный шаг изменения цены инструмента в пунктах=",MarketInfo(Symbol(),MODE_TICKSIZE));
      Print("Размер свопа для ордеров на покупку=",MarketInfo(Symbol(),MODE_SWAPLONG));
      Print("Размер свопа для ордеров на продажу=",MarketInfo(Symbol(),MODE_SWAPSHORT));
      Print("Календарная дата начала торгов (фьючерсы)=",MarketInfo(Symbol(),MODE_STARTING));
      Print("Календарная дата окончания торгов (фьючерсы)=",MarketInfo(Symbol(),MODE_EXPIRATION));
      Print("Разрешение торгов по указанному инструменту=",MarketInfo(Symbol(),MODE_TRADEALLOWED));
      Print("Минимальный размер лота=",MarketInfo(Symbol(),MODE_MINLOT));
      Print("Шаг изменения размера лота=",MarketInfo(Symbol(),MODE_LOTSTEP));
      Print("Максимальный размер лота=",MarketInfo(Symbol(),MODE_MAXLOT));
      Print("Метод вычисления свопов=",MarketInfo(Symbol(),MODE_SWAPTYPE));
      Print("Способ расчета прибыли=",MarketInfo(Symbol(),MODE_PROFITCALCMODE));
      Print("Способ расчета залоговых средств=",MarketInfo(Symbol(),MODE_MARGINCALCMODE));
      Print("Начальные залоговые требования для 1 лота=",MarketInfo(Symbol(),MODE_MARGININIT));
      Print("Размер залоговых средств для поддержки открытых ордеров в расчете на 1 лот=",MarketInfo(Symbol(),MODE_MARGINMAINTENANCE));
      Print("Маржа, взимаемая с перекрытых ордеров в расчете на 1 лот=",MarketInfo(Symbol(),MODE_MARGINHEDGED));
      Print("Размер свободных средств, необходимых для открытия 1 лота на покупку=",MarketInfo(Symbol(),MODE_MARGINREQUIRED));
      Print("Уровень заморозки ордеров в пунктах=",MarketInfo(Symbol(),MODE_FREEZELEVEL)); 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
Dateien:
 
barabashkakvn:

Der Indikator verfügt über keine Handelsfunktionen. Der Expert Advisor hat Handelsfunktionen. Wenn der EA also die Marktumgebung und/oder Kontoinformationen aufruft, läuft alles korrekt in OnInit() ab.

Zum Beweis meiner Worte, hier ist ein einfacher Expert Advisor, dass OnInit() ruft die Marktumgebung und Konto Informationen:

Nun, die Frage bezog sich ursprünglich auf den Indikator. Und Sie antworteten auf die Frage nach dem OnInit des Indikators. Expert Advisor ist eine andere Sache, da gibt es kein Problem, aber der Expert Advisor kann einen Indikator nicht ersetzen.