Fehler, Irrtümer, Fragen - Seite 1868

 

1589 bauen

Wie kann man erreichen, dass OnTimer in einem Indikator nicht mehr funktioniert, wenn sich das Konto/der Broker ändert, wenn er keinen solchen Ticker hat oder nicht zur Marktübersicht hinzugefügt wurde, ohne IndicatorDelete zu verwenden?

Fehler in der Dokumentation - es gibt keine IndicatorDelete-Funktion, es gibt ChartIndicatorDelete!

https://www.mql5.com/ru/docs/standardlibrary/cchart/cchartindicatordelete

bool  IndicatorDelete(
   int            sub_win      // номер подокна
   const string   name         // короткое имя индикатора
   );

Ich lasse den beigefügten Indikator auf den Futures laufen, wechsle zu einem anderen Broker, aber der Timer tickt weiter, obwohl der Chart schwarz wird und sich nicht aktualisiert.

er schreibt nicht den Grund für die Deinitialisierung

REASON_ACCOUNT

6

Ein anderes Konto wurde aktiviert oder die Verbindung zum Handelsserver wurde aufgrund einer Änderung der Kontoeinstellungen wiederhergestellt


2017.04.21 12:10:31.810 TF through OnTimer (DDM7,M1)    Работаем
2017.04.21 12:10:31.810 TF through OnTimer (DDM7,M1)    Аккаунт = AMPGlobalClearing-Demo-CQG
тут сменили брокера,причины деинициализации нет
2017.04.21 12:10:36.809 TF through OnTimer (DDM7,M1)    Работаем
2017.04.21 12:10:36.809 TF through OnTimer (DDM7,M1)    Аккаунт = FXOpen-MT5
//+------------------------------------------------------------------+
//|                                           TF through OnTimer.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
string server;
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   EventKillTimer();
   Print("Причина деинициализации = ",reason);
   
  }
//+------------------------------------------------------------------+
int OnInit()
  {
  server=AccountInfoString(ACCOUNT_SERVER);
   EventSetMillisecondTimer(5000);
   IndicatorSetString(INDICATOR_SHORTNAME,"name");
   
//--- indicator buffers mapping
//---
   return(INIT_SUCCEEDED);
  }  
  
  ////////////
  void OnTimer ()
  {
  Print("Работаем");
  Print("Аккаунт = ",AccountInfoString(ACCOUNT_SERVER));
//  if ( server!=AccountInfoString(ACCOUNT_SERVER) ) ChartIndicatorDelete(0,0,"name");
  }
Документация по MQL5: Стандартная библиотека / Ценовые графики / IndicatorDelete
Документация по MQL5: Стандартная библиотека / Ценовые графики / IndicatorDelete
  • www.mql5.com
Стандартная библиотека / Ценовые графики / IndicatorDelete - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
kaus_bonus:

1589 bauen

OnDeinit wird nicht aufgerufen.
 
Wie meinen Sie das?
fxsaber:
OnDeinit wird nicht aufgerufen.

Was meinen Sie? Überhaupt nicht aufgerufen oder in diesem Code?

 
kaus_bonus:

1589 bauen

Wie kann man erreichen, dass OnTimer in einem Indikator nicht mehr funktioniert, wenn sich das Konto/der Broker ändert, wenn er keinen solchen Ticker hat oder nicht zur Marktübersicht hinzugefügt wurde, ohne IndicatorDelete zu verwenden?

Fehler in der Dokumentation - es gibt keine IndicatorDelete-Funktion, es gibt ChartIndicatorDelete!

https://www.mql5.com/ru/docs/standardlibrary/cchart/cchartindicatordelete

Ich lasse den beigefügten Indikator auf den Futures laufen, wechsle zu einem anderen Broker, aber der Timer tickt weiter, obwohl der Chart schwarz wird und sich nicht aktualisiert.

er schreibt nicht den Grund für die Deinitialisierung

REASON_ACCOUNT

6

Ein anderes Konto wird aktiviert oder die erneute Verbindung zu einem Handelsserver wurde durch eine Änderung der Kontoeinstellungen verursacht



Be- und Entladen von Indikatoren

