Jump to content


Photo

Indikatorberechnung am Wochenende möglich?


Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.

  • Please log in to reply
19 replies to this topic

#1 HechTrader

HechTrader

    Runners

  • Addict
  • PipPip
  • 34 posts
  • 128 thanks

Posted 16 January 2016 - 06:55 PM

Hallo,

 

habe mal eine doofe Frage: wenn ich mir nen Indikator programmiere, nutze ich ja den OnCalculate Event Handler. Der wird ja quasi aktiv, wenn er eine neue Preisstellung erhält. WIe ist das denn jetzt, wenn ich mir am Wochenende einen Indikator basteln möchte: kann ich den dann überhaupt testen? Da kommen ja keine Ticks rein, demnach wird die Berechnung ja gar nicht ausgeführt.

 

Ich frage mich halt, ob ich etwas falsch gemacht habe oder ob es an o.g. Gründen liegt. Ich erhalte beim Compilen keine Fehlermeldung oder Warnung oder sonstiges.

 

VIelen Dank für Eure Unterstützung.

 

 


  • 0

Thanked by 6 Members:
Vola , Rumpel , Bull68 , Kleinerbroker , whipsaw , WOGO

#2 WOGO

WOGO

    Floor Broker

  • Developer
  • 1,008 posts
  • 6800 thanks

Posted 16 January 2016 - 07:42 PM

Hallo,

 

habe mal eine doofe Frage: wenn ich mir nen Indikator programmiere, nutze ich ja den OnCalculate Event Handler. Der wird ja quasi aktiv, wenn er eine neue Preisstellung erhält. WIe ist das denn jetzt, wenn ich mir am Wochenende einen Indikator basteln möchte: kann ich den dann überhaupt testen? Da kommen ja keine Ticks rein, demnach wird die Berechnung ja gar nicht ausgeführt.

 

Ich frage mich halt, ob ich etwas falsch gemacht habe oder ob es an o.g. Gründen liegt. Ich erhalte beim Compilen keine Fehlermeldung oder Warnung oder sonstiges.

 

VIelen Dank für Eure Unterstützung.

Ticks gibt's am Wochenende nicht, da ja der Forexmarkt nicht offen hat.

Du kannst aber einen Dummy-EA im Strategietester laufen lassen und deinen Indikator einfach reinziehen. Dann siehst du auch, ob er richtig funktioniert.


  • 1
„Sicher ist, dass nichts sicher ist. Selbst das nicht.“
(Joachim Ringelnatz)

Thanked by 5 Members:
Vola , Bull68 , Rumpel , Kleinerbroker , whipsaw

#3 HechTrader

HechTrader

    Runners

  • Addict
  • PipPip
  • 34 posts
  • 128 thanks

Posted 16 January 2016 - 08:29 PM

Wogo, vielen Dank für die schnelle Info. Ich werde das versuchen. Eine Frage habe ich dennoch: wieso funktioniert eigentlich dann ein Indikator wie ATR auch ohne Ticks?


Gesendet von iPhone mit Tapatalk
  • 0

Thanked by 4 Members:
Vola , Rumpel , Kleinerbroker , whipsaw

#4 Kleinerbroker

Kleinerbroker

    Floor Broker

  • Validating
  • PipPipPipPipPipPip
  • 1,504 posts
  • 9809 thanks
  • Wohnsitz:BW

Posted 16 January 2016 - 10:08 PM

Eine Frage habe ich dennoch: wieso funktioniert eigentlich dann ein Indikator wie ATR auch ohne Ticks?

 

... beim ersten neuen Aufruf des Chart wird die INIT() durchlaufen . Dabei wird das Chart ein einziges mal aufgebaut, somit auch der Indikator berechnet . Danach "steht" das Chart bis ein einzelner Tick einläuft . Dieser führt zur erneuten Aktualisierung des Chart . KB


  • 0
Do not trade alone

Thanked by 5 Members:
Vola , whipsaw , WOGO , Bull68 , Rumpel

#5 HechTrader

HechTrader

    Runners

  • Addict
  • PipPip
  • 34 posts
  • 128 thanks

Posted 16 January 2016 - 10:43 PM

Was meinst du denn mit dem ersten neuen Aufruf des Chart? Habe sowohl meinen Indi als auch den ATR auf den Chart gezogen, dabei wird ATR berechnet, meiner hingegen nicht.


Gesendet von iPhone mit Tapatalk
  • 0

Thanked by 4 Members:
Vola , whipsaw , Rumpel , WOGO

