Maerl Brontius Posted January 21, 2010 Report Posted January 21, 2010 Luisa.A. said: ...Das hatte ich ja bei meiner Spread-Anzeige ja schon verbockt gehabt. Das ist so eine Sache, die werde ich noch verinnerlichen müssen. Das ist sicher eine Sache die bei jedem Indi gebraucht wird for (i=0; i< Bars; i++) { if(ObjectFind("Hammer") >= 0 ) ObjectDelete("Hammer"); } Das Iterieren über die Bars ist hier nicht angebracht. Da du an dieser Stelle keine TimeSeries betrachtest und auf die Objekte nur über den Bezeichner zugreifst sind sind die Bars irrelevant und von den 100 Durchläufen würde nur der erste etwas machen. Aktuell noch nicht, da die von dir erzeugten Objekte nicht "Hammer" heissen, sondern einen Hammer-Zusatz haben. Du kommst nicht umhin über die verfügbaren Objekte zu iterieren (--> ObjectsTotal(...)) Quote Gibt es einen Trick wie ich die einfach unter die Bars schieben kann? Im Chart F8 drücken und "Chart im Vordergrund" anhaken. Nur willst du ja beides sehen, also besser die Dinger weiter vom Candle entfernt einzeichnen.
Luisa.A. Posted January 21, 2010 Author Report Posted January 21, 2010 (edited) Mythos said: bzgl direkt auf die Balken. Du malst es derzeit aug High + 10*Point, das is recht eng. versuch hier mal andere werte bzw. verschieb das Symbol händisch dorthin wo es soll und sieh dir dann an welche Parameter es hat.ich werde mal schauen, wohin ich das schieben werde Quote liegt daran das du nas Symbol "Hammer" löscht, aber Symbole "Hammer1"... malst. (im deinit fehlt beim Symbolnamen das i dazu)wo schreibe ich das i hin? Ich habe hin und her probiert und in der Hilfe nachgelesen. Produzierte aber immer nur Fehler beim Kompilieren Maerl Brontius said: Du kommst nicht umhin über die verfügbaren Objekte zu iterieren (--> ObjectsTotal(...))ich kann zwar gerade überhaupt nichts mit iterieren anfangen, aber ich schaue mir mal den Befehl ObjectsTotal über die Hilfe an, in der Hoffnung das mein Englisch ausreicht.mal schauen ob ich danach irretiert oder iteriert bin :wub: Edited January 21, 2010 by Luisa.A.
Mythos Posted January 21, 2010 Report Posted January 21, 2010 Luisa.A. said: wo schreibe ich das i hin? Ich habe hin und her probiert und in der Hilfe nachgelesen. Produzierte aber immer nur Fehler beim Kompilieren nimm einfach statt der Bezeichnung "Hammer" den String den du verwendest wenn du das Objekt erzeugst ;) wegen iterieren: heißt nix anderes wie "alle Objekte durchgehen". ObjectsTotal() gibt dir die Anzahl aller Objekte und du könntest alle durchgehen (über alle iterieren) und löschen welche du willst. Aber da du ja genau weißt welche du erzeugst, machts mehr Sinn diese direkt zu löschen. Noch was zu deiner Objekterzeugung: Überleg dir mal kurz was in folgendem Fall passiert:Du ziehst den Indi auf den Chart, der aktuelle Balken ist ein Hammer, Objekt wird erzeugt etc. Es kommt ein neuer Balken dazu der auch ein Hammer ist. Welches Objekt wird jetzt erzeugt (wie heißts)? Gibts dieses Objekt in dem Moment schon? Führt das zu einem Problem? HTH
Luisa.A. Posted January 21, 2010 Author Report Posted January 21, 2010 Mythos said: Welches Objekt wird jetzt erzeugt (wie heißts)? Gibts dieses Objekt in dem Moment schon? Führt das zu einem Problem?Also die Objekte heißen Hammer 1, Hammer 2, Hammer 3,..., Hammer 55,....usw, Bzw. die Hammer werden so benannt. Wo soll es da zu Problemen kommen? Oder auf was willst Du hinaus? Ich hab soeben auch nochmal nachgeschaut. Dabei ist mir aufgefallen, dass die nicht durchgängig nimmeriert sind, sondern scheinbar die Nummer der Kerze bekommen..... Kann das sein?
Mythos Posted January 21, 2010 Report Posted January 21, 2010 Luisa.A. said: Ich hab soeben auch nochmal nachgeschaut. Dabei ist mir aufgefallen, dass die nicht durchgängig nimmeriert sind, sondern scheinbar die Nummer der Kerze bekommen..... Kann das sein?ja, sie erhalten als Zahl den aktuellen Offset des Balken. Wenn also jetzt beim vorletzen Balken (also 1 Balken zurück) ein Hammer entdeckt wird, dann erhält der das Objekt "Hammer 1". Jetzt geht der aktuelle Balken (Offset 0) zu Ende und sobald der nächste Balken startet (und der Balken wo "Hammer 1" steht jetzt Offset 2 hat) bemerkst du zB das der Balken der gerade fertig wurde (also Offset 1) jetzt die Kriterien für einen Hammer erfüllt, dann willst du für diesen Balken ein Objekt mit dem Namen "Hammer 1" erzeugen. Das gibts aber schon und du wirst einen Fehler bekommen. Sprich wenn der Indi lang läuft, und "Hammer 1" und "Hammer 0" erzeugt sind, werden keine neuen Hammer mehr "erkannt" weils die Objekte ja schon gibt und somit nicht nochmal gezeichnet werden können. Was noch dazukommt: beim Balken der sich im entstehen befindet, musst du, falls du den betrachtest, auch eine Möglichkeit einbauen das Objekt wieder zu löschen wenn die Kriterien für einen Hammer nicht mehr erfüllt sind. Und um den Indikator von einem EA aus zu verwenden, bringen dir Objekte nit wirklich was. Da macht es mehr Sinn den Indikator eine Linie zeichnen zu lassen, die 1 ist wenn eine Hammer erkannt wurde und 0 sonst. Nur als kleiner Tipp falls du den Hammer später automatisiert weiterverarbeiten willst.
Vola Posted January 21, 2010 Report Posted January 21, 2010 Ich werde euch programmierer wohl mein Leben lang bewundern... Ich les mir das hier ab und an mal durch, probiere das irgendwie zu verstehen, aber es geht nicht.Soll aber kein Hilferuf sein, nur Anerkennung anderer Talente, ich laß das mit dem Programmieren mir würde nicht nur die Plattform einfrieren, mein Pc würde schmelzen... Gruß Vola
Luisa.A. Posted January 22, 2010 Author Report Posted January 22, 2010 Mythos said: ja, sie erhalten als Zahl den aktuellen Offset des Balken. Wenn also jetzt beim vorletzen Balken (also 1 Balken zurück) ein Hammer entdeckt wird, dann erhält der das Objekt "Hammer 1". Jetzt geht der aktuelle Balken (Offset 0) zu Ende und sobald der nächste Balken startet (und der Balken wo "Hammer 1" steht jetzt Offset 2 hat) bemerkst du zB das der Balken der gerade fertig wurde (also Offset 1) jetzt die Kriterien für einen Hammer erfüllt, dann willst du für diesen Balken ein Objekt mit dem Namen "Hammer 1" erzeugen. Das gibts aber schon und du wirst einen Fehler bekommen. Sprich wenn der Indi lang läuft, und "Hammer 1" und "Hammer 0" erzeugt sind, werden keine neuen Hammer mehr "erkannt" weils die Objekte ja schon gibt und somit nicht nochmal gezeichnet werden können.das klingt einleuchtend. Mythos said: Was noch dazukommt: beim Balken der sich im entstehen befindet, musst du, falls du den betrachtest, auch eine Möglichkeit einbauen das Objekt wieder zu löschen wenn die Kriterien für einen Hammer nicht mehr erfüllt sind.Genau dieser Punkt ist mir gesterna aufgefallen, als mir mein Indi beim entstehenden Bar fließig locker 4-5 Symbole reingemalt hatte. Mal schauen was ich dazu für eine Logik finde....... ich denke das wird auch was mit if-else oder sowas....... if (Prüfung) else (Objekte löschen)... Mal schauen ob ih eine Funktion finde die nur auf Objekte dieses Bars zurückgreift... Mythos said: Und um den Indikator von einem EA aus zu verwenden, bringen dir Objekte nit wirklich was. Da macht es mehr Sinn den Indikator eine Linie zeichnen zu lassen, die 1 ist wenn eine Hammer erkannt wurde und 0 sonst. Nur als kleiner Tipp falls du den Hammer später automatisiert weiterverarbeiten willst.Das wäre natürlich gut, den weiterverwenden zu können. Auch wenn meine "Skills" noch ewig von EAs entfernt sind (es sei denn dieses EA soll Kapital verbrennen) Eine Linie für die Balken zu zeichnen kann ja nicht so schwer sein. Mal schauen wie ich das hinbekomme. Dazu muss ich mir wohl mal wieder andere Indis anschauen und bei denen "spicken" Ich glaube die lustigen Punkte beim Parabolic Indikator sind ja eigentlich nur (fette) Linien. Mal schauen ob ich dort eine Anregung finde Vola said: Ich werde euch programmierer wohl mein Leben lang bewundern... Ich les mir das hier ab und an mal durch, probiere das irgendwie zu verstehen, aber es geht nicht.Soll aber kein Hilferuf sein, nur Anerkennung anderer Talente, ich laß das mit dem Programmieren mir würde nicht nur die Plattform einfrieren, mein Pc würde schmelzen... Danke für die Blumen. Auch wenn ich mich da (noch) nicht angesprochen fühlen mag. Ich reiche die Blumen gerne an die Profis hier weiter... Wenn ich in ein paar Monaten weiter bin, zweige ich mir dann vielleicht ein Blümchen von dem Strauß ab
Luisa.A. Posted January 22, 2010 Author Report Posted January 22, 2010 #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red //Konfiguration / Parameter extern int CandlesToCheck=100; extern color IndiColor = DeepPink; //Variablen für Berechnungen double HighLowSpanne; double HighLowDrittel; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { int i; for (i=0; i< Bars; i++) { if(ObjectFind("Hammer "+DoubleToStr (i, 0)) >= 0 ) ObjectDelete("Hammer "+DoubleToStr (i, 0)); } return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start () { int counted_bars=IndicatorCounted (), limit, i=0; if (counted_bars> 0) counted_bars--; limit=Bars-counted_bars; if (limit> CandlesToCheck) limit=CandlesToCheck; while (i< limit) { double k = (High [i] - Low [i]) /3; if ((Open [i]> (Low [i] +2*k))&& (Close [i]> (Low [i] +2*k))) { ObjectCreate ("Hammer "+DoubleToStr (i, 0), OBJ_ARROW, 0, Time [i], Low [i] +(-10)*Point); ObjectSet ("Hammer "+DoubleToStr (i, 0), OBJPROP_ARROWCODE, 159); ObjectSet ("Hammer "+DoubleToStr (i, 0), OBJPROP_COLOR, IndiColor); } i++; } }Ich hab ein paar kleine Modifikationen vorgenommen:Farbwahl über das Indikator-MenüWenn man den Indikator aus dem Chart löscht, werden nun auch alle erstellten Objekte des Indikators gelöscht :)die Markierungen erfolgen nun knapp unter dem Bar und nicht mehr mitten im / hinter dem Bar Anstatt dem Punkt (oder sonst einem Symbol) hab ich leider keine Linien (bisher) hinbekommen. Der malt mir immer gleich durch den ganzen Chart, was super unübersichtlich aussieht und einem an dieser Stelle auch nichts mehr nützt. Mal schauen, ob ich das trotzdem noch irgendwie hinbekomme An der Prüfung der Bars arbeite ich auch noch, Speziell soll der aktuelle bzw. letzte Bar geprüft werden, falls dort Objekte sind die evtl. wieder gelöscht werden sollen.Ich denke meine Idee der Prüfung hab ich damit schon angedeutet aber die Umsetzung ist schwerer (für mich) als es scheint....
Mythos Posted January 22, 2010 Report Posted January 22, 2010 Luisa.A. said: Der malt mir immer gleich durch den ganzen Chart, was super unübersichtlich aussieht und einem an dieser Stelle auch nichts mehr nützt. Für solche Fälle gibt es bei den Indis die Funktion SetIndexEmptyValue(..) bzw. als default für diesen Wert die EMPTY_VALUE (MetaEditor Hilfe weiß mehr: Empty values werden nicht gezeichnet ;), die hilft dir da sicher weiter.
Luisa.A. Posted January 22, 2010 Author Report Posted January 22, 2010 (edited) Mythos said: Was noch dazukommt: beim Balken der sich im entstehen befindet, musst du, falls du den betrachtest, auch eine Möglichkeit einbauen das Objekt wieder zu löschen wenn die Kriterien für einen Hammer nicht mehr erfüllt sind. Luisa.A. said: An der Prüfung der Bars arbeite ich auch noch, Speziell soll der aktuelle bzw. letzte Bar geprüft werden, falls dort Objekte sind die evtl. wieder gelöscht werden sollen.Ich denke meine Idee der Prüfung hab ich damit schon angedeutet aber die Umsetzung ist schwerer (für mich) als es scheint....Ich glaube da eine Lösung gefunden zu haben. Ich habe einfach die Bedigungen mit < und > aus der Hammerprüfung umgedreht. Wenn dann diese Bedingung erfüllt ist wird nach einem Hammer-Objekt beim vorletzten (also dem letzten abgeschlossenen Bar) gesucht und dieses gelöscht. Die paar Codezeilen dazu wären: double c = (High [i+1] - Low [i+1]) /3; //Pruefung ob am vorletzten Bar Objekte vorhanden sind //Falsche Objekte werden gelöscht if ((Open [i+1]< (Low [i+1] +2*c))&& (Close [i+1]< (Low [i+1] +2*c))) { if(ObjectFind("Hammer "+DoubleToStr (i, 0)) >= 0 ) ObjectDelete("Hammer "+DoubleToStr (i, 0)); }Zumindest gibt es schonmal keine Fehler beim kompilieren und das Terminal friert nicht ein Ob das so korrekt ist und auch wirklich nur die falschen Objekte gelöscht werden konnte ich jetzt in den letzten Bars nicht nachvollziehen. Mythos said: Und um den Indikator von einem EA aus zu verwenden, bringen dir Objekte nit wirklich was. Da macht es mehr Sinn den Indikator eine Linie zeichnen zu lassen, die 1 ist wenn eine Hammer erkannt wurde und 0 sonst. Nur als kleiner Tipp falls du den Hammer später automatisiert weiterverarbeiten willst.Das verstehe ich jetzt zwar noch nicht so 100% bzw. kann es nicht nachvollziehen, aber das ist auch erstmal nebensächlich, da ich noch lange nicht an einem EA arbeite und mir erstmal ein paar eigene Indies zusammen"bastel" um mein manuelles Trading zu supporten. Bis ich diese fertig habe, brauche ich sicher noch etwas.... Aber wer weiß. Vielleicht bin ich in 2-3 Monaten ja auch viel besser geworden und brauch Euch dann nur noch die fertigen Indis vorstellen und nicht nach jedem Schritt um Hilfe betteln weil ich zum x-ten Mal nicht weiterkomme Edited January 22, 2010 by Luisa.A.
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now