Diskussion zum Artikel "Universeller Expert Advisor: CUnIndicator und das Arbeiten mit Pending Orders (Teil 9)"

 

Neuer Artikel Universeller Expert Advisor: CUnIndicator und das Arbeiten mit Pending Orders (Teil 9) :

Der Artikel beschreibt das Arbeiten mit Indikatoren anhand der universellen Klasse CUnIndicator. Darüber hinaus wurden im Artikel neue Arbeitsmethoden mit Pending Orders betrachtet. Bitte beachten Sie, dass die Struktur des CStrategy Projektes wesentlich verändert wurde. Jetzt sind alle seine Dateien in einem einheitlichen Verzeichnis für die Bequemlichkeit der Nutzer abgelegt.

Auf dem Screenshot unten ist ein Fragment des Testens der Strategie CIpmulse 2.0 im Strategietester dargestellt. Man sieht die platzierten Pending Orders und die Arbeit mit ihnen:


Abb. 1. Die Arbeit mit Pending Orders während des Testens der Strategie Impulse 2.0

Autor: Vasiliy Sokolov

 

Es ist einfach genial! Ich spreche von dem Indikator-Wrapper

Das Einzige, was mir persönlich an Ihrem wunderbaren universellen Expert Advisor fehlt, ist die Möglichkeit, mit FORTS auf einem Konto mit vielen verschiedenen Expert Advisors zu arbeiten, d.h. die Positionen von Expert Advisors auf magische Weise zu verfolgen, nicht mit Standardmitteln.

Daher verwende ich zur Zeit meine eigenen Lösungen

 
Viktor Vlasenko:

Es ist einfach genial! Ich spreche von dem Indikator-Wrapper

Das Einzige, was mir persönlich an Ihrem wunderbaren universellen Expert Advisor fehlt, ist die Möglichkeit, mit FORTS auf einem Konto mit vielen verschiedenen Expert Advisors zu arbeiten, d.h. den Überblick über die Positionen der Expert Advisors auf magische Weise zu behalten, nicht mit Standardmitteln.

Daher verwende ich bisher meine eigenen Lösungen

Für diesen Zweck gibt es HedgeTerminal, dessen API übrigens mit dem universellen Expert Advisor integriert ist. Der universelle Expert wurde übrigens ursprünglich als Wrapper für HedgeTerminal entwickelt. Aber um die Engine populär zu machen, habe ich sie von HT losgelöst und als eigenständiges Projekt entwickelt.

 
Vasiliy Sokolov:

Zu diesem Zweck gibt es HedgeTerminal, dessen API übrigens in den Universal Expert Advisor integriert ist. Übrigens wurde der Universal Expert ursprünglich als Wrapper für HedgeTerminal entwickelt. Aber um die Engine populär zu machen, habe ich sie von HT losgelöst und als eigenständiges Projekt entwickelt.

Danke, ich habe über HedgeTerminal gelesen - es ist für meine Bedürfnisse überflüssig, und ich möchte nicht mit einem geschlossenen Tool von jemand anderem arbeiten.

und ich mag die Änderung der Datei-Ordner-Struktur in der aktuellen Version sehr.

 

Was meinen Sie mit Universal Expert? Ich denke, wir begannen mit der Tatsache, dass es sowohl für MT4 und MT5 ist. Aber es ist nicht für MT4 kompiliert und seine Bibliotheken sind alle in MQL5.

 
void CUnIndicator::PushName(string name)
{
   int old_size = ArraySize(m_params);
   int size = ArrayResize(m_params, ArraySize(m_params) + 1);
   for(int i = 0; i < old_size; i++)
      m_params[i+1] = m_params[i];
   m_params[0].type = TYPE_STRING;
   m_params[0].string_value = name;
}

Ich vermute, dass hier das gesamte m_params-Array durch den ersten darauf angewendeten Parameter verstopft ist

 

void CUnIndicator::PushName(string name)
{
int old_size = ArraySize(m_params);
int size = ArrayResize(m_params, ArraySize(m_params) + 1);
for(int i = 0; i < old_size; i++)
m_params[i+1] = m_params[i];
m_params[0].type = TYPE_STRING;
m_params[0].string_value = name;
m_params_count++;
}

Es scheint mir, dass es so sein sollte, achten Sie auf m_params_count++; wir erhöhen die Größe des Arrays der übergebenen Parameter, also erhöhen wir den Zähler der übergebenen Parameter, zumindest wenn der Indikator ohne Parameter aufgerufen wird, funktioniert es so. In anderen Fällen scheint es, dass der letzte Parameter beim Start des Indikators nicht wahrgenommen wurde.

 

Ja, und zwar in der gleichen Funktion:

For(int i = old_size-1; i >= 0; i--)
m_params[i+1] = m_params[i];

 

Schöner Artikel.

Wenn die Create-Methode in der CUnIndicator-Klasse für einen benutzerdefinierten Indikator verwendet wird, enthält dieser Code einen Aufruf von PushName(), der eine fehlerhafte Funktion ist.

Wenn ein benutzerdefinierter Indikator erstellt wird, muss das erste Element des MqlParam parameters_array[] den Namen des benutzerdefinierten Indikators enthalten.

Alle Elemente müssen um eine Position nach rechts verschoben werden, um Element 0 für den Namen des benutzerdefinierten Indikators freizugeben.

Ändern Sie das Folgende:

void CUnIndicator::PushName(string name)
{
   int old_size = ArraySize(m_params);
   int size = ArrayResize(m_params, ArraySize(m_params) + 1);
   //for(int i = 0; i < old_size; i++) m_params[i+1] = m_params[i]; // es ist falsch, das so zu schreiben
   for(int i=old_size-1;i>=0;i--) m_params[i+1] = m_params[i]; //Das stimmt.
   m_params[0].type = TYPE_STRING;
   m_params[0].string_value = name; // Individueller Name des Indikators
   m_params_count++;// Anzahl der Parameter plus eins 
}
 
Frage an den Autor: Wie kann ich Indikatoren, die über CUnIndicat aufgerufen werden, ladbar machen?
 

Guten Tag!

Frage an den Autor: Die neueste Version der Trading Engine, die dem Artikel beigefügt ist, wurde heruntergeladen, die beigefügte Strategie Impluse 2.0 wird getestet.

1. Sollte im Strategietester im Visualisierungsmodus das Kontrollfeld der Handelsmodi funktionieren?

2. Sollen die über die Methode TradeState.SetTradeState eingestellten Handelsmodi ausgeführt werden?

Beim Handel auf dem Konto funktioniert das Panel und die Modi werden umgeschaltet, aber im Strategietester funktioniert es nicht.