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.

Gunner_Duck

Addict
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Gunner_Duck

  1. @conglom-o: welchen Fehler meinst du? Also ich habe jetzt deinen Code nochmal abgekürzt und nur noch die Long-Bedingung gelassen. Und der Code sieht so aus: int a=1; double MA_now = iCustom(NULL,...,a); double MA_prev = iCustom(NULL,...,a+1); while (iLow(NULL,60,a) > MA_now && iLow(NULL,60,a+1) > MA_prev) { MA_now = iCustom(NULL,...,a); MA_prev = iCustom(NULL,...,a+1); a++; if (a>=Bars-1) break; } Wie gesagt, der Code funktioniert ja soweit so gut. Aber er sagt aus, dass Kerze[1] und Kerze[2] über dem MA sein sollen. Soll aber nur Kerze[1] über dem MA und Kerze[2] muss unter MA sein. Somit würde ich doch den Cross anschauen. Demzufolge müsste mein "while" doch so hier aussehen: while (iLow(NULL,60,a) > MA_now && iLow(NULL,60,a+1) < MA_prev) Oder denke ich hier etwas zu perplex? P.S.: Skype nutze ich zwar nicht, kann es aber installieren wenn es sein muss. P.P.S: was ich aber an deinem Code auch super finde, dass die Range direkt neu aufgebaut wird, sobald ich den MA nochmal berühre.
  2. Hallo Wago, danke für deinen Ansatz. Ich habe das ganze jetzt mal mit meiner Bedingung verknüpft, aber das geht so gar nicht... /+------------------------------------------------------------------+ //|========================CROSS-OVER-LOGIK==========================| //+------------------------------------------------------------------+ double MA_now, MA_prev; datetime Range_Start_Hour; int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); int a=Bars-counted_bars-1; int direction=1; { //1:Suche Kreuzen unten => oben //2:Suche Kreuzen oben => unten while(i>=0) MA_now = iCustom(NULL,...,a); MA_prev = iCustom(NULL,...,a+1); if(direction==1) { if(iLow(NULL,0,a) > MA_now && iLow(NULL,0,a+1) < MA_prev) { direction=2; Range_Start_Hour = TimeHour(iTime(NULL,0,a)); } } else { if(iHigh(NULL,0,a) < MA_now && iLow(NULL,0,a+1) > MA_prev) { direction=1; Range_Start_Hour = TimeHour(iTime(NULL,0,a)); } } a--; } Die Funktion "indikator counted" - kann ich sie überhaupt in einem EA aufrufen? Ich habe diese Funktion bisher nur in einem Indikator gesehen. Sorry, wenn die Frage absolut doof klingt, bin wie schon erwähnt ein Anfänger. Der Ansatz sieht an sich aber schon ganz gut aus. Aber komischerweise siehts auch so aus, als würde der EA gar nicht starten können. Weil ich habe ich noch einige Kommentarfunktionen integriert. Und selbst diese tauchen beim Testen nicht auf. @Conglom-O: dein code funktioniert ja auch super. Das Problem für mich ist halt nur, dass mir diese zweite Kerze schon teilweise zu spät ist. Ich brauche direkt die erste Kerze, die über/unter dem GD ist. Und was noch dazu kommt, dass hiermit meine Kerze auch dann gespeichert wird, wenn ich im direkten Trend bin. Sprich z.B. Kerze[1] > Kerze[2] ist. Ich brauche ja nur den Cross.
  3. Das hast du richtig erkannt ;-) Ich glaube, dass die aktuelle Logik schon gut ist. Aber es fehlt nur eine Kleinigkeit. Schließen wir jetzt einfach mal die LONG-Bedingung aus und bleiben nur bei Short. Aktuell sieht die Bedingung z.B. für Short ja so aus: while (iHigh(NULL,0,a) < MA_now && iLow(NULL,0,a+1) < MA_prev) Ist jetzt erstmal egal, ob ich iLow nehme oder Low[ ] (Aber auf jeden Fall danke für den Tipp). Die Bedingung sagt ja: ist mein Low[1] größer MA[1] und Low[2] größer MA[2], dann merke Kerze! Ist ja auch eigentlich soweit richtig laut diesem Screenshot. Das Problem dabei ist aber nicht nur, dass erst die zweite Kerze gespeichert wird, sondern meine Bedingung eigentlich auch immer dann erfüllt ist, solange ein definitiver Trend vorliegt. Und das darf so nicht so sein. Ich will ja nur das kreuzen betrachten. Richtiger wäre die Logik aber doch für meinen Fall eigentlich, wenn ich sage: ist mein Low[1] größer MA[1] und Low[2] kleiner MA[2], dann merke Kerze! Aber wenn ich das so ändere, dann findet er den Cross nach unten einfach nicht. Und das verstehe ich nicht. P.S.: das mit den Buffern kenne ich noch nicht (Anfänger)
  4. Du meinst das a dann mit 2 anstatt mit 1 definieren?
  5. Betrachten wir zuerst die Long-Logik hier noch ein Bild:
  6. hi, also das mit iLow ist schon richtig so. IF-Schleife habe ich hier nicht. Deine While-Schleife sieht aktuell so aus: int a=1; double MA_now = iCustom(NULL,...,a); double MA_prev = iCustom(NULL,...,a+1); while ((iLow(NULL,0,a) > MA_now && iLow(NULL,0,a+1) > MA_prev) || (iHigh(NULL,0,a) < MA_now && iLow(NULL,0,a+1) < MA_prev)) { MA_now = iCustom(NULL,...,a); MA_prev = iCustom(NULL,...,a+1); a++; if (a>=Bars-1) break; } Ich habe dort einfach nur die Bedingung für Short hinzugefügt. Zu dem Bild: - Die Range wird hier gelb markiert und bildet sich aus der Kerze, die mit rotem Pfeil markiert ist. - Der GD läuft hier unterhalb der Kerzen und ist mit der Farbe "Aqua" markiert. - Die Range SOLL an der Kerze aufgebaut werden, die mit blauem Pfeil markiert ist. Deswegen wäre ja hier eigentlich die Logik, dass Kerze_prev < MA_prev && Kerze_now > MA_now. Aber wenn ich das so schreibe, findet er den Cross nicht.
  7. Hallo conglom-o, ich habe mir den Ablauf nochmal genauer angeschaut. Und es sieht aktuell immer so aus, dass meine Rangegröße erst nach der zweiten Kerze aufgebaut wird. Auf dem Bild sieht man hoffentlich, dass die Range jetzt auf der Kerze mit dem roten Pfeil aufgebaut wird. Es soll aber schon auf die Kerze mit dem weißen Pfeil aufgebaut werden. Die Logik sieht aktuell so aus: (iLow(NULL,0,a) > MA_now && iLow(NULL,0,a+1) > MA_prev) Normalerweise hätte ich die Logik so hier gemacht: (iLow(NULL,0,a) > MA_now && iLow(NULL,0,a+1) < MA_prev) Aber so findet er den Cross komischerweise gar nicht mehr. Hast du vielleicht eine Idee, was hier los ist. Schau dir mal den Screenshot an. Ich hoffe du verstehst was ich meine. P.S.: ich habe die Range jetzt extra so klein gemacht, damit man es hoffentlich besser erkennt was ich meine.
  8. vielen dank conglom-o. Hast mir super weiter geholfen. Einen schönen Tag wünsche ich dir ;-)
  9. Super, ich danke dir vielmals. Jetzt klappt es Kannst du mir bitte noch zum besseren Verständnis die Schleife erklären. Warum muss der MA_now und MA_prev nochmals in die While-Schleife und dann auch noch ohne "double" ? Es sieht irgendwie doppelt gemoppelt aus.
  10. Also ich habe den Index abgeändert, aber es scheint sich ein wurm dort eingeschlichen zu haben. Sobald meine Bedingung erfüllt ist, friert der Tester ein. Schätze er hängt sich dann in der Schleife auf. Es wäre super nett von dir, wenn du dir die Zeit dafür nehmen könntest und mir bei den Zeilen helfen könntest. Aktuell sieht der Code so aus: int a=1; int AnzahlKerzen = 2; bool Break; while (a<AnzahlKerzen && !Break) { double MA_now = iCustom(...,a); double MA_prev = iCustom(...,a+1); if((Close[1] > MA_now) && (Close[2] < MA_prev)) { datetime Zeitpunkt_Long = iTime(NULL,60,1); } else { Zeitpunkt_Long = 0; Break=true; a++; } }
  11. ja an eine Schleife habe ich auch schon gedacht. Meinst du in etwa so hier: nt a; int AnzahlKerzen = 2; bool Break; while (a<AnzahlKerzen && !Break) { double MA_now = iCustom(NULL,Zeiteinheit,iBaender,55,0,0.2,1,a); double MA_prev = iCustom(NULL,Zeiteinheit,iBaender,55,0,0.2,1,a+1); if((Close[0] > MA_now) && (Close[1] < MA_prev)) { datetime Zeitpunkt_Long = iTime(NULL,60,0); } else { Zeitpunkt_Long = 0; Break=true; a++; } }
  12. Ich bin immer offen für andere Wege 😉 und natürlich auch dankbar für weitere Vorschläge. Auch so lernt man ja dazu. Wie würdest du es denn machen?
  13. bis wann die Range geht ist erstmal uninteressant. aktuell wird die Range durch externe variablen definiert. Ich will das so ändern, dass mir der Range-Startpunkt durch die ermittelte Kerze gestartet wird. Range-Start soll den Zeitpunkt einer Kerze bekommen, die als erste über meinem MA geschlossen wird. Die Frage ist hier einfach nur, wie kann ich einen Zeitpunkt einer Kerze ermitteln.
  14. Sorry, ich denke wahrscheinlich wieder mal zu kompliziert. ich will den zeitpunkt einer kerze haben, die als erste über/unter dem ma geschlossen wird. diesen zeitpunkt will ich daraufhin als meinen startpunkt für meine range verwenden.
  15. naja das ist es ja. Sobald eine Kerze über/unter MA geschlossen wird, soll genau diese Kerze als mein Grenzanfang definiert werden. Den Grenzschluss will ich dann mit einem Offset auf den Grenzanfang definieren. Sprich: Grenze_Start: MA<Low Grenze_Stop: Grenze_Start + 8 Stunden + 20 Minuten Ich muss hier halt zuerst den Punkt "Grenze_Start" festlegen. Ich glaube, ich habe hiermit den Ansatz schon gefunden. Bin mir aber noch nicht sicher, ob es das gelbe vom Ei ist. Weil durch den Index 0 im Low oder High wird der Startpunkt mit jeder Kerze die über/unter dem MA ist aktuallisiert. string TIMERHIGH, TIMERLOW; if(MA<Low[0]) TIMERHIGH = TimeToStr(TimeCurrent(),TIME_MINUTES); if(MA>High[0]) TIMERLOW = TimeToStr(TimeCurrent(),TIME_MINUTES); Denke, dass ich hier aber wohl eine Schleife haben muss.
  16. Hallo Zusammen, ich bin mal wieder auf eure Hilfe angewiesen. Also zu der Theorie: Ich will eine eigene Rangestraterie aufbauen. Aktuell funktioniert der Rangeaufbau mit manueller Vorgabe. Sprich, ich gebe meine Zeitvorgaben manuell vor, in welchem Zeitraum die Range aufgebaut werden soll und ab wann ich traden will. Ich möchte es folgendermaßen erweitern oder abändern. Ich habe eine Moving Average. Sobald eine Kerze z.b. oberhalb der Linie geschlossen wird, will ich diese Kerze als meinen Startpunkt für meinen Rangeaufbau festlegen. Der Startpunkt der Range sieht aktuell so aus: datetime RangeStartPunkt = StrToTime(TimeYear(TimeCurrent())+"."+TimeMonth(TimeCurrent())+"."+TimeDay(TimeCurrent())+" "+Range_Start_Stunde+":"+Range_Start_Minute); Ich stelle es mir grade einfach so vor: if(Linie_oben<Low[0]) TIMERHIGH = iTime(NULL,PERIOD_H1,0); Range_Start_Stunde = TIMERHIGHStelle ich es mir zu einfach vor? Könnt ihr mir bitte auf die Sprünge helfen.
  17. Hier nochmal das ein Screenshot
  18. Ich glaube ich hab den Fehler gefunden. Also vorneweg, ich lese mir die Fisher-Daten somit raus: ArrowDown_now = iCustom(NULL,0,iFisher,period,2,0); ArrowDown_previous = iCustom(NULL,0,iFisher,period,2,1); ArrowDown_preprevious = iCustom(NULL,0,iFisher,period,2,2); Diese Arrow-Werte lasse ich mir in meinem EA über das Kommentar im Chart anzeigen. Schaut euch mal dazu das angehängte Bild an. Das Problem ist, dass nur der aktuelle Indi-Puffer, also das "ArrowDown_now" den richtigen Wert im Chart ausgibt bzw. ausliest. Wenn ich aber zum Vergleich über die "Previous" oder die "preprevious"-Kerze gehe, wird mir ein ganz anderer Wert im Mouse-Over angezeigt. Und hier brauche ich Hilfe. Denn ich hab echt keinen Schimmer woher die Werte kommen.
  19. Hallo, ich habe hier mal eine Verständnisfrage zu dem Fisher Indikator an die, die ihn kennen. Da Bilder mehr sagen können als Worte, dazu ein kleiner Screenshort. Die Frage ist hier, warum bekommt hier die Kerze eine rote Spitze, obwohl es eindeutig im grünen Bereich ist? http://www.expert-advisor.com/forum/attachments/metatrader-4/indikatoren/2143d1454605635-fisher-indi-unbenannt.jpg Aber angekommen, ich bin aktuell im 15min-Chart, und ich schalte kurz mal in eine beliebig andere Periode, werden die Fisher-Kerzen ganz normal in nur einer Farbe dargestellt. Diese andersfarbigen Kerzenspitzen werden anscheinend dann gebildet, wenn der Fisher in der Periode nicht aktuallisiert wird. Ist das ein Bug in der Programmierung?
  20. Ach mist, hatte das a++ zuerst auch dahin gesetzt Super, vielen dank, es scheint jetzt zu gehen. Fehlt zwar noch eine Kontrollfunktion, aber ich versuch es erstmal selber. Einen schönen Abend noch.
  21. Meinst du in etwa so: while (a<AnzahlKerzen && !Break) { int indiValue = iCustom(NULL,0,iTrendyIndi,0,a); // Meldung 2 / 1 / 0, für BUY/SELL/FLAT if(indiValue == 2) { LongCounter++; } else { LongCounter=0; Break=true; a++; } } if(LongCounter==AnzahlKerzen) GoLong=true;
  22. Ja genau so einen Ansatz brauche ich. Vielen dank schon mal dafür. Also mein Indikator liefert mir mit einem Switch den Wert "2" für Long und den Wert "1" für Short an den EA. So - den Indi initialisiere ich mit dieser Funktion im EA: //NAME, cmd (1 : OPEN BUY/SELL), shift (0) int getTrendyIndiValue(string iTrendyIndi,int cmd,int shift) { double indiSignal = 0; // neutral int returnVal = 0; switch(cmd) { case 1 : {// check for open indiSignal = iCustom(NULL,0,iTrendyIndi,0,shift); // custom indicator signals for BUY/SELL (buffer 0) if (indiSignal == 2) returnVal = 2; // BUY? else if (indiSignal == 1) returnVal = 1; // SELL? } break; default: return(returnVal); // wrong parameter } return(returnVal); } Und je nachdem welches Signal mir hieraus kommt, gehe ich Long oder Short: int tradeTrigger = getTrendyIndiValue(iTrendyIndi,1,0); // Meldung 2 / 1 / 0, für BUY/SELL/FLAT So weit so gut. Und jetzt - Wie integriere ich deinen Vorschlag hier rein? int tradeTrigger = getTrendyIndiValue(iTrendyIndi,1,0); // Meldung 2 / 1 / 0, für BUY/SELL/FLAT bool GoLong = false; bool GoShort = false; int AnzahlKerzen = 2; int LongCounter = 0; int ShortCounter = 0; int a=0; bool Break=false; while (a<AnzahlKerzen && !Break) { IndiValue = iCustom(.....,a); if(IndiValue>SignalSchwelle) { LongCounter++; } else { LongCounter=0; Break=true; } } if(LongCounter==2) GoLong=true; Oder brauche ich die Indikator-Initialisierung damit nicht mehr?
  23. Hallo Metatrader, ich habe folgenden Tradewunsch an den EA, den ich mir grade zusammen bastle. Ich lese mir aus einem iCustom meine Long-/Shortsignale. Diese Signale verwende ich aktuell direkt für die Trades, was ich aber ändern will. Ich möchte, dass der EA erst tradet, wenn das entsprechende iCustom-Signal eine Anzahl x von Kerzen anhält. Mir würden eigentlich schon zwei geschlossene Bars reichen. Ich finde einfach nicht die richtige Funktion dafür. Habe es schon mit einer einfachen If-Abfrage versucht: if (tradeTrigger == 2 && Close[1]>Close[2]) GoLong = true; if (tradeTrigger == 1 && Close[2]>Close[1]) GoShort = true; Und auch eine for-Schleife hat nicht zum gewünschten Resultat gebracht. Die Trades werden einfach sofort gesetzt, sobald das entsprechende Indikatorsignal kommt. switch(tradeTrigger) { case 2 : {// BUY for(int LongCounter=0; LongCounter<Bars; LongCounter++) { if (LongCounter>=AnzahlKerzen) GoLong = true; else GoLong = false; }break; } case 1 : {// SELL for(int ShortCounter=0; ShortCounter<Bars; ShortCounter++) { if (ShortCounter>=AnzahlKerzen) GoShort = true; else GoShort = false; } break; } } Ich sehe einfach nicht mehr den Wald vor lauter Bäumen oder so und hoffe, dass mir hier endlich einer helfen kann. BBBIIIIIITTTTEEEE........

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.