Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 181

 
Andrey Khatimlianskii:

Normalerweise habe ich 1-2 Charts auf einem Terminal wie diesem, da ist es schwer, durcheinander zu kommen. Aber der Punkt ist klar.

Ich handle mehr Symbole, mehr EAs laufen. Überwachung der noch nicht handelbaren Symbole. Benutzerdefinierte Symbole werden erstellt, der Tester wird ausgeführt usw.

Ein Arbeitstier, im Allgemeinen.
 
fxsaber:

Mehr Symbole handeln, mehr EAs laufen. Überwachung der noch nicht handelbaren Symbole. Es werden benutzerdefinierte Symbole erstellt, der Tester wird ausgeführt usw.

Ein Arbeitstier, im Allgemeinen.

Ich habe ein Arbeitspferd nur unter Investor Passwort für alle Konten. Und es spielt keine Rolle, ob es dort EAs gibt oder nicht.

 
trader_number_one:

Ich habe nur ein Arbeitspferd unter meinem Invest-Passwort für alle Konten. Und es ist mir egal, ob da Berater drin sind oder nicht.

Berater sind nicht nur für den Handel da. Außerdem müssen Sie in der Lage sein, mit einem Arbeitspferd zu handeln.

 
fxsaber:

Ich habe zehn Terminals. In der Aufregung bei einem habe ich zu einem anderen Konto gewechselt. Die Zeit vergeht, ich schaue im Terminal nach und sehe, dass ich ein anderes Konto brauche - ich wechsle zum alten. Und ganz ohne zu erwarten, dass der EA hängt, sehe ich, dass der EA gestartet ist.

Funktioniert dieser einfache Code auch beim Kontowechsel?

bool IsShowMessageBox = true;
//+------------------------------------------------------------------+
int OnInit()
{
   if(IsShowMessageBox && MessageBox("Произвести запуск эксперта?", "Run EA", MB_OKCANCEL) == IDCANCEL) return(INIT_FAILED);
   IsShowMessageBox = false;
   return(INIT_SUCCEEDED);
}


und wird die erneute Anmeldung diesen Code ausführen, wenn die Verbindung unterbrochen wird?

 
Igor Makanu:

Kann ein einfacher Code wie dieser bei einem Kontowechsel funktionieren?

Nein.

Wird die Neuanmeldung bei einer Unterbrechung der Verbindung diesen Code auslösen?

Eine automatische Neuanmeldung ist nicht möglich. Handbuch wird.

 

Die Lösung liegt auf der Oberfläche. Was ändert sich in der Grafik nicht, wenn Sie sie umschalten? Das stimmt - die grafischen Objekte. Beim Starten des Roboters wird ein grafisches Objekt erstellt, das in der normalen Situation in DeInit gelöscht wird, bzw. in OnInit nach dem Objekt gesucht, wenn es existiert, ist etwas schief gelaufen und INIT_FAILED wird zurückgegeben.

Ungefähr so:

#define  NAME "test"

int OnInit()
  {
   static const string symbol=_Symbol;
   if (ObjectFind(0,NAME)>=0||symbol!=_Symbol) return INIT_FAILED;
   else ObjectCreate(0,NAME,OBJ_HLINE,0,0,0);
   return INIT_SUCCEEDED;
  }

void OnDeinit(const int reason){
   switch(reason){
      case REASON_PARAMETERS:
      case REASON_PROGRAM:
      case REASON_REMOVE:
      case REASON_INITFAILED:
      case REASON_CLOSE:
      case REASON_CHARTCLOSE:
      case REASON_TEMPLATE:
      case REASON_CHARTCHANGE: ObjectDelete(0,NAME);
      case REASON_RECOMPILE:
      case REASON_ACCOUNT: break;
   }
}

void OnTick(){
}
 
Vladimir Simakov:

Die Lösung liegt auf der Oberfläche. Was ändert sich in der Grafik nicht, wenn Sie sie umschalten? Das stimmt - die grafischen Objekte. Beim Start des Roboters wird ein grafisches Objekt erstellt, das im Normalfall in DeInit gelöscht wird, bzw. in OnInit nach dem Objekt gesucht, wenn es existiert, ist etwas schief gelaufen und INIT_FAILED zurückgegeben.

Ungefähr so:

Speichern ist kein Problem, hier im Allgemeinen müssen wir EA Initialisierung richtig zu verteilen, der Fall der Umschaltung Konten ist die geringste meiner Sorgen, aber wie das Diagramm selbst gestartet wird und wenn das Diagramm nicht bereit ist, ist ein Geheimnis im Dunkeln gehüllt )))

die Lektüre des Kommentars überprüft... es ist nicht flüssig - es ist nicht einmal auf dem "schwarzen Bildschirm" sichtbar, wenn man zwischen Konten auf einem nicht vorhandenen Symbol wechselt ;)

int OnInit()
{
   string arr_comm[];
   if(StringSplit(ChartGetString(0, CHART_COMMENT), StringGetCharacter(";", 0), arr_comm) == 2) Print("_StopFlag = ", (bool)((int)arr_comm[0]), " ; _UninitReason = ", (int)arr_comm[1]);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Comment((string)_StopFlag + ";" + (string)_UninitReason);
}
 
Vladimir Simakov:

Die Lösung liegt auf der Oberfläche. Was ändert sich in der Grafik nicht, wenn Sie sie umschalten? Das stimmt - die grafischen Objekte. Beim Starten des Roboters wird ein grafisches Objekt erstellt, das in der normalen Situation in DeInit gelöscht wird, bzw. in OnInit nach dem Objekt gesucht, wenn es existiert, ist etwas schief gelaufen und INIT_FAILED wird zurückgegeben.

Das ist in etwa so:

Sie können auch globale Variablen des Terminals verwenden. Sie werden auch nicht gelöscht.

 
Konstantin Nikitin:

Sie können genauso gut die globalen Variablen des Terminals verwenden. Sie werden auch nicht gelöscht.

Schmeckt und schmeckt... Ich mag sie nicht...

 
Vladimir Simakov:

Für Geschmack und Farbe... Ich mag sie nicht...

Ich lösche zum Beispiel alle Objekte auf VDS. Nur so unnötig, den Zeitplan nicht zu laden. Und dort werden sie nicht gebraucht. Ich verwende Globals. Es kommt also auf die jeweilige Situation an.

Grund der Beschwerde: