Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Indikator - DailyRange

Geschrieben

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

Featured Replies

Geschrieben
  • Autor
Ich hab gemeint, das du einen eigenen Indikator iMyATR schreibst, und dessen Werte mit iATR vergleichst... aber kommt eigentlich aufs selbe.

 

Bzgl der Daten: Hast du schon mal die Daten selber verglichen? Also einfach die letzten x Tagesbars zwischen TS und MT verglichen?

 

Ok, von der Funktion zum Indikator ist es ja nicht mehr weit. Die Alerts haben ja bewiesen, dass die ATR-Werte dieselben sind.

Vergleich der Tagesbars ergibt folgendes für die letzten 10 Tage:

 

TS - 06.03.09 -   3713.5   3772.0   3621.0   3690.5
MT - 06.03.09 -   3706.0   3770.0   3620.5   3683.0

TS - 05.03.09 -   3833.0   3863.5   3656.0   3681.0
MT - 05.03.09 -   3831.0   3862.5   3655.5   3682.0

TS - 04.03.09 -   3730.0   3935.0   3725.0   3880.0
MT - 04.03.09 -   3727.0   3933.5   3725.5   3882.5

TS - 03.03.09 -   3734.0   3759.0   3669.0   3697.5
MT - 03.03.09 -   3731.5   3757.5   3668.5   3700.5 

TS - 02.03.09 -   3773.5   3786.5   3666.0   3674.0 
MT - 02.03.09 -   3771.5   3785.5   3665.5   3678.0

TS - 27.02.09 -   3873.5   3904.5   3761.5   3825.0
MT - 27.02.09 -   3873.0   3903.0   3761.0   3825.5

TS - 26.02.09 -   3870.5   3992.5   3851.0   3870.0
MT - 26.02.09 -   3868.5   3990.5   3850.0   3873.0

TS - 25.02.09 -   3929.0   3980.0   3790.5   3857.0
MT - 25.02.09 -   3929.0   3978.0   3790.0   3864.5

TS - 24.02.09 -   3903.0   3990.0   3817.5   3958.0
MT - 24.02.09 -   3904.0   3987.5   3817.5   3963.5

TS - 23.02.09 -   4054.0   4116.5   3857.0   3860.0
MT - 23.02.09 -   4059.0   4114.0   3856.0   3862.5

Die Dax-Ranges sind weiter entfernt, so dass es mit dem FDAX schon hinkommt, aber eben nicht genau ... wieso ?

Geschrieben
Die Dax-Ranges sind weiter entfernt, so dass es mit dem FDAX schon hinkommt, aber eben nicht genau ... wieso ?

 

Interessant, also bietet ActivTrades einen CFD auf den FDAX? ;) Zu den Werten würds passen. CFD ist ja nur an das Underlying angelehnt, aber muss nicht exakt gleich sein. Damit hast auf alle Fälle den Grund für die unterschiedlichen Verhalten.

Geschrieben
  • Autor
Interessant, also bietet ActivTrades einen CFD auf den FDAX? ;) Zu den Werten würds passen. CFD ist ja nur an das Underlying angelehnt, aber muss nicht exakt gleich sein. Damit hast auf alle Fälle den Grund für die unterschiedlichen Verhalten.

 

Klar ein CFD auf den FDAX .... das isses ....

Geschrieben

Einige Stichworte dazu...

 

Der Hexensabbat findet stets am 3. Freitag des 3. Monats eines Quartals statt.

 

2009: 20.3., 19.6., 18.9., 18.12.

 

Aktuell haben wir heute den 10.03.2009 >>> nur noch 10 Tage bis Hexensabbat

 

ic.arrow.right.png DeiFin.de :pfue:

 

Über den Zusammenhang zwischen Spotmarktpreis (bzw. Kassakurs) und Futures-Preis

Geschrieben
Interessant, also bietet ActivTrades einen CFD auf den FDAX? ;) Zu den Werten würds passen.

 

Bei Activtrades gibt es mehrere Futurekontrakte, die als CFD verfügbar sind.

Bei ODL kann man zwischen Cash und Future wählen, falls jemand noch die Kasse benötigt, um den Code damit durchzuspielen.

Geschrieben
  • Autor
Bei Activtrades gibt es mehrere Futurekontrakte, die als CFD verfügbar sind.

Bei ODL kann man zwischen Cash und Future wählen, falls jemand noch die Kasse benötigt, um den Code damit durchzuspielen.

 

Ich habe bei mir nur den aktuellen in der Demo-Version. Wie komme ich auf andere?

Kann ich generell auch ältere abgelaufene einladen und mir evtl. sogar einen Endlos-Kontrakt

schnüren?

 

Leider ist der Datenexport und Import zwischen TS und MT nicht ganz so einfach, besonders,

wenn man dann mit EAs backtesten möchte ...

Geschrieben
Ich habe bei mir nur den aktuellen in der Demo-Version. Wie komme ich auf andere?

 

Wenn du den FDAX suchst, dann kannst immer nur auf den aktuellen zugreifen. Am Verfallstermin wird ein neuer Kontrakt aufgesetzt. Bei IG ist das anders. Da kannst du heute bereits den Juni- oder den Septemberkontrakt handeln.

 

Habe ich dich mit "mehrere Futurekontrakte" etwa verwirrt? Ich hatte mich auf den Dow-Future bzw. Brent-Future bezogen. Sorry wenn das etwas missverständlich rüberkam.

Geschrieben
  • Autor
Habe ich dich mit "mehrere Futurekontrakte" etwa verwirrt? Ich hatte mich auf den Dow-Future bzw. Brent-Future bezogen. Sorry wenn das etwas missverständlich rüberkam.

 

Macht ja nix, dachte nur es gäbe eine einfache Möglichkeit, die sich mir bis dato noch nicht offenbart hat.

Ich lerne ja noch mit MT umzugehen ...

Geschrieben

Soda, hatte endlich zeit mir den Code anzusehen.

 

Mir is eigentlich nur was kleines aufgefallen:

 

		 // TextObjekte der Rangebreite im Chart anzeigen
	 string rangeValue = "Range " +DoubleToStr(dailyRange,2);
	 string objectName = "Range" +MathRand();
	 ObjectCreate (objectName, OBJ_TEXT, 0, Time[i-5], upperRangeBuffer[i]+Ask*0.01);
	 ObjectSetText (objectName, rangeValue, 8, "Tahoma", Black);

(abgesehen davon,das ich zuerst nix gesehen hab, weil schwarz auf schwarz blöd ist ;)

Die Idee mit MathRand() ist zwar gut für unterschiedliche Objekte, im Liveeinsatz, wird aber der Bar an dem dieses Objekt erzeugt wird, öfters verarbeitet (bei jedem Tick an dem Bar wieder).

Aber ok, kommt der TExt halt 1000 mal ;) (ein Range + Time wär hier genauso eindeutig und erzeugt nur 1 Objekt ;)

Schwieriger wirds bei dem "wo" du zeichnest. Time[i-5] ist zwar in der History ok, aber beim aktuellen Bar, zeichnest du damit am "-5" Bar, der aber Time = 0 hat, damit wird alles am 1.1.1970 gezeichnet ;)

 

Sonst sollt er im live-betrieb und im Backtest die gleichen ergebnisse liefern oder? (also im tester tut ers...)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.