#6 WOGO

WOGO

    Floor Broker

  • Developer
  • 1,008 posts
  • 6800 thanks

Posted 16 January 2016 - 11:32 PM

Was meinst du denn mit dem ersten neuen Aufruf des Chart? Habe sowohl meinen Indi als auch den ATR auf den Chart gezogen, dabei wird ATR berechnet, meiner hingegen nicht.


Gesendet von iPhone mit Tapatalk

Der ATR Indikator berechnet beim ersten Durchlauf alle historischen Bars (prev_calculated==0).

Schau dir mal den Code an.

 

Um den Ablauf zu verstehen ist es u.U. hilfreich, wenn du dir folgende Debugausgabe einbaust:

 

Print("Bars = ",Bars,", rates_total = ",rates_total,",  prev_calculated = ",prev_calculated); 

  • 0
„Sicher ist, dass nichts sicher ist. Selbst das nicht.“
(Joachim Ringelnatz)

Thanked by 4 Members:
Vola , whipsaw , Rumpel , Kleinerbroker

#7 Kleinerbroker

Kleinerbroker

    Floor Broker

  • Validating
  • PipPipPipPipPipPip
  • 1,504 posts
  • 9809 thanks
  • Wohnsitz:BW

Posted 17 January 2016 - 11:30 AM

Was meinst du denn mit dem ersten neuen Aufruf des Chart? Habe sowohl meinen Indi als auch den ATR auf den Chart gezogen, dabei wird ATR berechnet, meiner hingegen nicht.


Gesendet von iPhone mit Tapatalk

 

... das kann ein Issue mit Deinem Indi sein . Wenn der ATR berechnet wird, dann ist das eigentlich Indiz dafür, dass der Metatrader ok arbeitet....wenn aller Code OK ist . Neben dem guten Tip von WOGO , sehe auch mal in die Fehlermeldungen des MT4-Terminals ... dort die Registerkarte "Journal" und " Experten" .

 

Ein weiterer Trick um eine (wenigstens) einmalige neue Berechnung aller Chartinhalte zu erreichen ist es , zwischen den TF zu wechseln . Bei jedem Wechsel des TF wird ebenfalls die INIT() neu durchlaufen .

 

Viel Erfolg

 

KB


  • 1
Do not trade alone

Thanked by 4 Members:
Vola , whipsaw , WOGO , Rumpel

#8 HechTrader

HechTrader

    Runners

  • Addict
  • PipPip
  • 34 posts
  • 128 thanks

Posted 17 January 2016 - 02:44 PM

Hey Jungs, super Unterstützung!!! Ich erhalte die Meldung im Journal "loaded successfully", aber: Experten-Eintrag: Array out of Range (59,25). Was komisch ist: wenn ich den Indi über den Debugmodus starte, wird er plötzlich wunderbar kalkuliert und bringt korrekte Ergebnisse. Muss mal sehen ob ich am Ende der Schleife was falsch mache, ggf frage ich Kerzen ab die nicht mehr in der Time Series liegen.


Gesendet von iPhone mit Tapatalk
  • 0

Thanked by 2 Members:
Vola , whipsaw

#9 HechTrader

HechTrader

    Runners

  • Addict
  • PipPip
  • 34 posts
  • 128 thanks

Posted 17 January 2016 - 03:02 PM

Hier mal der Version1-Quelltext, ich komme nicht wirklich weiter.

 

 

 

#property version   "1.00"#property strict#property indicator_separate_window#property indicator_minimum 0#property indicator_maximum 10#property indicator_buffers 1#property indicator_plots   1//--- plot Anzahl#property indicator_label1  "Anzahl"#property indicator_type1   DRAW_LINE#property indicator_color1  clrGreen#property indicator_style1  STYLE_SOLID#property indicator_width1  1//--- indicator buffersdouble         Anzahl[];//+------------------------------------------------------------------+//| Custom indicator initialization function                         |//+------------------------------------------------------------------+int OnInit()  {//--- indicator buffers mapping   SetIndexBuffer(0,Anzahl);   //---   return(INIT_SUCCEEDED);  }//+------------------------------------------------------------------+//| Custom indicator iteration function                              |//+------------------------------------------------------------------+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[])  {//---   ArraySetAsSeries(Anzahl,true);   ArraySetAsSeries(open,true);   ArraySetAsSeries(close,true);      int bars = rates_total - 2;   if(prev_calculated > 0) bars = rates_total - prev_calculated;   Anzahl[bars+1]=0;      for(int i = bars; i >= 0; i--)   {//wenn Schlusskurs größer vorheriger Schlusskurs, dann Anzahl steigender Kerzen erhöhen      if (close[i] > close[i+1]) Anzahl[i] = (Anzahl[i+1]+1);//sonst Zähler zurücksetzen    if (close[i] <= close[i]) Anzahl[i] = 0;   }//--- return value of prev_calculated for next call   return(rates_total);   }   //+------------------------------------------------------------------+ 