In den folgenden Fällen werden Indikatoren hochgeladen

  • Anhängen eines Indikators an ein Diagramm
  • Start des Terminals (wenn ein Indikator an ein Diagramm angehängt wurde, bevor das Terminal zuvor geschlossen wurde)
  • Laden einer Vorlage (wenn ein Indikator an ein Diagramm angehängt ist)
  • Profilwechsel (wenn der Indikator mit einem der Profilcharts verbunden ist);
  • Änderung des Symbols und/oder der Periode des Charts, dem der Indikator zugeordnet ist;
  • nach der erfolgreichen Neukompilierung eines Indikators, wenn dieser Indikator an ein Diagramm angehängt wurde.
  • Änderung derEingabeparameter des Indikators.

In den folgenden Fällen werden die Indikatoren entladen

  • wenn der Indikator vom Diagramm abgetrennt ist;
  • Schließen des Terminals (wenn ein Indikator an ein Diagramm angehängt wurde)
  • Laden einer Vorlage, wenn ein Indikator an ein Diagramm angehängt ist;
  • das Diagramm schließen, an das der Indikator angehängt wurde
  • Profiländerung, wenn der Indikator mit einem der Diagramme des zu ändernden Profils verbunden ist;
  • Änderung des Symbols und/oder der Periode des Charts, dem der Indikator zugeordnet ist;
  • Änderung der Eingabeparameter des Indikators.


Der Grund dafür, dass "Kontowechsel" nicht existiert, ist, dass der Indikator bei einem Kontowechsel nicht entladen wird und folglich auch OnDeinit() für den Indikator nicht ausgeführt wird, wenn Sie das Handelskonto wechseln.

 
kaus_bonus:

Was meinen Sie? Überhaupt nicht aufgerufen oder in diesem Code?

In Ihrer Situation.
 
Vladimir Karputov:

Be- und Entladeanzeiger


In den folgenden Fällen werden die Indikatoren entladen

  • wenn der Indikator vom Diagramm abgetrennt ist;
  • Schließen des Terminals (wenn ein Indikator mit einem Chart verbunden ist)
  • Laden einer Vorlage, wenn ein Indikator an den Chart angehängt ist
  • das Diagramm schließen, an das der Indikator angehängt wurde
  • Profiländerung, wenn der Indikator mit einem der Diagramme des zu ändernden Profils verbunden ist;
  • Änderung des Symbols und/oder der Periode des Charts, dem der Indikator zugeordnet ist;
  • Änderung der Eingabeparameter des Indikators.


Der Grund dafür, dass "Kontowechsel" nicht existiert, ist, dass der Indikator bei einem Kontowechsel nicht entladen wird und es folglich kein OnDeinit() für den Indikator gibt, wenn Sie das Handelskonto wechseln.

Der von mir genannte Grund gilt nur für Expert Advisors.

Коды причины деинициализации эксперта ....

Dann bleibt die Frage: Wie kann man den Timer zum Stillstand bringen, ohne den Indikator radikal aus dem Diagramm zu entfernen?

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

Der Grund, den ich genannt habe, gilt nur für Experten.

Dann bleibt die Frage, wie man den Timer zum Stillstand bringt, ohne den Indikator drastisch aus dem Diagramm zu entfernen.


In OnInit() wird der Spielstand gespeichert. Überprüfen Sie in der Zeitschaltuhr die Kontonummer. Wenn sich der Spielstand geändert hat - beenden Sie den Timer.
 
kaus_bonus:

Dann bleibt die Frage, wie man den Timer zum Stillstand bringt, ohne den Indikator drastisch aus dem Diagramm zu entfernen.

Verwenden Sie ACCOUNT_LOGIN und ACCOUNT_SERVER.
 

Halten Sie das nicht für eine krumme Lösung?!

Angenommen, wir machenACCOUNT_LOGIN!=ACCOUNT_LOGIN_NEW, beenden den Timer und gehen dann zurück zu diesem Konto, was passiert dann? der Timer startet nicht wieder?

Ist es einfacher, den Grund "Kontowechsel" auf die gleiche Weise zu den Indikatoren hinzuzufügen, oder liege ich in irgendeiner Weise falsch und es führt zu Schwierigkeiten?

 
kaus_bonus:

Sie müssen zugeben, dass das eine krumme Lösung ist?!

Das ist ein Pferdemanöver!

Angenommen, wir machenACCOUNT_LOGIN!=ACCOUNT_LOGIN_NEW, beenden den Timer und kehren dann zu dieser Zählung zurück, was passiert dann?

Wenn eine Kontoänderung festgestellt wird, kennen Sie die neuen Merkmale bereits.

Sie können es als kleine Bibliothek nach dem Prinzip entwerfen, dass hier(Makros). Dann sind die "krummen" Sachen nicht mehr so lästig.