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

 

6. scheint zu fehlen:

TradePerformer( 4, Symb4, Trade4, StLoss4, TkProfit4, Lots4, Slippage4, UpSignal, DnSignal, UpStop, DnStop);

in Exp_TEMA.mq5 ?

 
ias:

6. scheint zu fehlen

in Exp_TEMA.mq5?

Ja! Ich habe wohl zu hart gearbeitet und mich bei dieser abnormalen Hitze überhitzt!
 
Renat:

Bitte machen Sie ein reproduzierbares Beispiel. Das heißt, Sie brauchen vorgefertigten Code, den Sie kompilieren, in ein Diagramm einfügen und Ergebnisse erhalten können.

Ohne dies werden nur wenige Menschen verstehen, worüber wir sprechen.

Ich dachte, ich kürze das ab, um die Leute nicht umsonst abzuschrecken.

Hier ist die vollständige Version:

#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);
   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;

//--------------------------------------------------------------------
   //1 input rates_total = 9667 / prev_calculated = 0 / Bars = 9667
   //-- dann rates_total = 9667 / prev_calculated = 9667 / Bars = 9667
   //-- in process dann rates_total = 9668 / prev_calculated = 9667 / Bars = 9668
   //Drucken("rates_total: " + (string)rates_total);
   if (rates_total == prev_calculated) return (rates_total);//-- Es ist immer noch dieselbe Bar, also sind wir raus.

   //-- Ermitteln der Anzahl der unbearbeiteten Takte (bei der ersten Eingabe sind es alle, dann 1)
   //-- Die Anzahl der ausgegebenen Balken bezieht sich auf das Diagramm selbst, aber wir werden ein anderes Instrument ausgeben
   //-- die Anzahl der Balken kann unterschiedlich sein, daher werden zunächst alle Daten in den Puffer übertragen --
   Counted_bars = rates_total-prev_calculated;
   
   // Print("Gezählte_Balken: " + Gezählte_Balken);
   Print("rates_total: " + rates_total + "   /   prev_calculated: " + prev_calculated + "   /   Bars: " + Bars(Symbol(),0));
   //-- Speicher nach der Anzahl der Takte des Hauptinstruments zuweisen --
   if (ArrayResize(ArrayBuffer, Counted_bars,0) == -1) return (rates_total);//-- Speicherzuweisungsfehler --
   //--- Initialisierung der Array-Elemente mit dem Wert EMPTY_VALUE ----
   ArrayInitialize(ArrayBuffer,EMPTY_VALUE);
         
   //-- Ermittelt, wie viele Balken dieses Instrument tatsächlich hat --
   copied = (int)SeriesInfoInteger(InstrumentName,0,SERIES_BARS_COUNT);
   
   if (copied > 0){
      copied=CopyClose(InstrumentName,0,0,copied,ArrayBuffer);//-- Daten in den Speicherpuffer schreiben --
      if (copied <= 0) return (rates_total);//-- Fehler
   } 
   else{

      return (rates_total);//-- Fehler 
   }
    
   if (Counted_bars > copied) Counted_bars = copied;//-- Nimm den niedrigeren Wert --

   Counted_bars--;//-- Da das Zählen von 0 --
   //-- Daten sind in den Speicherpuffer geladen, jetzt werden sie von rechts nach links in den Bildschirmpuffer geschrieben --
   for (int i = Counted_bars; i > 0; 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.
}
 

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.

[Gelöscht]  
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.


Ich bin mir über die Korrektheit der Implementierung und des Algorithmus im Allgemeinen nicht sicher, aber aufgrund des Codes und dessen, was ich damit machen konnte, gehe ich davon aus:

Die Zeichenkette

// Print("Gezählte_Balken: " + Gezählte_Balken);
Print("rates_total: " + rates_total + "   /   prev_calculated: " + prev_calculated + "   /   Bars: " + Bars(Symbol(),0));

sollte wie folgt aussehen

// Print("Gezählte_Balken: " + Gezählte_Balken);
Print("rates_total: " + rates_total + "   /   prev_calculated: " + prev_calculated + "   /   Bars: " + Bars(InstrumentName,Period()));


Vielleicht wäre es korrekter, den Punkt überall als "0" in PERIOD_CURRENT zu ändern.

Zumindest hat bei mir nach solchen Änderungen alles funktioniert.....

PS

Vielleicht ist es nicht relevant, aber auf diese Weise macht der Compiler viel weniger aus

Print("rates_total: ",rates_total," / prev_calculated: ",prev_calculated," / Bars: ",Bars(InstrumentName, PERIOD_CURRENT));
 
Interesting:

Ich bin mir über die korrekte Implementierung und den Algorithmus im Allgemeinen nicht sicher, aber anhand des Codes und dessen, was ich damit machen konnte, gehe ich davon aus:

Die Zeichenkette

sollte wie folgt aussehen

PS

Vielleicht wäre es korrekter, den Punkt überall als "0" in PERIOD_CURRENT zu ändern.

Zumindest hat bei mir nach solchen Änderungen alles funktioniert....

Geändert, funktioniert immer noch nicht, die Grafik entspricht nicht der Realität.
 

Auf meinem Bildschirm sieht es so aus:


Eindeutig falsch.
[Gelöscht]  

So sah es bei mir aus

Da ich aber nicht auf die Logik des Inducers und seine Implementierung eingegangen bin, kann ich nicht beurteilen, ob die Ergebnisse korrekt sind.


PS

Ich würde trotzdem das Symbol im Parameter loswerden und es durch das aktuelle Symbol und TF ersetzen, und es dann im Expert Advisor oder einem anderen Tool mit dem üblichen iCustom() verwenden.

Außerdem verstehe ich nicht wirklich die Logik der Arbeit mit Puffern (ich meine den Schwanz des Rechners und so weiter). Meiner Meinung nach, gibt es eine Menge zu arbeiten auf....

Dateien:
proba.mq5  4 kb
 
Interesting:

Das ist es, was ich bekommen habe

Da ich aber nicht auf die Logik des Inducers und seine Implementierung eingegangen bin, kann ich die Korrektheit der Ergebnisse nicht beurteilen.


PS

Ich würde noch das Symbol im Parameter loswerden und es entsprechend dem aktuellen Symbol und TF machen, und es dann in Expert Advisor oder einem anderen Tool mit dem üblichen iCustom() verwenden.


Danke für den Rat, ich werde es versuchen.
[Gelöscht]  

Interesting:

Außerdem verstehe ich die Logik der Arbeit mit Puffern nicht wirklich (ich meine den Schwanz des Rechners und so weiter). Meiner Meinung nach gibt es noch eine Menge zu tun....


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 Historie) anstelle von "rechten" (aktuellen) anzeigt ....

Oder ich verstehe etwas in der Logik dieses Indikators überhaupt nicht....