Edited by whipsaw, 23 January 2016 - 07:56 PM.
Code Tag hinzugefügt

  • 0

Thanked by 4 Members:
Vola , whipsaw , WOGO , Rumpel

#10 WOGO

WOGO

    Floor Broker

  • Developer
  • 1,008 posts
  • 6800 thanks

Posted 17 January 2016 - 03:51 PM

Hier mal der Version1-Quelltext, ich komme nicht wirklich weiter.

 

...

   
//+------------------------------------------------------------------+
 

Da sind ein paar Fehler drin. cleanglasses.gif

 

Mach's mal so:

#property version   "1.00"#property strict#property indicator_separate_window#property indicator_minimum 0#property indicator_maximum 10#property indicator_buffers 1#property indicator_plots   1//--- plot Anzahl#property indicator_label1  "Anzahl"#property indicator_type1   DRAW_LINE#property indicator_color1  clrGreen#property indicator_style1  STYLE_SOLID#property indicator_width1  1//--- indicator buffersdouble         Anzahl[];//+------------------------------------------------------------------+//| Custom indicator initialization function                         |//+------------------------------------------------------------------+int OnInit()  {//--- indicator buffers mapping	IndicatorBuffers(1);  //<===  SetIndexBuffer(0,Anzahl);   //---   return(INIT_SUCCEEDED);  }//+------------------------------------------------------------------+//| Custom indicator iteration function                              |//+------------------------------------------------------------------+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[])  {//---   ArraySetAsSeries(Anzahl,true);   ArraySetAsSeries(open,true);   ArraySetAsSeries(close,true);      int bars = rates_total - 2;   if(prev_calculated > 0) bars = prev_calculated-1;    //<===   //Anzahl[bars+1]=0;                                 //<===      for(int i = bars; i >= 0; i--)   {//wenn Schlusskurs größer vorheriger Schlusskurs, dann Anzahl steigender Kerzen erhöhen      if (close[i] > close[i+1]) Anzahl[i] = (Anzahl[i+1]+1);//sonst Zähler zurücksetzen    if (close[i] <= close[i+1]) Anzahl[i] = 0;    //<===   }//--- return value of prev_calculated for next call   return(rates_total);   }   //+------------------------------------------------------------------+

  • 2
„Sicher ist, dass nichts sicher ist. Selbst das nicht.“
(Joachim Ringelnatz)

Thanked by 2 Members:
whipsaw , Vola

#11 HechTrader

HechTrader

    Runners

  • Addict
  • PipPip
  • 34 posts
  • 128 thanks

Posted 17 January 2016 - 04:08 PM

Danke. Aber wenn ich prüfe ob schon Bars berechnet wurden, dann kann ich doch nicht die bars mit der Anzahl-1 der schon berechneten Bars initialisieren. Das wäre doch falsch, wenn nur die neuen Bars berechnet werden sollen???


Gesendet von iPhone mit Tapatalk
  • 0

Thanked by 2 Members:
Vola , WOGO

#12 HechTrader

HechTrader

    Runners

  • Addict
  • PipPip
  • 34 posts
  • 128 thanks

Posted 17 January 2016 - 04:10 PM

Und leider wird der immer noch nicht berechnet, wenn ich den Indi auf nen Chart ziehe


Gesendet von iPhone mit Tapatalk
  • 0

Thanked by 2 Members:
Vola , WOGO

#13 WOGO

WOGO

    Floor Broker

  • Developer
  • 1,008 posts
  • 6800 thanks

Posted 17 January 2016 - 04:23 PM

Danke. Aber wenn ich prüfe ob schon Bars berechnet wurden, dann kann ich doch nicht die bars mit der Anzahl-1 der schon berechneten Bars initialisieren. Das wäre doch falsch, wenn nur die neuen Bars berechnet werden sollen???


Gesendet von iPhone mit Tapatalk

 

Ja, das ist natürlich Unsinn. Dann würde ja ständig alles nochmal berechnet.

Mach 's einfach so:

if(prev_calculated > 0) bars = rates_total-prev_calculated+1;

 

