Calling the iCustom(Symbol(),Period(),"Examples\\Zigzag".... about a separate class; works in debugging with historical data, but not in real time

 

My class for the iCustom (Symbol (), Period (), "Examples\\Zigzag"... in the file<identifycandle\SARBBKlassen.mqh>

class CGetHochTief {
   int zigZagHandle;
   double   zigZagLow[];

   public:

double GetTief(int FeinheitE ,int AbweichungE, int RueckschritteE) { 

          zigZagHandle=iCustom(Symbol(),Period(),"Examples\\Zigzag",FeinheitE,AbweichungE,RueckschritteE,0);

          if(CopyBuffer(zigZagHandle,2,0,AbweichungE,zigZagLow)<0) {     Print("Can't copy ZigZag buffer 1!");    }

          return(zigZagLow[0]);

        }

};

CGetHochTief GetHochTief;

_______________________________________________________________

Calling the class in the Expertadviser

#include <identifycandle\SARBBKlassen.mqh>

....

void OnTick()  {

LetztesTiefMerker = GetHochTief.GetTief(20,7,5);

...

}

_______________________________________________________________

I'm at a loss, does anyone have any idea why it works in the test environment and not in the real market?

I would be very grateful for any tips.

Kind regards - Thomas

 
  1. Ich kann Dir zu mt5 nicht helfen, aber
  2. Du kannst hier Deutsch sprechen,
  3. trotzdem ist ".. it works .. not .. in real market" zu wenig Dir zu helfen!

Was sagen die logs? Es wird doch eine Auftrag erteilt? Bist Du mit dem Debugger Deinen EA durchgegangen?

Verwende Print oder Comment, um die entscheidenden Variablenwerte einzusehen!

 
Carl Schreiber:
  1. Ich kann Dir zu mt5 nicht helfen, aber
  2. Du kannst hier Deutsch sprechen,
  3. trotzdem ist ".. it works .. not .. in real market" zu wenig Dir zu helfen!

Was sagen die logs? Es wird doch eine Auftrag erteilt? Bist Du mit dem Debugger Deinen EA durchgegangen?

Verwende Print oder Comment, um die entscheidenden Variablenwerte einzusehen!


Im Register Journal steht:

2017.11.29 05:04:23.458              Experts expert M1HochTief (EURUSD,M1) loaded successfully

2017.11.29 05:53:56.252              Network              '5092998': scanning network for access points

2017.11.29 05:53:59.952              Network              '5092998': scanning network finishedEs kommen

keine Fehler oder so.


Im Register Experten kommt:

2017.11.29 05:04:25.160 M1HochTief (EURUSD,M1)          vorher

2017.11.29 05:04:25.359 M1HochTief (EURUSD,M1)          zigZagLow[0]: 0.0

2017.11.29 05:04:25.359 M1HochTief (EURUSD,M1)          nachher 0

2017.11.29 05:04:25.359 M1HochTief (EURUSD,M1)          LetztesTief3: 0.0 LetztesTief2: 0.0 LetztesTief1: 0.0 LetztesTief: 0.0 LetztesTiefMerker: 0.0

2017.11.29 05:04:25.430 M1HochTief (EURUSD,M1)          zigZagHigh[0]: 0.0

2017.11.29 05:04:25.430 M1HochTief (EURUSD,M1)          LetztesHoch3: 0.0 LetztesHoch2: 0.0 LetztesHoch1: 0.0 LetztesHoch: 0.0 LetztesHochMerker: 0.0

 

Das bedeutet, das Programm wird geladen, läuft 2mal durch und bleibt dann stehen

 

Hi Thomas,

Falls du mehr Code postest, kann ich dir helfen.

Grüße, Otto

 

Naja, wenn keine neuen Positionen eröffnet werden, könnte es sein, dass:

  1. Du zu ungeduldig bist ;)
  2. Du einen Fehler in Deiner 'Logik' zu Positionseröffnung hast.

Dazu lass Dir mit Comment() die aktuellen Werte für die Positionseröffnung auf dem Chart anzeigen (so wird das EA-Log nicht so voll wie mit Print()) und Du kannst Deinen EA 'beim Atmen' zuschauen!

(Bei mir werden boolsche Ausdrücke mit "..",(string)boolVar,.. mit true oder false ausgegeben nicht mit 0 und 1 (jedenfalls im MT4)

 
Otto Pauser:

Hi Thomas,

Falls du mehr Code postest, kann ich dir helfen.

Grüße, Otto


Vielmehr Code ist es nicht. Die Klasse und der Aufruf der Klasse. Alles andere läuft ja.

Dennoch, im Anhang die kompletten Dateien ...

Dateien:
SARBBKlassen.mqh  196 kb
M1HochTief.mq5  41 kb
 

Hab’s selber rausgefunden.

Der Aufruf

zigZagHandle=iCustom(Symbol(),Period(),"Examples\\Zigzag",20,7,5);

Muss schon im Bereich

int OnInit()

stattfinden, dann gibt der ZigZag seine Werte im Bereich

void OnTick()

  mit

if(CopyBuffer(zigZagHandle,1,0,7,zigZagHigh)<0)

   {      Print("Can't copy ZigZag buffer 1!");

      return;

   }

Immer zurück

 

Wenn jedoch der Zigzag in einer eigenen Klasse aufgerufen wird und somit bei jeder Abfrage des nächsten Hochs der Zigzag wiederholt mit

zigZagHandle=iCustom(Symbol(),Period(),"Examples\\Zigzag",20,7,5);

initialisiert wird (siehe oben im Code der Klasse), fängt er nach einiger Zeit an zu spinnen. Manchmal geht er, meistens jedoch nicht.

So sieht nach meinen Test aus