anbei mein erster Indikator. Nun ja, er hat mal funktioniert. Dann habe ich die neue Daily-Berechnungen eingebaut und nun...
Sicher ein einfacher Code. Er berechnet Intraday die Tageshöchst- Tagestiefstspanne des letzten Tages. Diese Werte
werden vom aktuell laufenden Hoch, und Tief abgezogen, bzw, draufgerechnet. So entsteht ein Tradingchannel. Leider ist der Channel
bei mir statisch, das heißt er wird nicht mehr am neuen Tag angepasst. Ich dachte bereits mien MT spinnt und habe alle Cache-Files...
gelöscht, aber das Ergebniss ist dasselbe. Gestern hat es noch wunderbar funktioniert und der Kanal wurde jeden Bar (und auch Tag) angepasst.
Könntet ihr bitte mal drüber sehen? Bei der Gelegenheit bin ich auch gerne offen für alle Fehler, Codestücke wo Vorsicht geboten ist oder weitere Best-PRactices. Wie schon erwähnt, bin ich mit MT noch am Anfang meiner Bemühungen.
Hallo zusammen,
anbei mein erster Indikator. Nun ja, er hat mal funktioniert. Dann habe ich die neue Daily-Berechnungen eingebaut und nun...
Sicher ein einfacher Code. Er berechnet Intraday die Tageshöchst- Tagestiefstspanne des letzten Tages. Diese Werte
werden vom aktuell laufenden Hoch, und Tief abgezogen, bzw, draufgerechnet. So entsteht ein Tradingchannel. Leider ist der Channel
bei mir statisch, das heißt er wird nicht mehr am neuen Tag angepasst. Ich dachte bereits mien MT spinnt und habe alle Cache-Files...
gelöscht, aber das Ergebniss ist dasselbe. Gestern hat es noch wunderbar funktioniert und der Kanal wurde jeden Bar (und auch Tag) angepasst.
Könntet ihr bitte mal drüber sehen? Bei der Gelegenheit bin ich auch gerne offen für alle Fehler, Codestücke wo Vorsicht geboten ist oder weitere Best-PRactices. Wie schon erwähnt, bin ich mit MT noch am Anfang meiner Bemühungen.
//+------------------------------------------------------------------+ //| DT_IN_DailyRange.mq4 | //| Copyright © 2009, DarthTrader. | //| [url="http://dt-trading.blogspot.com"]http://dt-trading.blogspot.com[/url] | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, DarthTrader" #property link "http://dt-trading.blogspot.com" #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Green #property indicator_style1 2 #property show_inputs // Inputs // Buffers double upperRangeBuffer[]; double lowerRangeBuffer[]; // Globale Strategie-Variablen double upperRange; double lowerRange; double dailyRange; double dailyHigh; double dailyLow; double lokalesHoch = 0; double lokalesTief = 10000; double eroeffnungskurs; // ----- // Initialization // ----- int init() { // Anzahl der verwendeten Indikatoren IndicatorBuffers (2); // Line-Style und Zuweisung der Buffer SetIndexStyle (0, DRAW_LINE, STYLE_DASH); SetIndexStyle (1, DRAW_LINE, STYLE_DASH); SetIndexBuffer (0, upperRangeBuffer); SetIndexBuffer (1, lowerRangeBuffer); // Name des Indikators IndicatorShortName ("DailyRange"); SetIndexLabel (0, "UpperRange"); SetIndexLabel (1, "LowerRange"); // Ab welchem Bar sollen die Linien des Indikators gezeichnet werden //SetIndexDrawBegin (0, 50); //SetIndexDrawBegin (1, 50); // Kommentare erscheinen oben links //double free=AccountFreeMargin(); //Comment ("Account free margin is ",DoubleToStr(free,2),"\n","Current time is ",TimeToStr(TimeCurrent())); //Print ("Ausgabe in Expert-Log. Freie Margin:", DoubleToStr(free,2) ); //Alert ("Ausgabe als Alarm-Popup. Freie Margin:", DoubleToStr(free,2) ); return (0); } // ----- // DeInitialization // ----- int deinit() { clear(); } // ----- // Alle Objekte wieder löschen // ----- void clear() { string name; int obj_total = ObjectsTotal(); for (int i = obj_total-1; i>=0; i--) { ObjectDelete (ObjectName(i)); } } // ----- // DailyRange // ----- int start() { // Anzahl der schon durchlaufenen Bars, beim ersten Mal 0 int countedBars = IndicatorCounted(); //Print ("CountedBars ", countedBars, " Bars ", Bars); // weniger als 0 Bars gezählt => ERROR if (countedBars < 0) return (-1); // damit letzte Bar auf jeden Fall immer neu berechnet wird if (countedBars > 0) countedBars--; int i = Bars - countedBars; // Hauptschleife. // i wird am letzten Bar immer nur den Wert 0 haben. // Komischerweise ist der Wert allerdings immer 2,1,0 ... while (i>=0) { computeDailyRange (i); upperRangeBuffer[i] = upperRange; lowerRangeBuffer[i] = lowerRange; i--; } return (0); } // ----- // Berechnungen // ----- int computeDailyRange (int i) { static datetime lastDay = -1; datetime currentDay = TimeCurrent(); // Jeden Bar die bisherigen aktuellen lokalen Extrema finden if (High[0] > lokalesHoch) lokalesHoch = High[0]; if (Low[0] < lokalesTief) lokalesTief = Low[0]; // Jeden Tag die Daily Range neu berechnen if (lastDay != currentDay) { Alert (TimeDay(currentDay),".",TimeMonth(currentDay),". ", "Neuer Tag"); dailyHigh = iHigh (Symbol(), PERIOD_D1, 1); dailyLow = iLow (Symbol(), PERIOD_D1, 1); eroeffnungskurs = iOpen (Symbol(), PERIOD_D1, 1); dailyRange = dailyHigh - dailyLow; // Re-Initialisierung lokalesHoch = 0; lokalesTief = iLow (Symbol(), PERIOD_D1, 1) + 1000; lastDay = currentDay; return; } // Jeden Bar die Rangewerte eintragen upperRange = lokalesTief + dailyRange; lowerRange = lokalesHoch - dailyRange; }DT_IN_DailyRange.mq4
Besten Dank
DT