Und leider wird der immer noch nicht berechnet, wenn ich den Indi auf nen Chart ziehe


Gesendet von iPhone mit Tapatalk

Trotzdem sollte der Indikator was zeichnen.

Hast du ihn 1:1 übernommen?

 


 

Und leider wird der immer noch nicht berechnet, wenn ich den Indi auf nen Chart ziehe


Gesendet von iPhone mit Tapatalk


  • 0
„Sicher ist, dass nichts sicher ist. Selbst das nicht.“
(Joachim Ringelnatz)

Thanked by 2 Members:
whipsaw , Vola

#14 HechTrader

HechTrader

    Runners

  • Addict
  • PipPip
  • 34 posts
  • 128 thanks

Posted 17 January 2016 - 04:48 PM

Das nenne ich mal spooky;-) wenn ich mich auf ner Chart-Period >= Tag befinde wird der berechnet. Bei <= H4 wird er nicht gezeichnet


Gesendet von iPhone mit Tapatalk
  • 0

Thanked by 1 Member:
Vola

#15 HechTrader

HechTrader

    Runners

  • Addict
  • PipPip
  • 34 posts
  • 128 thanks

Posted 17 January 2016 - 04:49 PM

Bei <= H4 bleibt er leer... any ideas?


Gesendet von iPhone mit Tapatalk
  • 0

Thanked by 2 Members:
whipsaw , Vola

#16 WOGO

WOGO

    Floor Broker

  • Developer
  • 1,008 posts
  • 6800 thanks

Posted 17 January 2016 - 04:57 PM

... any ideas?

Hm, am Indikator kann das nicht liegen. Dem ist 's egal in welchen TF er gezogen wird.

Andere Indikatoren funktionieren?


  • 0
„Sicher ist, dass nichts sicher ist. Selbst das nicht.“
(Joachim Ringelnatz)

Thanked by 2 Members:
whipsaw , Vola

#17 HechTrader

HechTrader

    Runners

  • Addict
  • PipPip
  • 34 posts
  • 128 thanks

Posted 17 January 2016 - 05:08 PM

Ja, das ist zum Verrückt-werden. Hier mal ein Update, ich habe an Anlehnung an den funktionierenden ATR mal bei der Initialisierung ein wenig was hinzugefügt. Dann habe ich noch eine zweite Linie für fallende Kerzen gemalt und eine iATR Bedingung hinzugefügt:

 

 

 

