Dienstleistungen. Sind sie schon einsatzbereit? - Seite 21

 

Renat, wird es möglich sein, benutzerdefiniertes Glas in den Dienst zu integrieren?
In der Dokumentation steht, dass der OnBookEvent-Handler in Indikatoren und Expertenaufgerufen wird.
Wie sieht es mit Dienstleistungen aus? Wie lassen sich die Stacks im Dienst ausführen?
Ich möchte meine benutzerdefinierten Stacks im Dienst ausführen können.
Nach Ihren Worten unterstützen die Dienste keine anderen Handler als OnStart, und das wird zu einem Problem.
Die Angelegenheit ist, dass die Dienste sind viel schneller als das System OnTimer inIndikatoren undExpert Advisors.
Und es ist besser, Dienste zu nutzen, um individuelle Stacks zu erstellen.

p.s.
Ich habe diesen Artikel gelesen und bin überrascht, dass einige erfahrene Programmierer keine Dienste nutzen können.
Dienste sind cool, sie können eine Menge Dinge implementieren, bis hin zur asynchronen Ausführung des gesamten Projekts, wobei die Logik der Aufgaben zwischen den Diensten geteilt wird.
Aber es wäre logischer, der Sprache die Funktion Thread(params) hinzuzufügen, die die Parallelisierung von Threads für die an die Funktion übergebenen Argumente realisieren würde.
Nun, wenn es Threads gibt, dann gehen Prozesse mit ihnen einher, in Form der Funktion Process(params).

Einer der wichtigsten Vorteile ist, dass der Dienst schneller als die Systemzeit verarbeitet wird, d.h. er wird in nur 1 ms oder vielleicht sogar noch schneller verarbeitet.
Weil ich in der While()-Schleife ein Sleep(1)-Limit erzwungen habe.
Das System OnTimer() mit EventSetMillisecondTimer(1) Ereignis wird in Expert Advisors und Indikatoren für ~ 20ms verarbeitet.
Dies ist keine schlechte Steigerung der Verarbeitungsleistung.
Leider werden die Expert Advisor Handler im Service nicht unterstützt, was die möglichen Lösungen stark einschränkt.
Vor langer Zeit baten Benutzer darum, den Start von Expert Advisors ohne Zeitpläne zu implementieren, Dienste würden dieses Problem einfach lösen.
Nach der Schaltfläche "Automatischer Handel" im Menü des Dienstes zu urteilen, ist die Möglichkeit zum Handel vorhanden.
Mit dem OnStart-Handler allein können Sie jedoch keine vollwertige Handelslösung aufbauen.

 
fxsaber:

Wirklich sehr praktisch.

Ich habe den Computer neu gestartet und das RAMDrive vergessen. Starten Sie MT5 und es meldet sofort ein Problem.

Ist es nicht einfacher, RamDisk mit Automount + Junction + Dynamic Allocation zu verwenden?
Beim Starten des PCs wird automatisch alles eingebunden und verknüpft, und wenn nicht genügend Speicherplatz auf dem Laufwerk vorhanden ist, wird er automatisch aus dem RAM hinzugefügt.

 
Sergey Dzyublik:

Ist es nicht einfacher, RamDisk mit Automount + Junction + Dynamic Allocation zu verwenden?
Beim Starten des PCs wird alles automatisch gemountet und verlinkt, und wenn nicht genügend Platz auf der Festplatte vorhanden ist, wird er automatisch aus dem RAM hinzugefügt.

Das wird nicht immer benötigt, deshalb habe ich es nicht beim Start angelegt.

 

Das Terminal ändert gerne die Eigenschaften der benutzerdefinierten Symbole, wenn es neu gebootet wird. Zum Beispiel bei den Währungen.

An dieser Stelle können die Dienste helfen. Wenn sie gestartet werden, korrigieren sie das unzulässige Verhalten des Testers.

 
Können Sie mir sagen, wie ein Kommentar zu einem aktiven Diagramm aus dem Serviceprogramm angezeigt werden kann?
Kann überhaupt ein anderes Diagramm ausgegeben werden?

//+------------------------------------------------------------------+
//| Service program start function                                   |
//+------------------------------------------------------------------+

int OnStart()
{
   Comment("text");

   return(0);
}
 

Ich antworte mir selbst ))

int OnStart()
{
   ChartCommentSet("Hello Service", ChartFirst());
   
   
   return(0);
}

//+------------------------------------------------------------------+ 
//| Функция устанавливает текст комментария в левом верхнем углу     | 
//| графика.                                                         | 
//+------------------------------------------------------------------+ 
bool ChartCommentSet(const string str, const long chart_ID=0) 
{ 
   //сбросим значение ошибки 
   ResetLastError(); 
   
   //установим значение свойства 
   if(!ChartSetString(chart_ID, CHART_COMMENT, str)) 
   { 
      //выведем сообщение об ошибке в журнал "Эксперты" 
      Print(__FUNCTION__+", Error Code = ", GetLastError()); 
      return(false); 
   } 
   
   //успешное выполнение 
   return(true); 
}
 
Wie führt man einen Dienst von einem EA aus?
 
Roman:

Ich antworte mir selbst ))

ja - alles wird in der linken oberen Ecke geschrieben

//+------------------------------------------------------------------+
//| Service program start function                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ChartCommentSet("Hello Service", ChartFirst());


   return;
  }
//+------------------------------------------------------------------+
//| Функция устанавливает текст комментария в левом верхнем углу     |
//| графика.                                                         |
//+------------------------------------------------------------------+
bool ChartCommentSet(const string str, const long chart_ID=0)
  {
//сбросим значение ошибки
   ResetLastError();

//установим значение свойства
   if(!ChartSetString(chart_ID, CHART_COMMENT, str))
     {
      //выведем сообщение об ошибке в журнал "Эксперты"
      Print(__FUNCTION__+", Error Code = ", GetLastError());
      return(false);
     }

//успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+

Foto von

 
fxsaber:

Das Terminal ändert gerne die Eigenschaften der benutzerdefinierten Symbole, wenn es neu gebootet wird. Zum Beispiel bei den Währungen.

An dieser Stelle können die Dienste helfen. Sie korrigieren das unzulässige Verhalten des Testers beim Starten.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Benutzerdefinierte Symbole. Fehler, Bugs, Fragen, Vorschläge.

fxsaber, 2019.09.15 22:30

Behebung des Problems der automatischen Änderung von benutzerdefinierten Symbolwährungen nach dem Neuladen des Terminals.

// Сервис корректирует валюты всех кастомных символов.
#property service

bool CorrectCurrency( const string Symb, const string Currency )
{  
  return(SymbolInfoInteger(Symb, SYMBOL_CUSTOM) && 
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_BASE, Currency) &&
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_MARGIN, Currency) &&
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_PROFIT, Currency));
}

void CorrectSymbols( void )
{
  const string Currency = AccountInfoString(ACCOUNT_CURRENCY);
  
  for (int i = SymbolsTotal(false) - 1; i >= 0; i--)
    CorrectCurrency(SymbolName(i, false), Currency);
    
  return;
}

void OnStart()
{
  CorrectSymbols();
}
 

Fügen Sie den Diensten die Möglichkeit hinzu, die automatische Optimierung von Expert Advisors zu starten.

Und verschiedene Funktionalitäten, z.B. um zu wissen, dass die Optimierung/der Lauf abgeschlossen ist.

Grund der Beschwerde: