Probleme mit Werten aus ICustom - Seite 2

 
Carl Schreiber:

Hast Du schon mal den Debugger versucht?

Dafür sollte aber besser der Indikator nicht wo anders im Terminal laufen!

Setze mit DebugBreak() die Punkte, an denen Du Dir die verschiedenen Werte anschauen willst!

Bisher nicht, weil ich bisher aber auch noch nie etwas davon gehört habe. Müsste ich dann wohl mal ausprobieren. Hält man dabei das Programm dann einfach zwischendrin an und schaut ob Werte richtig übergeben wurden? Ist das die Logik dahinter?

Hatte mir vielleicht erhofft, dass ich mir sowas ersparen kann, falls der Fehler für jemanden klar ersichtlich ist :-P

Danke schon einmal für den Tipp.

 
Caipimigu:

Bisher nicht, weil ich bisher aber auch noch nie etwas davon gehört habe. Müsste ich dann wohl mal ausprobieren. Hält man dabei das Programm dann einfach zwischendrin an und schaut ob Werte richtig übergeben wurden? Ist das die Logik dahinter?

Hatte mir vielleicht erhofft, dass ich mir sowas ersparen kann, falls der Fehler für jemanden klar ersichtlich ist :-P

Danke schon einmal für den Tipp.

Meist kommt man beim Entwickeln nicht am Debugger vorbei!

Wird vom Editor gestartet und setz mal ein DebuBreak() am Anfange von OnInit(), OnCalculate() und OnTick() und mach Dich damit vertraut - kann einem viel Zeit ersparen!

 
Carl Schreiber:

Meist kommt man beim Entwickeln nicht am Debugger vorbei!

Wird vom Editor gestartet und setz mal ein DebuBreak() am Anfange von OnInit(), OnCalculate() und OnTick() und mach Dich damit vertraut - kann einem viel Zeit ersparen!

Danke für den Hinweis. Ich habe es soeben ausprobiert. Habe:

void DebugBreak();

vor

int OnInit()
void OnNewBar()
int OnCalculate()

eingefügt. OnTick() habe ich nicht in meinem EA. Das OnNewBar() ist wohl eine Funktion in der wiederum OnTick() verwendet wird. Dder EA soll im Prinzip also erst aktiv werden, sobald sich eine neue Kerze formiert. Wie dem auch sei. Ich habe dann den den Debugger gestartet und die Auswertung bleibt komplett leer.

Irgendeine Idee? Ich werde es hier in der Zwischenzeit natürlich weiter probieren.

 

Seufz - in die jeweilige Funktion an den Anfang, z.B. als erstes, dann kannst Du durch die ganze Funktion zeilenweise gehen. Lass Dir Variablen anzeigen - ist alles im Menü-Punkt Debug des Editors aufgelistet und erklärt!

 
Carl Schreiber:

Seufz - in die jeweilige Funktion an den Anfang, z.B. als erstes, dann kannst Du durch die ganze Funktion zeilenweise gehen. Lass Dir Variablen anzeigen - ist alles im Menü-Punkt Debug des Editors aufgelistet und erklärt!

Sorry für mein Unvermögen. Also wie folgt:

int OnInit()
  {void DebugBreak();

Falls ja kriege ich den folgenden Fehler:

Für die Vollständigkeit des Codes den ich gepostet habe, ist hier noch der Code von OnNewBar():

//+------------------------------------------------------------------+
//|                                                     OnNewBar.mqh |
//|                                            Copyright 2010, Lizar |
//|                                                    Lizar@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, Lizar"
#property link      "Lizar@mail.ru"

#include <Lib_CisNewBar.mqh>
CisNewBar current_chart; // instance of the CisNewBar class: current chart

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int period_seconds=PeriodSeconds(_Period);                     // Number of seconds in current chart period
   datetime new_time=TimeCurrent()/period_seconds*period_seconds; // Time of bar opening on current chart
   if(current_chart.isNewBar(new_time)) OnNewBar();               // When new bar appears - launch the NewBar event handler
  }
 
Caipimigu:

Bisher nicht, weil ich bisher aber auch noch nie etwas davon gehört habe.

Ebenfalls Seufz!

Mach einfach einen Doppelklick auf die Nummer der Zeile und du hast einen Breakpoint. Nochmal Doppelklick drauf und weg ist er wieder.

Ist viel flexibler als DebugBreak().

Pass dir die Symbolleiste im Metaeditor an, da ist standardmäßig zuwenig drin.

 
Caipimigu:

Sorry für mein Unvermögen. Also wie folgt:

Falls ja kriege ich den folgenden Fehler:

Für die Vollständigkeit des Codes den ich gepostet habe, ist hier noch der Code von OnNewBar():

DebugBreak() ist eine bereits definierte (Standard-)Funktion also so:

int OnInit()
  {
    DebugBreak();
  ...
  }
 
Caipimigu:

Danke für den Hinweis. Ich habe es soeben ausprobiert. Habe:

vor

eingefügt. OnTick() habe ich nicht in meinem EA. Das OnNewBar() ist wohl eine Funktion in der wiederum OnTick() verwendet wird. Dder EA soll im Prinzip also erst aktiv werden, sobald sich eine neue Kerze formiert. Wie dem auch sei. Ich habe dann den den Debugger gestartet und die Auswertung bleibt komplett leer.

Irgendeine Idee? Ich werde es hier in der Zwischenzeit natürlich weiter probieren.

Ohne die OnTick wird der ea nicht funktionieren.

die OnNewBar wird von der OnTick aufgerufen, ohne OnTick wird der ea niemals was machen, in der OnNewBar hat die OnTick nichts verloren


EDIT: hier eine Funktion für einen neuen bar

bool isNewBar()
  {
   static datetime lastTime=0;
   datetime lastbarTime=(datetime)SeriesInfoInteger(Symbol(),0,SERIES_LASTBAR_DATE);
   if(lastTime==0)
     {
      lastTime=lastbarTime;
      return(false);
     }
   if(lastTime!=lastbarTime)
     {
      lastTime=lastbarTime;
      return(true);
     }
   return(false);
  }
Grund der Beschwerde: