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.

Arvidsson

Addict
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Arvidsson

  1. Wieder mal vielen Dank für die ausführlichen Antworten Werde mir das ganze in den nächsten Tagen nochmal genau anschauen :-)
  2. So nochmal ich Die noch offenen Fragen sind nicht so wichtig - ist ja nur noch ne Kleinigkeit ABER: Wo anders komme ich nicht weiter. Code_alt: for(int i=0; i<limit; i++) { MaxH = High[Highest(NULL,0,MODE_HIGH,period,i)]; MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)]; price = (High[i]+Low[i])/2; Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;Sehe ich das richtig: - Er sammelt die Höchststände (MODE_HIGH) - Davon sammelt er die Hochpunkte (Highest) - Und davon werden nochmal die Hochpunkte gesammelt (High) [Erklärung zu High: Series array that contains the highest prices of each bar of the current chart.] Bisher hatte ich immer nur Highest und weiß daher nicht wie ich mit dem High umgehen muss. Mein Vorschlag: for(int i=0; i<limit; i++) { AroonBuffer[i] = iCustom(NULL, 0, "Aroon Oscillator_finish",AroonPeriod,Filter,CountBars, 0, i); MaxH = High[ArrayMaximum(AroonBuffer,period,i)]; MinL = Low[ArrayMinimum(AroonBuffer,period,i)]; price = (High[i]+Low[i])/2; Aber das funktioniert leider nicht :-( Muss ich das High ersetzen damit es mit Arrays arbeiten kann? Habe leider durch google`n nichts gefunden und bin einmal mehr auf euch angewiesen. Danke schon einmal im Voraus!
  3. Aktuell habe ich noch zwei komisches Probleme. 1) Der Fischer wird erst ab dem Startzeitpunkt berechnet - für die abgelaufenen Bars wird nichts gezeichnet. Ist das normal? Der AroonOsc & die MA werden ja auch sofort für die Vergangenheitswerte berechnet. 2) Wenn ich die Indikatoren im Chart aktiviere kommt beim Fischer in M5 erstmal nur eine gerade Linie, obwohl bei M15 etc. schön etwas gezeichnet wird. Siehe: http://charts.mql5.com/2/470/eurusdt-m5-varengold-wertpapierhandelsbank-ag-2.png Beende ich den Veragolt MT, öffne ihn sofort wieder, kommt auch in M5 der Indikator. Siehe: http://charts.mql5.com/2/470/eurusdt-m5-varengold-wertpapierhandelsbank-ag-3.png Wie kann so etwas komisches passieren?
  4. Jetzt werde ich leider zum Spamer, aber Editieren ging nicht mehr :D Alt: for(i = 0; i < limit; i++) { MABuffer[i] = iCustom(NULL, 0, "ThrdGenMA",89,21,3,5, 0, i); HighBarBuffer[i] = MABuffer[ArrayMaximum(MABuffer,ArPer,i)]; //Periods from HH LowBarBuffer[i] = MABuffer[ArrayMinimum(MABuffer,ArPer,i)]; //Periods from LL ArOscBuffer[i] = 100*(LowBarBuffer[i] - HighBarBuffer[i]) / ArPer; //Short formulation } Neu: for(i = 0; i < limit; i++) { MABuffer[i] = iCustom(NULL, 0, "ThrdGenMA",89,21,3,5, 0, i); HighBarBuffer[i] = ArrayMaximum(MABuffer,ArPer,i); //Periods from HH LowBarBuffer[i] = ArrayMinimum(MABuffer,ArPer,i); //Periods from LL ArOscBuffer[i] = 100*(LowBarBuffer[i] - HighBarBuffer[i]) / ArPer; //Short formulation }Habe also des MABuffer vor dem ArrayMax/Min entfernt. Jetzt wird der AroonOscillator gezeichnet - hoffe es stimmt :)
  5. Was ich vergessen habe: Im MT wird beim Indikator (AroonOscillator) links oben angezeigt: AroonOsc_v1 (10,50) 0 0 -0 -0 In der Ausgangslage war es: AroonOsc_v1 (10,50) 60 0 0 60 Komisch ...
  6. Ok es funktioniert leider nichts Beim AroonOscillator kommen für einige Sekunden lauter rote vertikale Linien - danach ist alles Weg. Der Fischer arbeitet daher auch nicht. Jemand eine Idee woran es liegen könnte?
  7. Langsam wird es ja mit mir ;-) Bin schon gespannt ob die beiden Skripte morgen funktionieren. Tausend Dank an alle Helfer...besonderen Dank natürlich an Mythos :-)
  8. Eine gute Nachricht Dann befülle ich den Array mit i--, da im restlichen Skript auch damit gearbeitet wird. or(int i = limit; i >= 0; i--) { AroonBuffer[i] = iCustom(NULL, 0, "Aroon Oscillator_v1",10,50,300, 0, i); } Die Berechnung bleibt auch so for (i = limit; i >= 0; i--) wma0[i] = iMAOnArray(AroonBuffer, 0, 2, 0, MODE_LWMA, i); Damit dürfte ich nun (theoretisch) fertig sein Ich teste das ganze morgen mal und berichte ob es funktioniert Eine Frage zur Verfeinerung hätte ich noch: Ich gebe beim iCustom und iMAonArray immer die Variablen an mit denen der Ausgangswert berechnet wurde. Wenn ich diese ändern wollen würde, müsste ich jedes mal den Code ändern und neu im MT starten. Hier mal eine Übersicht zur Verdeutlichung: 3rdGenMA: Variablen zur Berechnung: 89, 21, 3, 5 -> Ist über "extern" definiert, damit könnte ich es jederzeit im MT ändern Aroon Oscillator: Variablen zur Berechnung: 10, 50, 300 -> Ist über "extern" definiert, damit könnte ich es jederzeit im MT ändern Und er greift über ... MABuffer[i] = iCustom(NULL, 0, "3rdGenMA",89,21,3,5, 0, i); ... auf die Variablen des 3rdGenMA zu. Änder ich die Variablen des 3rdGenMA im MT, wird der 3rdGenMA zwar anders berechnet, aber der Aroon Oscillator greift immernoch auf Daten mit den falschen Variablen zu. Der Code wird sich ja nicht automatisch mitändern? Fischer: Variablen zur Berechnung: 4, 4 Beim Fischer des gleiche. Die 4, 4 könnte ich im MT (wegen extern) jederzeit ändern, aber er greift natürlich auf die Daten aus dem Oscillator über ... AroonBuffer[i] = iCustom(NULL, 0, "Aroon Oscillator_v1",10,50,300, 0, i); ... mit fixen Variablenwerten zu. Müsste ich da einfach noch ein paar "extern Variablen" definieren die ich dann anstatt den "fixen Werten" einfüge - oder gibt es eine viel einfachere Lösung? Ich hoffe man kann meiner Schilderung folgen
  9. Sehe ich das so richtig? Ein kleines Beispiel: 1) Ich will die Kurse auf Stundenbasis in ein Array bekommen. Mein Limit ist 4. Kurse: 19.00 Uhr: 1.9000 (aktuellster) 18.00 Uhr: 1.8000 17.00 Uhr: 1.7000 16.00 Uhr: 1.6000 (ältester) Adressierung der Bars: 0 -> 1.9000 1 -> 1.8000 2 -> 1.7000 3 -> 1.6000 Genau so möchte ich es ja im Array auch stehen haben, damit die Logik des Charts eingehalten wird. Array: for(int=0; i<=limit; i++) Array Pos. 0 = Bar 0 = 1.9000 Array Pos. 1 = Bar 1 = 1.8000 Array Pos. 2 = Bar 2 = 1.7000 Array Pos. 3 = Bar 3 = 1.6000 -> Damit müsste eigentlich alles stimmen. Das Array wäre (mMn) mit (1.9000, 1.8000, 1.7000, 1.6000) befüllt. 2) Was passiert als nächstes? Es gibt einen neuen Kurs für 20.00 Uhr Kurse: 20.00 Uhr: 2.0000 (aktuellster) 19.00 Uhr: 1.9000 18.00 Uhr: 1.8000 17.00 Uhr: 1.7000 16.00 Uhr: 1.6000 (ältester) Adressierung der Bars: 0 -> 2.0000 1 -> 1.9000 2 -> 1.8000 3 -> 1.7000 4 -> 1.6000 Array: Da das Array unter int start() gefüllt wird, wird es (mMn) komplett von vorne wieder befüllt for(int=0; i<=limit; i++) Array Pos. 0 = Bar 0 = 2.0000 Array Pos. 1 = Bar 1 = 1.9000 Array Pos. 2 = Bar 2 = 1.8000 Array Pos. 3 = Bar 3 = 1.7000 Stop, da das Limit 4 ist 3) Wo ist nun wieder mein Fehler, oder für was brauche ich das ... bool ArraySetAsSeries( double&array[], bool set) ...? 4) Wenn ich mit Beispielcodes (die nicht auf Kurse etc zugreifen) etwas testen will, wie geht das mit dem MetaEditor? Geht das irgendwie sehr einfach ohne dass man es im MetaTrader starten muss? Ich habe einen C-Editor, dort kann man den Code compilen und (in einem DOS Fenster) testen. Vielen vielen Dank Leute!
  10. Danke für die ausführliche Erklärung! Genau die Zusammenhänge haben mir gefehlt. Ist echt eine super Community hier!
  11. Guten Morgen an alle, ich komme nicht weiter ... aber der Reihe nach. 1) -> Eine genaue Erklärung zu den Bars konnte ich nicht finden, nur dass der aktuelle Bar wohl mit i=0 adressiert ist, und der erste (älterste) mit -1. http://docs.mql4.com/predefined/variables/close Ich dachte eigentlich es läuft von 0=aktuell bis 5(z.B.) älterster 2) Ich tüftel nun schon seit fast 2 Stunden herum, aber ich weiß nicht auf was du hinaus willst. Wird mein AroonBuffer nicht absteigend befüllt wie ich oben beschrieben habe? Bin grad etwas am verzweifeln 3) Ok. Im 3rdGenMA Script wird der MA auch absteigend (mit i--) berechnet. Klingt auch logisch^^
  12. Gestärkt durch ein Abendessen müsste ich das schaffen Also wenn ich habe: for(int i = limit; i >= 0; i--) { AroonBuffer[i] = iCustom(NULL, 0, "Aroon Oscillator_v1",10,50,300, 0, i); } Es startet bei Limit (int limit = Bars - 1 - counted_bars) - sagen wir es ist 5, und endet bei 0. Im AroonBuffer steht damit: i=5 -> Da bei iCustom das i auch berücksichtigt wird läd er den (ich denke mal) 5. letzten Wert aus dem Aroon Oscillator i=4 -> 4. letzter Wert aus dem Aroon Oscillator i=3 -> 3. letzter Wert aus dem Aroon Oscillator i=2 -> 2. letzter Wert aus dem Aroon Oscillator i=1 -> Letzter Wert aus dem Aroon Oscillator i=0 -> Aktueller Wert aus dem Aroon Oscillator Bei: for(int i = 0; i < limit; i++) Es startet bei 0 und endet bei limit (int limit = Bars - 1 - counted_bars) - sagen wir es ist 5. Im AroonBuffer steht damit: i=0 -> Da bei iCustom das i auch berücksichtigt wird läd er den aktuellen Wert aus dem Aroon Oscillator i=1 -> Letzten Wert aus dem Aroon Oscillator i=2 -> 2. letzter Wert aus dem Aroon Oscillator i=3 -> 3. letzter Wert aus dem Aroon Oscillator i=4 -> 4. letzter Wert aus dem Aroon Oscillator i=5 -> 5. letzter Wert aus dem Aroon Oscillator Demnach wäre es total egal wie man es macht Jetzt schau ich mir den iMAOnArray an. for (i = limit; i >= 0; i--) wma0[i] = iMAOnArray(AroonBuffer, 0, 2, 0, MODE_LWMA, i); Es startet bei i=5, da die Zeiteinheit auf 2 eingestellt ist - wird glaube ich noch nichts berechnet Bei i=4 müsste dann der LWMA aus i=5 und i=4 errechnet werden (i=4 mehr gewichtet). Bei i=3 müsste dann der LWMA aus i=4 und i=3 errechnet werden (i=3 mehr gewichtet). Bei i=2 müsste dann der LWMA aus i=3 und i=2 errechnet werden (i=2 mehr gewichtet). Bei i=1 müsste dann der LWMA aus i=2 und i=1 errechnet werden (i=1 mehr gewichtet). Bei i=0 müsste dann der LWMA aus i=1 und i=0 errechnet werden (i=0 mehr gewichtet). Er berechnet damit die "alten" LWMA zuerst - aber das sollte eigentlich kein Problem sein? Nachdem ich mir vorher doch recht sicher war, habe ich nun gar keine Ahnung ob ich auch nur annähern richtig liege. Gut das du nochmal genau nachgefragt hast Mythos!
  13. Sorry, habe ich mir schon letztes mal gedacht als du es überarbeitet hast. Habe nur keinen Button dazu gefunden, aber anscheinend reicht der detail-code. Beachte ich ab jetzt Wie die for-Schleife funktioniert weiß ich glaube ich. for(int i = 0; i < limit; i++) -> Es startet bei i=0, und es läuft solange bis i das "limit" erreicht (eine Variable die vorher wohl definiert wird). Und der Counter zählt jeweils um eins vorwärts. Was mich nur überrascht hat, ist dass die Schleife beim Fischer-Code rückwärts läuft. for (i = limit; i >= 0; i--) -> Es startet bei limit und läuft bis 0 mit jeweils einem Schritt rückwärts. Er wendet also den iMAOnArray rückwärts an? Wenn das so gewollt ist, dann muss man die Daten aus dem AroonOscillator aber doch vorwärts in den Buffer füllen. Sonst habe ich rückwärts-gefüllte-Daten die rückwärts ausgelesen werden -> also eigentlich wieder vorwärts Ich hoffe man versteht was ich meine
  14. //+------------------------------------------------------------------+ //| Smoothed RSI Inverse Fisher Transform.mq4 | //| © 2011 MaryJane@ForexFactory | //| Indicator formula © 2010 Sylvain Vervoort, http://stocata.org/ | //+------------------------------------------------------------------+ #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Blue #property indicator_width1 3 #property indicator_level1 12 #property indicator_level2 88 #property indicator_levelcolor DarkGray //--- input parameters extern int RsiPeriod=4; extern int EmaPeriod=4; //--- buffers double wma0[], wma1[], wma2[], wma3[], wma4[], wma5[], wma6[], wma7[], wma8[], wma9[]; double ema0[], ema1[], rainbow[], rsi[], srsi[], fish[]; double AroonBuffer[]; int OldTime, OldBars; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(7); SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(0, fish); SetIndexBuffer(1, rainbow); SetIndexBuffer(2, rsi); SetIndexBuffer(3, ema0); SetIndexBuffer(4, ema1); SetIndexBuffer(5, srsi); SetIndexBuffer(6, AroonBuffer); //---- reset counters OldTime = 0; OldBars = 0; //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars = IndicatorCounted(); if (counted_bars < 0) return (-1); if (counted_bars > 0) counted_bars--; int limit = Bars - 1 - counted_bars; //---- resize/shift extra buffers on first and every next bar if (Time[0] != OldTime) SyncExtraBuffers(); //---- prepare AroonBuffer for(int i = limit; i >= 0; i--) { AroonBuffer[i] = iCustom(NULL, 0, "Aroon Oscillator_v1",10,50,300, 0, i); } //---- prepare partial averages for (i = limit; i >= 0; i--) wma0[i] = iMAOnArray(AroonBuffer, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma1[i] = iMAOnArray(wma0, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma2[i] = iMAOnArray(wma1, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma3[i] = iMAOnArray(wma2, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma4[i] = iMAOnArray(wma3, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma5[i] = iMAOnArray(wma4, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma6[i] = iMAOnArray(wma5, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma7[i] = iMAOnArray(wma6, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma8[i] = iMAOnArray(wma7, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma9[i] = iMAOnArray(wma8, 0, 2, 0, MODE_LWMA, i); //---- weigh the averages for (i = limit; i >= 0; i--) { double rb_val = 5 * wma0[i] + 4 * wma1[i] + 3 * wma2[i] + 2 * wma3[i] + wma4[i] + wma5[i] + wma6[i] + wma7[i] + wma8[i] + wma9[i]; rb_val /= 20; rainbow[i] = rb_val; } //---- calculate rsi from rainbow smoothed price curve for (i = limit; i >= 0; i--) rsi[i] = 0.1 * (iRSIOnArray(rainbow, 0, RsiPeriod, i) - 50); //---- smooth the rsi with Vervoort zero lag MA for (i = limit; i >= 0; i--) ema0[i] = iMAOnArray(rsi, 0, EmaPeriod, 0, MODE_EMA, i); for (i = limit; i >= 0; i--) ema1[i] = iMAOnArray(ema0, 0, EmaPeriod, 0, MODE_EMA, i); for (i = limit; i >= 0; i--) srsi[i] = ema0[i] + (ema0[i] - ema1[i]); //---- do the fish for (i = limit; i >= 0; i--) fish[i] = ((MathExp(2 * srsi[i]) - 1) / (MathExp(2 * srsi[i]) + 1) + 1) * 50; //---- return(0); } //+------------------------------------------------------------------+ //| Shift array elements without having to do it one-by-one | //+------------------------------------------------------------------+ void SyncExtraBuffers() { if (OldBars == Bars) //---- if Bars = MaxBarsOnChart, arrays wouldn't resize & shift below //---- we have to shrink them a bit, one bar does. { ArrayResize(wma0, Bars - 1); ArrayResize(wma1, Bars - 1); ArrayResize(wma2, Bars - 1); ArrayResize(wma3, Bars - 1); ArrayResize(wma4, Bars - 1); ArrayResize(wma5, Bars - 1); ArrayResize(wma6, Bars - 1); ArrayResize(wma7, Bars - 1); ArrayResize(wma8, Bars - 1); ArrayResize(wma9, Bars - 1); } //---- on first Start(), when Time[0] != 0, this will give an init size to arrays and //---- set them as Series (because of iMAOnArray and iRSIOnArray). Hence nothing //---- in init() as this place will be visited first in any case. //---- The flip trick below is necessary on further resizing/shifting since ArrayResize() //---- adds/removes elements on the LEFT SIDE if set as Series so arrays wouldn't shift //---- and it would be necessary to do a for (n=Bars-1; n>=0; n--){wmaX[n+1]=wmaX[n];} //---- ten times on every new bar. this is much quicker. ArraySetAsSeries(wma0, false); ArrayResize(wma0, Bars); ArraySetAsSeries(wma0, true); ArraySetAsSeries(wma1, false); ArrayResize(wma1, Bars); ArraySetAsSeries(wma1, true); ArraySetAsSeries(wma2, false); ArrayResize(wma2, Bars); ArraySetAsSeries(wma2, true); ArraySetAsSeries(wma3, false); ArrayResize(wma3, Bars); ArraySetAsSeries(wma3, true); ArraySetAsSeries(wma4, false); ArrayResize(wma4, Bars); ArraySetAsSeries(wma4, true); ArraySetAsSeries(wma5, false); ArrayResize(wma5, Bars); ArraySetAsSeries(wma5, true); ArraySetAsSeries(wma6, false); ArrayResize(wma6, Bars); ArraySetAsSeries(wma6, true); ArraySetAsSeries(wma7, false); ArrayResize(wma7, Bars); ArraySetAsSeries(wma7, true); ArraySetAsSeries(wma6, false); ArrayResize(wma6, Bars); ArraySetAsSeries(wma6, true); ArraySetAsSeries(wma8, false); ArrayResize(wma8, Bars); ArraySetAsSeries(wma8, true); ArraySetAsSeries(wma9, false); ArrayResize(wma9, Bars); ArraySetAsSeries(wma9, true); //---- reset counters OldTime = Time[0]; OldBars = Bars; } //+------------------------------------------------------------------+ Das muss stimmen Noch eine Frage zum laden der Daten des AroonBuffer. Im "AroonOscillator" Code habe ich die Daten mit for(int i = 0; i < limit; i++) geladen. In dem "Fischer" Coder werden alle anderen Buffer mit for (i = limit; i >= 0; i--) geladen. Ist es richtig wenn ich das zweite nehme - was sonst auch in der Datei verwendet wird?
  15. Kommt leider sehr spät Habe ihn letztens auch mal gesehen - fand ihn leider nicht sooo gut. Ist keine Erfolgsstory.
  16. Nachdem ich ihn extra definiert habe ... double wma0[], wma1[], wma2[], wma3[], wma4[], wma5[], wma6[], wma7[], wma8[], wma9[]; double ema0[], ema1[], rainbow[], rsi[], srsi[], fish[]; double AroonBuffer[]; ... gibt der Compiler keine Fehlermeldungen. Aber jetzt fällt mir was auf ... ich arbeite später gar nicht mit dem AroonBuffer Also entweder brauche ich gar keinen extra Buffer, oder ich muss die Werte erst in den AroonBuffer laden. Ala: int start() { int counted_bars = IndicatorCounted(); if (counted_bars < 0) return (-1); if (counted_bars > 0) counted_bars--; int limit = Bars - 1 - counted_bars; //---- resize/shift extra buffers on first and every next bar if (Time[0] != OldTime) SyncExtraBuffers(); //---- prepare AroonBuffer for(int i = 0; i < limit; i++) { AroonBuffer[i] = iCustom(NULL, 0, "Aroon Oscillator_v1",10,50,300, 0, i); } //---- prepare partial averages for (i = limit; i >= 0; i--) wma0[i] = iMA(NULL, 0, 2, 0, MODE_LWMA, AroonBuffer, i); for (i = limit; i >= 0; i--) wma1[i] = iMAOnArray(wma0, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma2[i] = iMAOnArray(wma1, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma3[i] = iMAOnArray(wma2, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma4[i] = iMAOnArray(wma3, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma5[i] = iMAOnArray(wma4, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma6[i] = iMAOnArray(wma5, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma7[i] = iMAOnArray(wma6, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma8[i] = iMAOnArray(wma7, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma9[i] = iMAOnArray(wma8, 0, 2, 0, MODE_LWMA, i); Dann gibt es auch keine Fehlermeldung com Compiler. Ist wenigstens eins richtig?
  17. Habe nur den Compiler drüberlaufen lassen - der hat jedenfalls keinen Fehler gemeldet. Testen kann ich es leider erst am Montag, da ich bis dahin unterwegs bin. Dann mal zum Fischer //+------------------------------------------------------------------+ //| Smoothed RSI Inverse Fisher Transform.mq4 | //| © 2011 MaryJane@ForexFactory | //| Indicator formula © 2010 Sylvain Vervoort, http://stocata.org/ | //+------------------------------------------------------------------+ #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Blue #property indicator_width1 3 #property indicator_level1 12 #property indicator_level2 88 #property indicator_levelcolor DarkGray //--- input parameters extern int RsiPeriod=4; extern int EmaPeriod=4; //--- buffers double wma0[], wma1[], wma2[], wma3[], wma4[], wma5[], wma6[], wma7[], wma8[], wma9[]; double ema0[], ema1[], rainbow[], rsi[], srsi[], fish[]; int OldTime, OldBars; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(6); SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(0, fish); SetIndexBuffer(1, rainbow); SetIndexBuffer(2, rsi); SetIndexBuffer(3, ema0); SetIndexBuffer(4, ema1); SetIndexBuffer(5, srsi); //---- reset counters OldTime = 0; OldBars = 0; //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars = IndicatorCounted(); if (counted_bars < 0) return (-1); if (counted_bars > 0) counted_bars--; int limit = Bars - 1 - counted_bars; //---- resize/shift extra buffers on first and every next bar if (Time[0] != OldTime) SyncExtraBuffers(); //---- prepare partial averages for (int i = limit; i >= 0; i--) wma0[i] = iMA(NULL, 0, 2, 0, MODE_LWMA, PRICE_CLOSE, i); for (i = limit; i >= 0; i--) wma1[i] = iMAOnArray(wma0, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma2[i] = iMAOnArray(wma1, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma3[i] = iMAOnArray(wma2, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma4[i] = iMAOnArray(wma3, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma5[i] = iMAOnArray(wma4, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma6[i] = iMAOnArray(wma5, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma7[i] = iMAOnArray(wma6, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma8[i] = iMAOnArray(wma7, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma9[i] = iMAOnArray(wma8, 0, 2, 0, MODE_LWMA, i); //---- weigh the averages for (i = limit; i >= 0; i--) { double rb_val = 5 * wma0[i] + 4 * wma1[i] + 3 * wma2[i] + 2 * wma3[i] + wma4[i] + wma5[i] + wma6[i] + wma7[i] + wma8[i] + wma9[i]; rb_val /= 20; rainbow[i] = rb_val; } //---- calculate rsi from rainbow smoothed price curve for (i = limit; i >= 0; i--) rsi[i] = 0.1 * (iRSIOnArray(rainbow, 0, RsiPeriod, i) - 50); //---- smooth the rsi with Vervoort zero lag MA for (i = limit; i >= 0; i--) ema0[i] = iMAOnArray(rsi, 0, EmaPeriod, 0, MODE_EMA, i); for (i = limit; i >= 0; i--) ema1[i] = iMAOnArray(ema0, 0, EmaPeriod, 0, MODE_EMA, i); for (i = limit; i >= 0; i--) srsi[i] = ema0[i] + (ema0[i] - ema1[i]); //---- do the fish for (i = limit; i >= 0; i--) fish[i] = ((MathExp(2 * srsi[i]) - 1) / (MathExp(2 * srsi[i]) + 1) + 1) * 50; //---- return(0); } //+------------------------------------------------------------------+ //| Shift array elements without having to do it one-by-one | //+------------------------------------------------------------------+ void SyncExtraBuffers() { if (OldBars == Bars) //---- if Bars = MaxBarsOnChart, arrays wouldn't resize & shift below //---- we have to shrink them a bit, one bar does. { ArrayResize(wma0, Bars - 1); ArrayResize(wma1, Bars - 1); ArrayResize(wma2, Bars - 1); ArrayResize(wma3, Bars - 1); ArrayResize(wma4, Bars - 1); ArrayResize(wma5, Bars - 1); ArrayResize(wma6, Bars - 1); ArrayResize(wma7, Bars - 1); ArrayResize(wma8, Bars - 1); ArrayResize(wma9, Bars - 1); } //---- on first Start(), when Time[0] != 0, this will give an init size to arrays and //---- set them as Series (because of iMAOnArray and iRSIOnArray). Hence nothing //---- in init() as this place will be visited first in any case. //---- The flip trick below is necessary on further resizing/shifting since ArrayResize() //---- adds/removes elements on the LEFT SIDE if set as Series so arrays wouldn't shift //---- and it would be necessary to do a for (n=Bars-1; n>=0; n--){wmaX[n+1]=wmaX[n];} //---- ten times on every new bar. this is much quicker. ArraySetAsSeries(wma0, false); ArrayResize(wma0, Bars); ArraySetAsSeries(wma0, true); ArraySetAsSeries(wma1, false); ArrayResize(wma1, Bars); ArraySetAsSeries(wma1, true); ArraySetAsSeries(wma2, false); ArrayResize(wma2, Bars); ArraySetAsSeries(wma2, true); ArraySetAsSeries(wma3, false); ArrayResize(wma3, Bars); ArraySetAsSeries(wma3, true); ArraySetAsSeries(wma4, false); ArrayResize(wma4, Bars); ArraySetAsSeries(wma4, true); ArraySetAsSeries(wma5, false); ArrayResize(wma5, Bars); ArraySetAsSeries(wma5, true); ArraySetAsSeries(wma6, false); ArrayResize(wma6, Bars); ArraySetAsSeries(wma6, true); ArraySetAsSeries(wma7, false); ArrayResize(wma7, Bars); ArraySetAsSeries(wma7, true); ArraySetAsSeries(wma6, false); ArrayResize(wma6, Bars); ArraySetAsSeries(wma6, true); ArraySetAsSeries(wma8, false); ArrayResize(wma8, Bars); ArraySetAsSeries(wma8, true); ArraySetAsSeries(wma9, false); ArrayResize(wma9, Bars); ArraySetAsSeries(wma9, true); //---- reset counters OldTime = Time[0]; OldBars = Bars; } //+------------------------------------------------------------------+ Da würde ich es eigentlich genauso machen. 1) Einen neuen Buffer definieren: //--- buffers double wma0[], wma1[], wma2[], wma3[], wma4[], wma5[], wma6[], wma7[], wma8[], wma9[]; double ema0[], ema1[], rainbow[], rsi[], srsi[], fish[]; AroonBuffer[]; 2) Auch ihn als Indexbuffer setzen //---- indicators IndicatorBuffers(7); SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(0, fish); SetIndexBuffer(1, rainbow); SetIndexBuffer(2, rsi); SetIndexBuffer(3, ema0); SetIndexBuffer(4, ema1); SetIndexBuffer(5, srsi); SetIndexBuffer(6, AroonBuffer); 3) Und nun soll der wma0 aus den Daten des AroonOszilators errechnet werden. //---- prepare partial averages for (int i = limit; i >= 0; i--) wma0[i] = iMA(NULL, 0, 2, 0, MODE_LWMA, iCustom(NULL, 0, "Aroon Oscillator_v1",10,50,300, 0, i), i); for (i = limit; i >= 0; i--) wma1[i] = iMAOnArray(wma0, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma2[i] = iMAOnArray(wma1, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma3[i] = iMAOnArray(wma2, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma4[i] = iMAOnArray(wma3, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma5[i] = iMAOnArray(wma4, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma6[i] = iMAOnArray(wma5, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma7[i] = iMAOnArray(wma6, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma8[i] = iMAOnArray(wma7, 0, 2, 0, MODE_LWMA, i); for (i = limit; i >= 0; i--) wma9[i] = iMAOnArray(wma8, 0, 2, 0, MODE_LWMA, i); -> Geht das so einfach? Oder kann ich das iCustom nicht in die Formel packen? Danke Mythos!
  18. Next try 1. MABuffer wird definiert double ind_buffer1[]; double ind_buffer2[]; double ind_buffer3[]; double HighBarBuffer[]; double LowBarBuffer[]; double ArOscBuffer[]; double MABuffer[]; 2. MABuffer wird als IndexBuffer gesetzt //---- additional buffers are used for counting. IndicatorBuffers(7); SetIndexBuffer(4, HighBarBuffer); SetIndexBuffer(5, LowBarBuffer); SetIndexBuffer(3, ArOscBuffer); SetIndexBuffer(0, ind_buffer1); SetIndexBuffer(1, ind_buffer2); SetIndexBuffer(2, ind_buffer3); SetIndexBuffer(6, MABuffer); 3. Buffer werden auf 0 gesetzt if(counted_bars < 1) { for(i = 1; i <= ArPer; i++) HighBarBuffer[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) LowBarBuffer[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) ArOscBuffer[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) ind_buffer1[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) ind_buffer2[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) ind_buffer3[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) MABuffer[CountBars-i] = 0.0; } 4. MABuffer wird aus 3rdGenMA befüllt und daraus wird Max/Min bestimmt //----Calculation--------------------------- for(i = 0; i < limit; i++) { MABuffer[i] = iCustom(NULL, 0, "3rdGenMA",89,21,3,5, 0, i); HighBarBuffer[i] = MABuffer[ArrayMaximum(MABuffer,ArPer,i)]; //Periods from HH LowBarBuffer[i] = MABuffer[ArrayMinimum(MABuffer,ArPer,i)]; //Periods from LL ArOscBuffer[i] = 100*(LowBarBuffer[i] - HighBarBuffer[i]) / ArPer; //Short formulation } -> Das barOffset habe ich von dir übernommen gehabt (bufferArray[ArrayMaximum(bufferArray,ArPer,barOffset)]). Wusste nicht was das bedeutet Habe nun für iCustom am Ende auch "i" genommen. In der Erklärung (F1) steht, dass die letzte Variable shift (Index of the value taken from the indicator buffer (shift relative to the current bar the given amount of periods ago)) ist. Also müsste es ja mit "i" passen, dass er immer nur den aktuellen nimmt - oder?
  19. So, habe mir jetzt die Seiten zu Function und Arrays durchgelesen. Mag am Englisch liegen, aber oft habe ich nur Bahnhof verstanden Trotzdem habe ich versucht, das umzusetzen was du mir gesagt hast. Der komplette Code lautet nun: //+------------------------------------------------------------------+ //| Custom Aroon Oscillator_v1.mq4 | //| rafcamara | //| Has corrected - Ramdass | //+------------------------------------------------------------------+ #property copyright "rafcamara" #property link "rafcamara@yahoo.com" //---- indicator settings #property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 DodgerBlue #property indicator_color2 Red #property indicator_color3 Snow #property indicator_color4 Green //---- indicator parameters extern int AroonPeriod = 10; extern int Filter = 50; extern int CountBars = 300; //---- indicator buffers double ind_buffer1[]; double ind_buffer2[]; double ind_buffer3[]; double HighBarBuffer[]; double LowBarBuffer[]; double ArOscBuffer[]; double MABuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- additional buffers are used for counting. IndicatorBuffers(6); SetIndexBuffer(4, HighBarBuffer); SetIndexBuffer(5, LowBarBuffer); SetIndexBuffer(3, ArOscBuffer); SetIndexBuffer(0, ind_buffer1); SetIndexBuffer(1, ind_buffer2); SetIndexBuffer(2, ind_buffer3); //---- drawing settings SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 1); SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1); SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 1); SetIndexStyle(3, DRAW_LINE, STYLE_SOLID, 1); //---- IndicatorDigits(0); //-- indicator buffers mapping if(!SetIndexBuffer(0, ind_buffer1) && !SetIndexBuffer(1, ind_buffer2) && !SetIndexBuffer(2, ind_buffer3)) Print("cannot set indicator buffers!"); //---- name for DataWindow and indicator subwindow label IndicatorShortName("AroonOsc_v1 (" + AroonPeriod + ", " + Filter + ")"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Aroon Oscilator | //+------------------------------------------------------------------+ int start() { if(CountBars >= Bars) CountBars=Bars; SetIndexDrawBegin(0, Bars - CountBars + AroonPeriod + 1); SetIndexDrawBegin(1, Bars - CountBars + AroonPeriod + 1); SetIndexDrawBegin(2, Bars - CountBars + AroonPeriod + 1); SetIndexDrawBegin(3, Bars - CountBars + AroonPeriod + 1); double ArOsc, HighBar = 0, LowBar = 0; int ArPer; int limit, i; // bool up,dn; int counted_bars = IndicatorCounted(); //---- ArPer = AroonPeriod; //---- check for possible errors if(counted_bars < 0) return(-1); //---- initial zero if(counted_bars < 1) { for(i = 1; i <= ArPer; i++) HighBarBuffer[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) LowBarBuffer[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) ArOscBuffer[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) ind_buffer1[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) ind_buffer2[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) ind_buffer3[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) MABuffer[CountBars-i] = 0.0; } //---- last counted bar will be recounted //if(counted_bars>0) counted_bars--; limit = CountBars - AroonPeriod; //----Calculation--------------------------- for(i = 0; i < limit; i++) { MABuffer[i] = iCustom(NULL, 0, "3rdGenMA",89,21,3,5, 0, 0); HighBarBuffer[i] = MABuffer[ArrayMaximum(MABuffer,ArPer,barOffset)]; //Periods from HH LowBarBuffer[i] = MABuffer[ArrayMinimum(MABuffer,ArPer,barOffset)]; //Periods from LL ArOscBuffer[i] = 100*(LowBarBuffer[i] - HighBarBuffer[i]) / ArPer; //Short formulation } //---- dispatch values between 2 buffers for(i = limit - 1; i >= 0; i--) { ArOsc=ArOscBuffer[i]; if(ArOsc > Filter) { ind_buffer1[i] = ArOsc; ind_buffer2[i] = 0.0; ind_buffer3[i] = 0.0; } if(ArOsc < -Filter) { ind_buffer1[i] = 0.0; ind_buffer2[i] = ArOsc; ind_buffer3[i] = 0.0; } if(ArOsc <= Filter && ArOsc >= -Filter) { ind_buffer1[i] = 0.0; ind_buffer2[i] = 0.0; ind_buffer3[i] = ArOsc; } } //---- done return(0); } //+------------------------------------------------------------------+ Was ich geändert habe: 1) Es wird ein weiterer Buffer namens "MABuffer" definiert double MABuffer[];2) Nach int start() wird der Buffer - wie alle anderen auch - auf 0 gesetzt. Allerdings bleibt wohl der letzte Wert erhalten. Ich denke der MABuffer muss für die neuen Werte auch auf 0 gesetzt werden? for(i = 1; i <= ArPer; i++) MABuffer[CountBars-i] = 0.0;3) Der MABuffer bekommt seine Werte mithilfe des iCustom aus dem 3rdGenMA-Script. for(i = 0; i < limit; i++) { MABuffer[i] = iCustom(NULL, 0, "3rdGenMA",89,21,3,5, 0, 0);4) Die High/LowBarBuffer berechnen sich nun aus den Maximum/Minimum des erstellen MABuffers. Ich habe das "bufferArray" jeweils durch den Namen des Buffers "MABuffer" ersetzt. Ich hoffe das war richtig? for(i = 0; i < limit; i++) { MABuffer[i] = iCustom(NULL, 0, "3rdGenMA",89,21,3,5, 0, 0); HighBarBuffer[i] = MABuffer[ArrayMaximum(MABuffer,ArPer,barOffset)]; //Periods from HH LowBarBuffer[i] = MABuffer[ArrayMinimum(MABuffer,ArPer,barOffset)]; //Periods from LL ArOscBuffer[i] = 100*(LowBarBuffer[i] - HighBarBuffer[i]) / ArPer; //Short formulation } Ich hoffe wenigstens dass ich nicht alles falsch gemacht habe. Sorry dass ich mich so anstelle
  20. Danke für die Antwort :) Allerdings ist mein MA kein "gewöhnlicher" MA sondern ein abgeänderter - womit ich nach deiner Erklärung auch hier den iCustomer benutzen muss. Nur wie genau weiß ich noch nicht
  21. Aroon Oscillator: Hätte ich einfach so umgesetzt: for(i = 0; i < limit; i++) { HighBarBuffer[i] = int ArrayMaximum(double array[MA3G], int count=WHOLE_ARRAY, int start=0); //Periods from HH LowBarBuffer[i] = int ArrayMinimum(double array[MA3G], int count=WHOLE_ARRAY, int start=0); //Periods from LL ArOscBuffer[i] = 100*(LowBarBuffer[i] - HighBarBuffer[i]) / ArPer; //Short formulation } Allerdings wird im alten Code ... ... noch "ArPer" berücksichtigt, was wohl laut dem Code... ... die Zeitspanne ist auf die sich der Aroon Oscillator beziehen soll. Muss ich die nicht auch noch einbauen, und anstatt dem "WHOLE_ARRAY" die "ArPer" Variable einfügen? Ist die Bezeichnung des MA im Array mit "MA3G" richtig? Fischer Hätte ich so umgesetzt: Inwiefern binde ich da iCustom noch mit ein? Einfach davor setzen? Stimmt die Variable "ArOsc"? Danke Danke Danke für die weitere Hilfe! :)
  22. Warum braucht man für den Zugriff auf den MA kein iCustom? Es ist doch auch ein eigener / selbst Erstellter Indikator? Danke weiterhin :-)
  23. Vielen Dank für die Ausführliche Antwort! Teste ich heute Abend gleich :-) Müssen die drei Codes in eine Datei gepackt werden, oder können sie auch so auf die jeweiligen Daten zugreifen?
  24. Hallo Leute, ich hoffe ihr könnt mir weiterhelfen http://www.expert-advisor.com/forum/images/smilies/smile.gif 1) Ich versuche - nun schon seit Tagen - auf einen gleitenden Durchschnitt den Aroon Oszillator anzuwenden. Einen programmierten Aroon Oszillator zu finden war nicht schwer, allerdings bezieht sich er natürlich auf den aktuellen Kurs. Der Code des Aroon Oszillator ist: //+------------------------------------------------------------------+ //| Custom Aroon Oscillator_v1.mq4 | //| rafcamara | //| Has corrected - Ramdass | //+------------------------------------------------------------------+ #property copyright "rafcamara" #property link "rafcamara@yahoo.com" //---- indicator settings #property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 DodgerBlue #property indicator_color2 Red #property indicator_color3 Snow #property indicator_color4 Green //---- indicator parameters extern int AroonPeriod = 10; extern int Filter = 50; extern int CountBars = 300; //---- indicator buffers double ind_buffer1[]; double ind_buffer2[]; double ind_buffer3[]; double HighBarBuffer[]; double LowBarBuffer[]; double ArOscBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- additional buffers are used for counting. IndicatorBuffers(6); SetIndexBuffer(4, HighBarBuffer); SetIndexBuffer(5, LowBarBuffer); SetIndexBuffer(3, ArOscBuffer); SetIndexBuffer(0, ind_buffer1); SetIndexBuffer(1, ind_buffer2); SetIndexBuffer(2, ind_buffer3); //---- drawing settings SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 1); SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1); SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 1); SetIndexStyle(3, DRAW_LINE, STYLE_SOLID, 1); //---- IndicatorDigits(0); //-- indicator buffers mapping if(!SetIndexBuffer(0, ind_buffer1) && !SetIndexBuffer(1, ind_buffer2) && !SetIndexBuffer(2, ind_buffer3)) Print("cannot set indicator buffers!"); //---- name for DataWindow and indicator subwindow label IndicatorShortName("AroonOsc_v1 (" + AroonPeriod + ", " + Filter + ")"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Aroon Oscilator | //+------------------------------------------------------------------+ int start() { if(CountBars >= Bars) CountBars=Bars; SetIndexDrawBegin(0, Bars - CountBars + AroonPeriod + 1); SetIndexDrawBegin(1, Bars - CountBars + AroonPeriod + 1); SetIndexDrawBegin(2, Bars - CountBars + AroonPeriod + 1); SetIndexDrawBegin(3, Bars - CountBars + AroonPeriod + 1); double ArOsc, HighBar = 0, LowBar = 0; int ArPer; int limit, i; // bool up,dn; int counted_bars = IndicatorCounted(); //---- ArPer = AroonPeriod; //---- check for possible errors if(counted_bars < 0) return(-1); //---- initial zero if(counted_bars < 1) { for(i = 1; i <= ArPer; i++) HighBarBuffer[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) LowBarBuffer[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) ArOscBuffer[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) ind_buffer1[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) ind_buffer2[CountBars-i] = 0.0; for(i = 1; i <= ArPer; i++) ind_buffer3[CountBars-i] = 0.0; } //---- last counted bar will be recounted //if(counted_bars>0) counted_bars--; limit = CountBars - AroonPeriod; //----Calculation--------------------------- for(i = 0; i < limit; i++) { HighBarBuffer[i] = Highest(NULL, 0, MODE_HIGH, ArPer, i); //Periods from HH LowBarBuffer[i] = Lowest(NULL, 0, MODE_LOW, ArPer, i); //Periods from LL ArOscBuffer[i] = 100*(LowBarBuffer[i] - HighBarBuffer[i]) / ArPer; //Short formulation } //---- dispatch values between 2 buffers for(i = limit - 1; i >= 0; i--) { ArOsc=ArOscBuffer[i]; if(ArOsc > Filter) { ind_buffer1[i] = ArOsc; ind_buffer2[i] = 0.0; ind_buffer3[i] = 0.0; } if(ArOsc < -Filter) { ind_buffer1[i] = 0.0; ind_buffer2[i] = ArOsc; ind_buffer3[i] = 0.0; } if(ArOsc <= Filter && ArOsc >= -Filter) { ind_buffer1[i] = 0.0; ind_buffer2[i] = 0.0; ind_buffer3[i] = ArOsc; } } //---- done return(0); } //+------------------------------------------------------------------+ Nun finde ich - da ich außer euren kleinen Thread zu MQL4 keine wirkliche Erfahrung habe - keine Variable wo auf Kursdaten zugegriffen wird - die man entsprechend auf den Gleitenden Durchschnitt ändern muss. Oder sind IndicatorBuffers(6); SetIndexBuffer(4, HighBarBuffer); SetIndexBuffer(5, LowBarBuffer); SetIndexBuffer(3, ArOscBuffer); SetIndexBuffer(0, ind_buffer1); SetIndexBuffer(1, ind_buffer2); SetIndexBuffer(2, ind_buffer3); die Variablen? Dieser Buffer verwirrt mich :D Müssen die beiden Indikatoren (MA3gr und Aroon Oszillator) dann auch in einer Code-Datei liegen oder kann ein Code auf die Ergebnisse eines anderen Codes zugreifen? 2) Zusätzlich will ich danach die Inverse Fisher Transformation auf den Aroon Oszillator anwenden. Alle Dateien findet Ihr im Anhang. Kann mir da jemand weiterhelfen? http://www.expert-advisor.com/forum/images/smilies/smile.gif Über Hilfe würde ich mich wirklich sehr sehr freuen! http://www.expert-advisor.com/forum/images/smilies/smile.gif Indikatoren.zip

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.