Probleme mit Werten aus ICustom - Seite 2

Einloggen oder registrieren, um einen Kommentar zu schreiben
Caipimigu
32
Caipimigu  
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.

Carl Schreiber
Moderator
8683
Carl Schreiber  
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!

Caipimigu
32
Caipimigu  
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.

Carl Schreiber
Moderator
8683
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!

Caipimigu
32
Caipimigu  
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
  }
Otto Pauser
1853
Otto Pauser  
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.

Carl Schreiber
Moderator
8683
Carl Schreiber  
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();
  ...
  }
amando
2017
amando  
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);
  }
12
Einloggen oder registrieren, um einen Kommentar zu schreiben