Diskussion zum Artikel "Erstellen eines Expert Advisors, der mit verschiedenen Instrumenten handelt" - Seite 4

 
Interesting:

Wenn ich es richtig verstanden habe, reicht ein Puffer aus (er muss nur richtig berechnet und im Diagramm eingezeichnet werden).

PS

Und bei der aktuellen Variante habe ich den Eindruck, dass der Inducer "linke" Daten (ganz am Anfang der Geschichte) anstelle von "rechten" (aktuellen) anzeigt ....

Oder ich verstehe in der Logik dieses Indikators überhaupt nichts....


Wenn Sie zum Beispiel EURUSD zu EURUSD oder EURJPY zu EURJPY ausgeben, funktioniert alles einwandfrei.

Die Ausgaberichtung scheint also zu stimmen.

Ich habe hier viele Varianten ausprobiert und sogar diese:

handle1=iMA(InstrumentName,PERIOD_CURRENT,ex_Period_MA_1,0,MODE_SMA, PRICE_CLOSE);

...

copied=CopyBuffer(handle1,0,0,0,Counted_bars,Buf_0);

Trotzdem kommt nichts heraus.

Hat jemand ein Beispiel für die Anzeige von zwei verschiedenen Tools auf einem Bildschirm?

 
gisip:

Was mache ich falsch, warum kann ich den Chart eines anderen Instruments nicht normal anzeigen lassen?

Alles funktionierte in MQL4, hier funktioniert es nur, wenn Sie es auf das gleiche Instrument anzeigen, dann keine Fehler.


Es funktioniert in beschnittener Form. Fügen Sie Prüfungen und Ökonomie hinzu.

#property indicator_separate_window    // Der Indikator wird in einem separaten Fenster gezeichnet
#property indicator_buffers 1

#property indicator_plots   1
#property indicator_type1   DRAW_LINE
#property indicator_color1  Aqua

input string InstrumentName="EURJPY";

//-- Indikator-Array
double ScreenBuffer[];

//-- Dynamischer Puffer --
double ArrayBuffer[];
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int OnInit() // Spezielle init()-Funktion
  {
//--------------------------------------------------------------------

   IndicatorSetString(INDICATOR_SHORTNAME,InstrumentName);
   SetIndexBuffer(0,ScreenBuffer,INDICATOR_DATA);
   ArraySetAsSeries(ArrayBuffer,true);
   ArraySetAsSeries(ScreenBuffer,true);
   return 0;                          // Beenden
  }
//--------------------------------------------------------------------
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int Counted_bars;   // Anzahl der zu bedienenden Balken 
   int copied;

//--------------------------------------------------------------------
   copied=(int)SeriesInfoInteger(InstrumentName,0,SERIES_BARS_COUNT);
   copied=CopyClose(InstrumentName,PERIOD_M1,0,copied,ArrayBuffer);//-- Daten in den Speicherpuffer schreiben --

   for(int i=0; i<copied; i++)
     {
      ScreenBuffer[i]=ArrayBuffer[i];
     }

//--------------------------------------------------------------------
   return(rates_total);
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,0,-1);             // werden alle Objekte aus dem Diagramm gelöscht.
  }
[Gelöscht]  
gisip:

Wenn Sie zum Beispiel EURUSD zu EURUSD oder EURJPY zu EURJPY ausgeben, funktioniert alles einwandfrei.

Die Ausgaberichtung ist also einigermaßen korrekt.

Ich habe hier eine Menge Varianten ausprobiert und sogar diese:

handle1=iMA(InstrumentName,PERIOD_CURRENT,ex_Period_MA_1,0,MODE_SMA, PRICE_CLOSE);

...

copied=CopyBuffer(handle1,0,0,0,Counted_bars,Buf_0);

Trotzdem kommt nichts heraus.

Hat jemand ein Beispiel, wie man zwei verschiedene Werkzeuge auf einem Bildschirm darstellen kann, zumindest irgendwie?

Haben Sie einen Quellcode für MQL4?


Ich habe bereits eine Alternative vorgeschlagen, die darin besteht, einen Index für das aktuelle Instrument zu erstellen und diesen zu 100% zu debuggen. Danach können Sie ihn einfach mit den notwendigen Parametern im Expert Advisor oder in einem anderen Indikator aufrufen.

Bei einer solchen Implementierung müssen Sie die grundlegende Logik des Indiktors ändern, da die an den Rechner übergebenen Parameter für andere Instrumente nicht ganz korrekt sind(die Anzahl der Balken und andere Dinge stimmen möglicherweise nicht überein) ....