#property version   "1.00"#property strict#property indicator_separate_window#property indicator_minimum 0#property indicator_maximum 20#property indicator_buffers 2#property indicator_plots   2//--- plot Anzahl steigend#property indicator_label1  "Anzahl steigend"#property indicator_type1   DRAW_LINE#property indicator_color1  clrGreen#property indicator_style1  STYLE_SOLID#property indicator_width1  1//--- plot Anzahl fallend#property indicator_label2  "Anzahl fallend"#property indicator_type2   DRAW_LINE#property indicator_color2  clrRed#property indicator_style2  STYLE_SOLID#property indicator_width2  1//sollen nur Kerzen > ATR beachtet werden?input bool     Inp_Respect_ATR = true; //Nur große Kerzen > ATR-Durschschnitt beachteninput int      Inp_ATR_Period = 14; //ATR-Periodinput double   Inp_ATR_Factor = 1.0; //ATR-Faktor//--- indicator buffersdouble         Anz_Up[];double         Anz_Down[];//+------------------------------------------------------------------+//| Custom indicator initialization function                         |//+------------------------------------------------------------------+int OnInit()  {//--- indicator buffers mapping   IndicatorBuffers(2);   IndicatorDigits(0);   //--- indicator line   SetIndexStyle(0,DRAW_LINE);   SetIndexStyle(1,DRAW_LINE);      SetIndexBuffer(0,Anz_Up);   SetIndexBuffer(1,Anz_Down);   //--- name for DataWindow and indicator subwindow label string short_name="No. rising / falling candles > "+DoubleToString(Inp_ATR_Factor,1)+" * ATR";   IndicatorShortName(short_name);   SetIndexLabel(0,"No. cons. rising");   SetIndexLabel(1,"No. cons. falling");   //--- check for input parameter   if((Inp_ATR_Period < 3) || (Inp_ATR_Factor < 0))     {      Print("Wrong input parameter: ATR-Period="+IntegerToString(Inp_ATR_Period)+", ATR-Faktor="+DoubleToString(Inp_ATR_Factor));      return(INIT_FAILED);     }//--- wenn ATR verwendet wird, dann Linie ab ATR-Period malen   if(Inp_Respect_ATR == true)    {    SetIndexDrawBegin(0,Inp_ATR_Period);    SetIndexDrawBegin(1,Inp_ATR_Period);    }//--- wenn ATR nicht verwendet wird, dann Linie ab Anfang malen   if(Inp_Respect_ATR == false)    {    SetIndexDrawBegin(0,0);    SetIndexDrawBegin(1,0);    }//---   return(INIT_SUCCEEDED);  }//+------------------------------------------------------------------+//| Custom indicator iteration function                              |//+------------------------------------------------------------------+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[])  {//---   ArraySetAsSeries(Anz_Up,true);   ArraySetAsSeries(Anz_Down,true);   ArraySetAsSeries(open,true);   ArraySetAsSeries(close,true);   ArraySetAsSeries(high,true);   ArraySetAsSeries(low,true);   ArraySetAsSeries(time,true);      int bars = rates_total - 2;   if(prev_calculated > 0) bars = rates_total - prev_calculated+1;//erste Kerze mit 0 initialisieren      Anz_Up[rates_total-1]=0;   Anz_Down[rates_total-1]=0;      for(int i = bars; i >= 0; i--)   {//wenn Schlusskurs größer als vorheriger Schlusskurs und Kerze > ATR-Faktor, dann Anzahl steigender Kerzen erhöhen und Anzahl fallender zurücksetzen    if ((close[i] > close[i+1]) && (iATR(NULL,0,1,0) > (Inp_ATR_Factor * iATR(NULL,0,Inp_ATR_Period,0))))     {     Anz_Up[i] = (Anz_Up[i+1]+1);     Anz_Down[i] = 0;     }//wenn Schlusskurs kleiner als vorheriger Schlusskurs und Kerze > ATR-Faktor, dann Anzahl fallender Kerzen erhöhen und Anzahl steigender zurücksetzen      if ((close[i] < close[i+1]) && (iATR(NULL,0,1,0) > (Inp_ATR_Factor * iATR(NULL,0,Inp_ATR_Period,0))))     {     Anz_Down[i] = (Anz_Down[i+1]+1);     Anz_Up[i] = 0;     }//wenn Schlusskurs = vorheriger Schlusskurs, dann Anzahl steigender und fallender Kerzen zurücksetzen    if (close[i] == close[i+1])     {     Anz_Down[i] = 0;     Anz_Up[i] = 0;     }   }//--- return value of prev_calculated for next call   return(rates_total);   }   //+------------------------------------------------------------------+ 

Edited by whipsaw, 23 January 2016 - 07:55 PM.
Code Tag hinzugefügt

  • 0

Thanked by 2 Members:
whipsaw , Vola

#18 HechTrader

HechTrader

    Runners

  • Addict
  • PipPip
  • 34 posts
  • 128 thanks

Posted 18 January 2016 - 09:22 AM

Auch, wenn Montag ist ;-))) : hat noch jemand eine Idee, wieso der nicht sauber angezeigt wird? Würde mich über jeden Hinweis freuen.

 

Danke und Gruß


  • 0

Thanked by 3 Members:
whipsaw , WOGO , Vola

#19 WOGO

WOGO

    Floor Broker

  • Developer
  • 1,008 posts
  • 6800 thanks

Posted 18 January 2016 - 11:44 AM

Idee nicht, ich kann dir aber sagen, wie ich das analysieren würde.

Stell deinen Chart so ein, dass er nur ein paar Bars anzeigt (z.B. 200) unter Extras - Optionen - Diagramme - Max. Kerzen im Chart.

Dann lass dir über "Print" an den entscheidenden Stellen ausgeben, was der Indikator macht. 

Die Limitierung der Kerzen ist dazu da, dass dir dein Report-Fenster nicht zu sehr zugemüllt wird.

 

Auf diese Weise solltest du relativ einfach rausfinden, woran es scheitert.


  • 1
„Sicher ist, dass nichts sicher ist. Selbst das nicht.“
(Joachim Ringelnatz)

Thanked by 3 Members:
whipsaw , Vola , Rumpel

#20 HechTrader

HechTrader

    Runners

  • Addict
  • PipPip
  • 34 posts
  • 128 thanks

Posted 23 January 2016 - 01:32 PM

Danke, am Ende hab ich es dann doch geschafft :)


Gesendet von iPhone mit Tapatalk
  • 0

Thanked by 2 Members:
Vola , whipsaw

Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.


0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users