Diskussion zum Artikel "Wie man den Berechnungsblock eines Indikators in den Code eines Expert Advisors überträgt" - Seite 2

 

@Dmitriy Gizlyk Sehr guter Artikel. Ich habe Ihren Code in meinem EA implementiert und festgestellt, dass der Indikator nicht auf dem Chart geplottet wird. Wie kann ich diesen im EA erstellten Indikator auf dem Chart plotten?

Ich danke Ihnen.

 

Joao Luiz Sa Marchioro:

Nach so etwas habe ich gesucht. Ich danke Ihnen vielmals. Ausgezeichneter Artikel.


Hallo, haben Sie dieses Beispiel implementiert? Ich habe es implementiert und festgestellt, dass der Indikator nicht auf dem Chart geplottet wird. Ich habe verschiedene Möglichkeiten ausprobiert und recherchiert, aber ich war nicht erfolgreich. Wäre es möglich, den Indikator innerhalb des EA-Codes zu plotten, wie es in der obigen Studie gemacht wurde?

 
ein Passwort, um Ihr Konto aufzufüllen
 
wellingtondala:

@Dmitriy Gizlyk Sehr guter Artikel. Ich habe Ihren Code in meinem EA implementiert und festgestellt, dass der Indikator nicht im Diagramm angezeigt wird. Wie kann ich diesen im EA erstellten Indikator im Diagramm anzeigen?

Ich danke Ihnen.

Der Artikel stellt eine Methode vor, um den mathematischen Teil eines Indikators in einen Advisor zu übertragen. Dieser Ansatz ist geeignet, um die Berechnungen zu beschleunigen und den Indikator vor dem Benutzer zu verbergen. Es ist nicht möglich, einen Indikator aus einem Expert Advisor zu zeichnen, wie es bei einem Indikator der Fall ist. Um ihn anzuzeigen, müssen Sie für jede Bewegung grafische Objekte auf dem Chart erstellen. Dieser Vorgang nimmt viel Zeit des Programmierers in Anspruch und kostet Rechenressourcen, wenn er verwendet wird. Wenn Sie einen Indikator im Chart benötigen, ist es nicht sinnvoll, seinen Code in den Advisor zu übertragen; es ist einfacher, den Indikator selbst zu verwenden. Um den Advisor mit dem Indikator mit einer Datei zu übertragen, können Sie die Funktionalität der Ressource nutzen.

 

DMITRIY GIZLYK, vielen Dank für den Artikel.

Ich interessiere mich für die Frage des Multithreading, ist es möglich, die Klasse parallel auf einem separaten Prozessorkern laufen zu lassen? Sie erwähnten am Ende des Artikels "der Vorteil kann durch die Multithreading-Architektur von MetaTrader 5 ausgeglichen werden".

Dmitriy Gizlyk
Dmitriy Gizlyk
  • www.mql5.com
Опубликовал статью Нейросети - это просто Каждый раз, когда речь заходит об искусственном интеллекте, в голове всплывают какие-то фантастические образы и кажется, что это очень сложное и непостижимое. Но мы все чаще и чаще слышим об искусственном интеллекте в повседневной жизни. В новостных лентах все чаще пишут о каких-либо достижениях с...
 
Dmitriy Gizlyk:
Ja, im Artikel steht, dass die Berechnung auf geschlossenen Candlesticks basiert. Um auf jedem Tick zu berechnen, müssen wir die Prüfung der Eröffnung eines neuen Bar aus dem Code zu entfernen und kopieren Sie die Geschichte von "0" bar, nicht von "1", wie es jetzt ist.

Wenn ich es richtig verstanden habe, müssen Sie, um mit dem vollständigen Satz von Zeitreihendaten zu arbeiten, neben diesem Array weitere Arrays hinzufügen:

массив исходных данных для расчета (m_source_data);

Das heißt, wenn der Indikator auf verschiedene Bar-Daten zugreift - time[], maximum und minimum price high[] low[], dann müssen Sie 3 weitere Arrays analog zu m_source_data hinzufügen und die Daten dort in CIndicator::LoadHistory kopieren ,

und da die Funktion virtuell ist, kann sie direkt in den Indikator umgeschrieben werden?

 

Hier tritt der Fehler auf, wenn Sie mehr als einen Puffer erstellen

bool CIndicator::SetBufferSize(const int bars)
  {
   if(bars>0)
      m_data_len  =  bars;
   else
      m_data_len  =  Bars(m_Symbol,m_Timeframe);
//---
   if(m_data_len<=0)
     {
      for(int i=0;i<m_buffers;i++)
         ar_IndBuffers[i].Shutdown();
      return false;
     }
//---
   if(m_history_len<m_data_len)
      if(!SetHistoryLen(m_data_len))
         return false;
//---
   for(int i=0;i<m_buffers;i++)
     {
      ar_IndBuffers[i].Shutdown();
      if(!ar_IndBuffers[i].Resize(m_data_len))
         return false;
     }
//---
   return true;
  }

array out of range in 'Indicator.mqh' (156,20)


UPD: Ich habe eine Zeile am Anfang der Funktion hinzugefügt und das Problem ist gelöst.

ArrayResize(ar_IndBuffers,m_buffers,m_buffers);

 

Nochmals vielen Dank für den Artikel, es hat alles funktioniert! Das Interessanteste ist, dass es in dieser Version schneller funktioniert. Mein Pfeil-Indikator verwendet die Abfrage von Ticks über CopyTicksRange und CopyTicks Funktionen, die eine Menge von Glitches verursacht und führte oft zu falschen Daten. Durch die Klasse funktioniert alles wie am Schnürchen. Ich bringe es damit in Verbindung, dass CopyTicksRange und CopyTicks in Indikatoren ein wenig anders funktionieren, das System gibt ihnen keine Zeit sich zu synchronisieren.



ps. wer Pfeilindikatoren mit mehreren Puffern übertragen will, sollte beachten, dass er die Indicator.mqh Funktionen bearbeiten muss.

CIndicator::SetHistoryLen(const int bars)

CIndicator::LoadHistory(void)

в зоне protected 

Nun, und die Methode des Schreibens und Empfangens von Daten aus Indikatorpuffern ar_IndBuffers ist für den Pfeilmann anders.

 

Hallo Leute,

Ich habe einen Indikator, den ich selbst in mql5 programmiert habe und ich möchte die Informationen aus dem Puffer dieses Indikators in einem EA, den ich programmiere, abrufen. Könnt ihr mir helfen, wie man das macht? Werden mir die Codes im Artikel helfen?

Ich danke Ihnen

 
Carlisson Correia :

Personal,

Ich habe einen Indikator, den ich selbst in mql5 programmiert habe, und ich möchte die Informationen aus dem Puffer dieses Indikators in einem EA abrufen, den ich programmiere. Könnten Sie mir helfen, wie ich das machen kann? Werden mir die Codes im Artikel helfen?

Ich danke Ihnen

Guten abend

Sehen Sie sich die iCustom-Funktion an