Und im Großen und Ganzen ist dieses Konzept nicht sehr "korrekt" (um es gelinde auszudrücken).


PS

Kurz gesagt, es gibt hier zwei Möglichkeiten:

1. Alles für den aktuellen TF und das aktuelle Instrument realisieren und die Funktionsfähigkeit prüfen. Danach iCustom() verwenden;

2. Die Logik des Inducers so umschreiben, dass er im Rechner absolut alle Daten über das in den Parametern angegebene Instrument erhält (aufwendige und nicht sehr korrekte Methode).

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - Документация по MQL5
 
gisip:
Geändert, funktioniert immer noch nicht, das Diagramm ist nicht wahr.

Tun Sie dies in Ihrem Indikator

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int OnInit() // Spezielle init()-Funktion
  {
//--------------------------------------------------------------------

   IndicatorSetString(INDICATOR_SHORTNAME,InstrumentName);
   SetIndexBuffer(0,ScreenBuffer,INDICATOR_DATA);
   ArraySetAsSeries(ScreenBuffer,true);
   
   return 0;                          // Beenden
  }

und lesen Sie den Abschnitt Indizierungsrichtung in Arrays und Zeitreihen

[Gelöscht]  
DC2008:

Die abgeschnittene Form funktioniert. Fügen Sie Prüfungen und wirtschaftliche Aspekte hinzu.

Diese beiden Dinge werden dort nicht wirklich benötigt.

//1

//-- Dynamischer Puffer --
double ArrayBuffer[];
...............
ArraySetAsSeries(ArrayBuffer,true);

//2

   for(int i=0; i<copied; i++)
     {
      ScreenBuffer[i]=ArrayBuffer[i];
     }
 
Interesting:

Das sind die beiden Dinge, die Sie dort nicht brauchen.

Genau genommen, ja.
 

Ja, ich glaube, es hat funktioniert!

Vielen Dank an alle!!!

Ich werde es weiter testen.

 

Sie müssen Ihre Trades visualisieren. Der Expert Advisor ist mehrwährungsfähig. Sagen wir, es hängt auf EURUSD und öffnet Geschäfte auf andere Währungspaare. Ich habe einen Unterschied in den Ergebnissen, ich verstehe, dass es mein Fehler ist, aber ich kann es nicht überprüfen (ich kann keinen Chart mit AUDUSD-Geschäften öffnen, wenn der Expert Advisor am EURUSD hängt).

Wenn der Expert Advisor am AUDUSD hängt, öffne ich ihn und sehe, dass er so funktioniert, wie ich ihn programmiert habe, aber wenn er am EURUSD hängt, sind die Ergebnisse anders, und ich kann nicht verstehen, warum. Eine Visualisierung der Trades wäre sehr hilfreich.

Документация по MQL5: Операции с графиками / ChartOpen
Документация по MQL5: Операции с графиками / ChartOpen
  • www.mql5.com
Операции с графиками / ChartOpen - Документация по MQL5
 

Beim Testen von Exp_TEMA.mq5 erhalten Told[] Tnew[1]-Ausdrücke die folgenden Werte:
Told[] Expression could not be evaluated
Tnew[1] Invalid array range.
Was bedeuten diese Werte und wie wirken sie sich auf das Ergebnis der Arbeit des Expert Advisors aus?

Warum öffnet Exp_TEMA.mq5 während des Tests Trades innerhalb eines Balkens?

Führt es zu einer Verringerung des Codes, der Ausführungszeit, der Slippage und der Kosten (Provisionen usw.), wenn wir, anstatt eine Position zu schließen und eine Position in die entgegengesetzte Richtung zu eröffnen, einen "Flip" machen, d.h. eine Position in die entgegengesetzte Richtung mit doppeltem Volumen eröffnen?

Abschlüsse innerhalb des Balkens.

[Gelöscht]  
ias:

Beim Testen von Exp_TEMA.mq5 erhalten die Ausdrücke Told[] Tnew[1]die folgenden Werte:
Told[] Expression could not be evaluated
Tnew[1] Invalid array range.
Was bedeuten diese Werte und wie beeinflussen sie die Arbeit des Expert Advisors?

Bei Tnew[1] Ungültiger Ar ray-Bereich scheint es sich um eine Überschreitung des Bereichs zu handeln. Vergessen Sie nicht, dass die Nummerierung der Array-Elemente bei 0 beginnt!