Dienstleistungen. Sind sie schon einsatzbereit? - Seite 19

 
Sergey Golubev:

Vor vielen Jahren gab es im englischen Teil des Threads (es tut mir leid, es dauert zu lange, ihn jetzt zu finden) einen EA, der beim Handel (und bei der Marktanalyse) eine Textdatei erzeugte und aktualisierte, die in bestimmten Intervallen von einem anderen EA gelesen wurde, der im selben Metatrader, aber auf einem anderen Paar (oder demselben, aber auf einem anderen Chart) arbeitete. Und beide handelten, indem sie mit dieser Datei miteinander kommunizierten.

Ich habe dies für den Scalper-Master getan, um mit dem Scalper-Slave auf anderen Terminals zu kommunizieren. Es werden jedoch nur die Steuerbefehle eines Händlers übertragen, so dass es nicht notwendig ist, auf allen Terminals manuell auf dieselben Tasten zu klicken. Aber nichts hindert daran, Daten zu übertragen.

Wenn Sie über Memory Mapping kommunizieren können, dann auf Wiedersehen Markt

 

Ich arbeite viel mit benutzerdefinierten Zeichen. Fast immer muss eine benutzerdefinierte Datei gelöscht werden, aber das muss manuell geschehen. Ich habe beschlossen, es zu automatisieren.

Und es stellte sich heraus, dass es genau das richtige Skript für Dienstleistungen ist. Vielleicht ist es nicht gerade ein Standardansatz für Dienstleistungen, aber ich wollte ein Skript, das nicht an Diagramme gebunden ist. Und hier ist der Grund dafür

// Удаляет символ активного графика из Обзора рынка (кастомный - удаляет полностью).

#property service

// Находит чарт в фокусе.
long GetFocusChart()
{
  long Chart = ChartFirst();

  for (; Chart != -1; Chart = ChartNext(Chart))
    if (ChartGetInteger(Chart, CHART_BRING_TO_TOP))
      break;

   return(Chart);
}
   
// Удаляет чарты символа.
int DeleteCharts( const string Symb )
{
  int Res = 0;
  
  for (long Chart = ChartFirst(); Chart != -1; Chart = ChartNext(Chart))
    if (ChartSymbol(Chart) == Symb)
      Res += ChartClose(Chart);
  
  return(Res);
}

// Удаляет символ из Обзора рынка (кастомный - удаляет полностью).
bool DeleteSymbol( const string Symb )
{
  DeleteCharts(Symb);

  return(SymbolSelect(Symb, false) && (!SymbolInfoInteger(Symb, SYMBOL_CUSTOM) || CustomSymbolDelete(Symb)));
}

void OnStart()
{
  const long Chart = GetFocusChart();
  
  if (Chart != -1)
    DeleteSymbol(ChartSymbol(Chart));
}

Ich habe mir überlegt, einen Hotkey für dieses Skript/diesen Dienst zu erstellen und ein Symbol damit zu verknüpfen, wenn ich eine unerwünschte Symboltabelle sehe. Das wäre sehr praktisch. Allerdings stieß sie auf Schwierigkeiten.

  • Es ist nicht möglich, einen Hotkey an den Service zu heften.
  • Um den Dienst neu starten zu können, müssen Sie ihn vorher löschen. Dies soll notwendig sein, um die Dienste beim ersten Start des Terminals zu starten. Aber mein Fall ist anders.
  • SymbolSelect funktioniert nicht - es kann das Symbol nicht entfernen. Offenbar ein Fehler.
Infolgedessen ist es eine Katastrophe. Ist es möglich, die praktische Seite der Dienstleistungen irgendwie zu lösen?


ZZY Es gibt einen Workaround, um das aktive Diagrammsymbol zu entfernen.

 
fxsaber:

Ich arbeite viel mit benutzerdefinierten Zeichen. Fast immer muss eine benutzerdefinierte Datei gelöscht werden, aber das muss manuell geschehen. Ich habe beschlossen, es zu automatisieren.

Und es stellte sich heraus, dass es genau das richtige Skript für Dienstleistungen ist. Vielleicht ist es nicht gerade ein Standardansatz für Dienstleistungen, aber ich wollte ein Skript, das nicht an Diagramme gebunden ist. Und hier ist der Grund dafür

Ich dachte daran, einen Hotkey auf dieses Skript/diesen Dienst zu legen und ein Symbol durch ihn zu nageln, wenn ich eine unerwünschte Symbolkarte sehe. Das wäre sehr praktisch. Allerdings stieß sie auf Schwierigkeiten.

  • Es ist nicht möglich, einen Hotkey an den Service zu heften.
  • Um den Dienst neu starten zu können, müssen Sie ihn vorher löschen. Dies soll notwendig sein, um die Dienste beim ersten Start des Terminals zu starten. Aber mein Fall ist anders.
  • SymbolSelect funktioniert nicht - es kann das Symbol nicht entfernen. Offenbar ein Fehler.
Infolgedessen ist es eine Katastrophe. Ist es möglich, die praktische Seite der Dienstleistungen irgendwie zu lösen?


ZZY Es gibt einen Workaround, um ein Symbol aus dem aktiven Chart zu entfernen.

Sie können keine Tastenkombination für Dienste festlegen, da die Funktion OnChartEvent() dort nicht funktioniert; aber ich nehme an, Sie wissen das. Expert Advisor sollte also mit Hotkeys arbeiten und die Befehle über Ressourcen an den Dienst weitergeben. Versuchen Sie, den Dienst mit Ressourcen zu verwalten.

Natürlich verlieren wir in diesem Fall die Bedeutung von Service. Schließlich können Sie Charts im Expert Advisor durch Drücken von Hotkeys schließen...

SZY: Es geht nicht darum, zusätzliche Funktionen in Expert Advisors zu produzieren. Wir können die allgemeine Funktionalität verschiedener EAs in einem Dienst ablegen und sie über eine Ressource aufrufen. Gib uns einen Befehl, was wir tun sollen.

 
Реter Konow:

Kann keinen Hotkey auf den Service legen, weil OnChartEvent() dort nicht funktioniert


 
fxsaber:


Ich danke Ihnen. Wo liegt dann das Problem?

Sie möchten, dass der Dienst selbst (der ununterbrochen läuft) auf Tastendrucke reagiert.

 
Реter Konow:

Ich danke Ihnen. Wo liegt dann das Problem?

Sie möchten, dass der Dienst selbst (der ununterbrochen läuft) auf Tastendrucke reagiert.

Nein. Sie möchten, dass der Dienst im Skriptmodus arbeiten kann, ohne an ein Diagramm gebunden zu sein.

 
fxsaber:

Nein. Der Dienst muss im Skriptmodus arbeiten können, ohne an ein Diagramm gebunden zu sein.

Funktioniert es auch anders?

 
Реter Konow:

Funktioniert es auch anders?

Ja.

 
fxsaber:

Ja.

Er kann also jede Karte führen? Ganz einfach.

 
Der Dienst arbeitet mit Daten (Anführungszeichen) mit der Möglichkeit, sie zu korrigieren, aber er erlaubt nicht, irgendetwas zu verwalten, insbesondere nicht die Fenster des Terminals, die benötigt werden. Daraus ergibt sich die offensichtliche Schlussfolgerung: Wenn es notwendig ist, das eine oder andere Fenster zu schließen, erzeugt der Dienst ein offensichtlich unmögliches Angebot für dieses Fenster, und das Skript, das mit diesem Fenster verbunden ist, schließt es, wenn dieses Angebot empfangen wird.