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.

Indicator: Abstand zwischen 2 MA

Geschrieben

Hallo,

 

Ich habe mir folgenden Custom Indicator geschrieben.

Allerdings gibt mir der Indicator falsche Werte zurück, aber ich verstehe nicht wieso... :laugh:

 

Eigentlich sollte es ja nichts grosses sein, 2 MAs zu berechnen und davon die Differenz auszugeben...

Aber die berechneten MAs stimmen bei weitem nicht mit den angezeigten im Chart über ein.

 

Vielleicht hat jemand jajemand Lust über die paar Zeilen drüber zu schauen und mich zu erleuchten.

 

 

 

Vielen Dank,

askerix

 

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Navy
#property indicator_color2 Navy
#property indicator_color3 Red
//---- input parameters
extern int       MAfast=20;
extern int       MAslow=100;
extern string    MAfastMode="MODE_EMA";
extern string    MAslowMode="MODE_SMA";
extern string    slowMAPrice="PRICE_CLOSE";
extern string    fastMAPrice="PRICE_CLOSE";


//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
 {
//---- indicators
  SetIndexStyle(0,DRAW_LINE);
  SetIndexBuffer(0,ExtMapBuffer3);
  SetIndexStyle(1,DRAW_NONE);
  SetIndexBuffer(1,ExtMapBuffer2);
  SetIndexStyle(2,DRAW_NONE);
  SetIndexBuffer(2,ExtMapBuffer1);
  IndicatorShortName("DiffMA - " +MAfast+ "/" +MAslow  );
  SetIndexLabel(2, "MAfast");
  SetIndexLabel(1, "MAslow");
  SetIndexLabel(0, "MAdiff");

//----
  return(0);
 }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
 {
//----
  
//----
  return(0);
 }
//+------------------------------------------------------------------+

int start()
 {
  int    counted_bars=IndicatorCounted();
  int    i;
  double dMAfast, dMAslow;
//----
  i = Bars - counted_bars;
  
  while (i>0)
  {
        dMAfast = iMA(Symbol(),NULL, MAfast, 0, MAfastMode, fastMAPrice,i);
        dMAslow = iMA(Symbol(),NULL, MAslow, 0, MAslowMode, slowMAPrice,i);
        ExtMapBuffer1[i] = dMAfast;
        ExtMapBuffer2[i] = dMAslow;
        ExtMapBuffer3[i] = MathAbs(NormalizeDouble(  dMAfast - dMAslow,4));     
       i--;
  }
//----
  return(0);
 }

Bearbeitet von askerix

Featured Replies

Geschrieben
  • Autor

Hi Mythos,

 

nein keinerlei Fehler.

Ich habe mal einen Screenshot angehängt.

Die MAs sind gleich eingestellt 9EMA-Close und 40EMA-Close und trotzdem kommt es zu einer differenz von

3 Pips beim EMA40 - das kann kein Rundungsfehler mehr sein.

 

Askerix

 

edit noch ein 2. Screenshot mit extremeren Abweichungen

Capture.JPG

Capture2.JPG

Bearbeitet von askerix

Geschrieben
nein keinerlei Fehler.

unglaublich (musste es selber testen ums zu glauben), das is dann mMn ein böser Bug vom Editor!

Bei solchen problemen hilft oft ein Blick ins Journal bzw. Experten Log im Terminal dort wirst du in dem Fall folgende Zeilen lesen:

 

... invalid integer number as parameter 6 for iMA function

 

Das Problem ist folgendes: die iMA Funktion erwartet als 5. und 6. Parameter ein Zahl als Identifier welchen Modus und welchen Preis sie verwenden soll. In MQL sind diese Identifier als Konstante definiert wodurch du im Sourcecode zB MODE_EMA schreiben kannst. Denn dieses "MODE_EMA" ersetzt der Compiler vor dem compilieren durch die entsprechende Zahl.

Du hast jetzt aber Strings die du der Funktion übergibst, und mit der weiß sie verständlicherweise nix anzufangen.

 

Welchen MA die Funktion dann berechnet ist leider nicht definiert, ich vermute einen SMA auf Close-Basis. Wenn du slow und fast auf gleiche Werte setzt hast du dann trotzdem Differenzen oder ist die Diff dann 0?

Geschrieben
Die MAs sind gleich eingestellt 9EMA-Close und 40EMA-Close und trotzdem kommt es zu einer differenz von

Zeig bitte mal einen Screenshot von den Einstellungen. Im Standardquelltext nutzt Du nämlich einen SMA und einen EMA. Achte mal darauf, dass sowohl die Einstellungen im Indikator als auch die im Chart genutzten MAs gleich sind. Eventuell ist da ja noch irgendwo ein Unterschied.

 

Update

Okay, Mythos war mal wieder schneller, das mit dem String hatte ich nun noch gar nicht auf dem Plan - dennoch würde ich nochmal im Detail alles angucken :laugh:.

Geschrieben
  • Autor

Vielen Dank!!!

 

Das erklärt die falschen Werte, werde es anpassen.

Und gut dass ich den EA-Log Ordner jetzt auch kenne, musste gleich mal ein 1GB alte Logs löschen.

Geschrieben
Und gut dass ich den EA-Log Ordner jetzt auch kenne, musste gleich mal ein 1GB alte Logs löschen.

 

*G* ist immer praktisch, ich meinte aber eigentlich direkt den Log im MetaTrader (ok, es sind die gleichen Einträge aber im MT sieht mans schneller als extra den Ordner aufzumachen)

 

Okay, Mythos war mal wieder schneller

:laugh: :ot:

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.