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

  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.

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.