jananatali Posted August 4, 2009 Report Posted August 4, 2009 adxch5= iADX( "USDCHFFXF", 5, 13,PRICE_HIGH, MODE_MAIN, 0);adxeu1= iADX( "EURUSDFXF", 1, 13,PRICE_HIGH, MODE_MAIN, 0); Nutze ich beide obengenannten Fuktionsaufrufe bei der Entwicklung eines Indikators, enthalten adxch5 und adxeu1 die korrekten Daten.Nutze ich aber denselben Aufruf im Expertenmodus enthält adxch5 keine Daten, während adxeu1 Daten enthält. Woran liegt das? Was vergesse ich? Was habe ich im Expertenmodus zu beachten? GrüsseJanaNatali
titanfx Posted August 4, 2009 Report Posted August 4, 2009 Was habe ich im Expertenmodus zu beachten? Mit Expertenmodus, meinen Sie bestimmt Aufruf des Indikators aus einem Expert Advisor. Es können mehrer Gründe sein, warum keine Daten ausgegeben werdenwie z.B: keine historische Daten, falscher Symbol, Fehler im Programmcodeeinfacher ist es durch das schritweise Debuggen mittels z.B Printfunktion Fehler auszufiltern, in dem man die Indikator-Daten in der Logdatei ausgibt
conglom-o Posted August 4, 2009 Report Posted August 4, 2009 Wenn es möglich ist, poste doch mal den gesamten Quelltext Deines Experten. Dann können wir Dir sicherlich besser helfen als nur mit zwei Zeilen. Wie titanfx schon geschrieben hat, kann der Fehler mehrere Ursachen haben.
Mythos Posted August 4, 2009 Report Posted August 4, 2009 Hi, Um mögliche "Missverständnisse"/Fehlerquellen auszuschließen:Wo tritt das Problem auf? zB "Beim anwenden des Indikators mit diesen 2 Zeilen auf ein Symbol funktionierts, beim anwenden des ExpertAdvisor auf das gleiche Symbol funktioniert es nicht", wo im EA (und im Indikator) wurden die Daten verwendet? Tritt das Problem im live-Test oder beim Backtesten auf? (Wenn auf M1 getestet wird, werden nicht immer die M5 Daten geladen (und andere Symbole überhaupt nicht)) Wie titan schon schrieb ist es leider schwer so pauschal eine Fehlerquelle zu finden.
jananatali Posted August 5, 2009 Author Report Posted August 5, 2009 Hi, Um mögliche "Missverständnisse"/Fehlerquellen auszuschließen ... Es funktitioniert nur nicht im Expert Advisor, und zwar im Live-Test. Allgemein ausgedrückt: Wie bekomme ich im ExpertAdsisor mit den folgenden Zeilen, adxch5= iADX( "USDCHFFXF", 5, 13,PRICE_HIGH, MODE_MAIN, 0);adxeu1= iADX( "EURUSDFXF", 1, 13,PRICE_HIGH, MODE_MAIN, 0); korrekte Daten in die Variablen adxch5 und adxeu1, um sie weiter verarbeiten zu können.Muss ich irgendetwas etwas erst öffnen ..., was bei der Indikatorentwicklung nicht notwendig ist? Grüße JanaNatali
Krümel Posted August 5, 2009 Report Posted August 5, 2009 Folgendes würde ich überprüfen: Tritt das Problem auch auf, wenn Du 1. den Expert-Advisor auf nen M5-Chart ziehst ? Ich vermute, wie Mythos auch, dass die M5-Livedaten schlicht nicht geladen wurden. Da sich MT an einigen Stellen merkwürdig verhält, weil von den Entwicklern Performancebooster eingebaut, aber nicht sonderlich gut dokumentiert wurden, liegt der Verdacht recht nahe. Eventuell muss man dann M1 und M5 öffnen mit dem jeweiligen Wertepaar, damit die Daten tatsächlich auch rangeholt werden. 2. die beiden Zeilen verwendest statt Deine zwei: adxch5= iADX( "USDCHFFXF", 5, 13,PRICE_HIGH, MODE_MAIN, 1);adxeu1= iADX( "EURUSDFXF", 1, 13,PRICE_HIGH, MODE_MAIN, 1); ? Am besten schreib Dir die Werte immer in die Konsole.Print("adxch5 = " + adxch5 + ", adxeu1 ="+ adxeu1); 3. mit ner kürzeren Periodenzahl arbeitest (nur mal zum Testen) ? adxch5= iADX( "USDCHFFXF", 5, 2,PRICE_HIGH, MODE_MAIN, 1); adxeu1= iADX( "EURUSDFXF", 1, 2,PRICE_HIGH, MODE_MAIN, 1); ? 4. mit dem Wertepaar, welches im Chart geöffnet ist beide Male den ADX berechnen lässt ? adxch5= iADX( "EURUSDFXF", 5, 2,PRICE_HIGH, MODE_MAIN, 0); adxeu1= iADX( "EURUSDFXF", 1, 2,PRICE_HIGH, MODE_MAIN, 0); ? Dass es nur im Livetest auftritt bei EAs kann auch der "Performanceoptimierung" zu verdanken sein. Beim Backtest fällt das nicht auf, weil alle Daten lokal auf der Platte liegen und nichts zusätzlich rangeholt werden muss.
Mythos Posted August 5, 2009 Report Posted August 5, 2009 Mich wundert zwar ein bissl das es nur im EA auftritt, aber das kann wirklich an der undurchsichtigen Performancegeschichte liegen. Im Livemodus ladet er teils (meistens, vermutlich. immer ) nur die Daten von den TimeFrames und Symbolen, die gerade als Charts offen sind. Ich kann mir folgendes Problem vorstellen:Du hast früher USDCHF M5 als Chart offen gehabt (zur Analyse zB), dadurch sind die historischen Daten von USDCHF M5 vorhanden, der Indiaktor zeichnet ja nur in der Vergangenheit und hat damit zugriff auf die Daten (auch wenn der USDCHF M5 Chart nicht mehr offen ist). Im Live Modus läuft der EA vermutlich auf EURUSD M1 und der USDCHF M5 Chart ist nicht offen, dadurch ladet MT nur die EURUSD M1 Daten nach, nicht aber USDCHF M5 wodurch das Problem auftritt. Hast du schon mal probiert den Indikator am gleichen Chart wie den EA live laufen zu lassen? (Wenn meine Theorie stimmt, dann müsste in dem Fall entweder der EA funktionieren oder der Indi nicht...) Also erste Idee zur "Behebung": alle gewünschten Charts im Hintergrund öffnen, dadurch werden ständig die Daten nachgeladen. HTH
jananatali Posted August 5, 2009 Author Report Posted August 5, 2009 Danke - ich prüfe das:D.h. doch dann aber, obwohl in den oben zitierten Funktionsaufrufen nicht NULL sondern klar "USDCHFFXF" oder "EURUSDFXF" steht, muss ich immer die entsprechenden Charts geöffnet halten. Ist das so korrekt? GrüßeJanaNatali
Krümel Posted August 5, 2009 Report Posted August 5, 2009 D.h. doch dann aber, obwohl in den oben zitierten Funktionsaufrufen nicht NULL sondern klar "USDCHFFXF" oder "EURUSDFXF" steht, muss ich immer die entsprechenden Charts geöffnet halten. Ist das so korrekt?Ja.Die Ursache kann man meiner Meinung nach nur einkreisen durch Ausprobieren der verschiedenen Varianten. Wir wissen es ja auch nicht genau und können nur mutmaßen. Ferndiagnosen sind meist nicht so einfach und eher Stochern im Brühschlamm. Im Web hab ich auch bislang nichts gefunden zu Deinem Problem. Was mir aber noch eingefallen ist: sind beide Symbole bei Dir im Marktfenster sichtbar (Ansicht->Der Markt) ? Man kann da ja auch Symbols ausblenden, da werden dann z.B. bei Verwendung der MarketInfo-Funktion auch keine Daten mehr rangeholt, obwohl die Werte definitiv gehandelt werden. Das ist auch so ne "Performance-Optimierung" ^^.
Knochen Posted August 5, 2009 Report Posted August 5, 2009 Es funktitioniert nur nicht im Expert Advisor, und zwar im Live-Test. Also ich hatte bei mir schon ähnliche Probleme. Ich habe in meiner Entry-Strategie regelmäßig, also für jede neue Periode auf M5-Daten aufgesetzt. Bei geöffneter Position habe ich einen TrailingStop nachgezogen. Hier habe ich aber auf M1-Daten aufgesetzt. Ich hatte dadurch immer das Problem, dass bei der ersten initialen Berechnung des TrailingStop nach einer neu geöffneten Position nicht auf die aktuellen M1-Daten zugegriffen wurde, sondern auf veraltete (von vor ein paar Stunden. Diese wurden scheinbar erst beim "ersten Zugriff" nachgeladen. Erst nach mehreren Zugriffen auf diese M1-Daten waren die dann aktuell und der TrailingStop wurde richtig berechnet. Das ganze trat bei mir auch nur im Livebetrieb auf. Abhilfe:Bei mir hat es geholfen, für alle Timeframes, die ich (gelegentlich) irgendwo in der Strategie nutze, einen regelmäßigen Zugriff auf die Daten am Anfang der start-Funktion durchzuführen. Dieser sorgt dafür, dass die Daten immer aktuell sind. In meinem Beispiel sah das dann so aus:============================= if ((!IsTesting()) && (!IsOptimization())) { int iBarsM1 = iBars(Symbol(), PERIOD_M1); if (iLastBarsM1 != iBarsM1) { double dHigh = iHigh(Symbol(), PERIOD_M1, 1); double dLow = iLow(Symbol(), PERIOD_M1, 1); Print("iBarsM1=", iBarsM1, " Low=", dLow, " High=", dHigh); iLastBarsM1=iBarsM1; } }============================= Du müsstest dann evtl. den Zugriff auf deine Indikatordaten und nicht wie ich auf High und Low durchführen. (Die Print-Funktion kann man vermutlich weglassen, die war nur für mich zum Debuggen.)
Mythos Posted August 5, 2009 Report Posted August 5, 2009 D.h. doch dann aber, obwohl in den oben zitierten Funktionsaufrufen nicht NULL sondern klar "USDCHFFXF" oder "EURUSDFXF" steht, muss ich immer die entsprechenden Charts geöffnet halten. Ist das so korrekt? Ja. NULL heißt ja nur "auf dem aktuellen Chart". Die Entwickler haben hier bei der Performanceoptimierung scheinbar ein bissl was übersehen. Sicherheitshalber immer alle Symbole und TimeFrames die man braucht in einem Chart im Hintergrund offen halten, dann werden die Daten sicher geladen.
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now