Order Schließung && CheckOncePerBar
Guten Tag werte Programmierer/-innen
Seit einiger Zeit studiere ich Andrew R. Youngs Buch "EA Programming" und leider funktionierte schon sein erstes Besipiel eines EMA Crossover Systems nicht:( Ich stattete die Orders mit SL und TP aus, und nahm Teile raus dann lief es. Nun bin ich an meinem eigenen System dran und habe Probleme mit der Order Schließung. Weil er macht sie nicht. Bei der OrderSelect Funktion bekomme ich den Error: "unknow ticket 118 for OrderClose function" Doch bei OrderSelect müsste ich ja um die Ticket Nummer zu erhalten, die Order Richtung eingeben? Außerdem bekomme ich eine Warnung "return value of OrderSelect should be checked". Wäre dies return(true)? Oder Ticket? Code:
OrderSelect(BuyTicket,SELECT_BY_TICKET); Mein zweites Prob. ist dass ich nur einmal per Bar einen Check haben will, weil sonst eröffnet er 4-500 Positionen. Das nicht so toll. Dies ist auch aus Herr Youngs Buch. Allerdings meldet der Kompiler, dass es undeclarierte Variablen gibt, was aber nicht der Wahrheit entspricht. Dieses Problem hatte ich schonmal. Dann habe ich ein neues Programm aufgemacht, den ganzen Code rüber kopiert und alles hat funktioniert:confused: Code:
extern bool CheckOncePerBar == true; MfG und bestem Dank Mole696 |
Das erste Problem kann man nur lösen, wenn man weiss, wo die Variable BuyTicket herkommt.
Das zweite Problem löst, man ganz einfach: In den externen Variablen: int OldBar; Im start()-Teil: if (Time[0] != OldBar) { ... OldBar = Time[0]; } Da, wo die .... stehen kann nun der Check stehen, oder ein Funktionsaufruf dahin oder sonst etwas, was nur einmal pro Kerze aufgerufen werden soll. traderdoc |
Danke Dir für die rasche Antwort.
die Variable BuyTicket ist eine Globale Variable. Nun habe ich kurz den ganzen Code zwischen if(Time[0] != OldBar){ ... OldBar = Time[0]; } reingesetzt. Er eröffnet leider aber auch Positionen die in der Definition nicht vorhanden sind. Kurz zu den Regeln des Systems: Wenn der EMA 12 über der EMA 100 ist und der Preis über dem EMA12 war und zurückkommt unter die EMA 12 kommt und wieder nach oben durchgeht wird eine Buy Order eröffnet. Ich will eine Kerze mit Schlusskurs unter der EMA 12 und die darauffolgende über der EMA 12. Sobald die Kerze über der EMA 12 schließt soll eine Position eröffnet werden. Ich kopiere nun kurz den ganzen Code rein. Evtl. kannst es kurz in ein leeres Prorgamm ziehen oder mir sagen ob ich das so richtig gemacht hab? Habe nun allerdings noch SL und TP drinnen, soll aber eigentlich durch close unter der EMA 12 beendet werden. Z.B. am 1. August wäre da im DAX in short Richtung 150 Pkt. drinnen gewesen auf M5. Code:
extern double FixedLotSize = 1; Mole696 |
Also, durch die Handelslogik hangele ich mich jetzt nicht durch.
Definitiv wird die Abfrage if (Time[0] != Oldbar) nur einmal nach einem Kerzenwechsel durchlaufen. Aber bereits bei der BuyStopLoss-Abrechnung (und folgende) würde das Programm aussteigen, weil Du zum Kurs einen Pipwert addierst oder subtrahierts. Das führt unweigerlich zu einen Invalid StopLoss-Fehler. Desweiteren steht die Zeile OrderSelect(BuyTicket,SELECT_BY_TICKET); immer dann in der Luft, wenn nicht gerade eine Order gesendet wurde und das sollte die absolute Mehrzahl sein. traderdoc |
Is auch nicht so tragisch. Hab eben noch ein MQL4 Tutorial gefunden und werde dies mal durcharbeiten um mehr Erfahrung zu sammeln.
BuyStopLoss hat jedoch bisher immer wunderbar funktioniert. Nur mit der OrderSelect Funktion ist es nun so, dass er manche Positionen einfach schließt. Doch das mit dem Kerzenwechsel funktioniert. Mfg Mole696 |
Wenn das mit dem BuyStopLoss immer funktioniert, dann muß irgendwo ein Zwischenschritt sein, der die Pipzahl der externen Variablen in eine Dezimalzahl wandelt, sonst kann das nicht gehen!
traderdoc |
Alle Zeitangaben in WEZ +2. Es ist jetzt 19:26 Uhr. |
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum