OrderModify Error
Ich brauch mal wieder Hilfe. So weit klappt alles bei meinem EA aber er will auf Teufel kommt raus nicht den SL nachziehen. Ich hab dazu nochmal einen eigenen kleinen EA Programmiert um es besser zu verstehen aber ich verstehe nicht warum es ein Error gibt.
Code:
int LongTicket; |
Wenn ich mir deinen Code so ansehe, denke ich, bei dir gibt es noch ein wenig Verständnissprobleme (Grundlagen fehlen).
Gehen wir mal kurz durch: Code:
int start() Bedenke das dein Code bei JEDEM Tick ausgeführt wird. Vieles im Code ist nicht bei jedem Tick sinnvoll. Du solltest Bedingungen nutzen! Code:
int bs_array[4] = {1,2,3,4};
Code:
double ord = OrderSelect(LongTicket,SELECT_BY_TICKET);
Code:
if(OrderCloseTime() != 0 || LongTicket == 0)
Code:
if(OrderSelect(OrderTicket(),SELECT_BY_TICKET)==true)
|
Ich hab mir mal paar Anleitungen angeschaut und mal denn Code verbessert.
Code:
int LongTicket = 0; |
Bitte gründlich durchlesen, dann findest du auch den Fehler.
Manche Sachen habe ich schon in meinem vorherigen Post erwähnt. Diese hast du aber nicht korrigiert! Code:
double StopLossLevel; Code:
double StopLossLevel = Bid - StopLoss*Point; Code:
bool Ord = OrderSelect(LongTicket,SELECT_BY_TICKET);
Code:
if(OrderCloseTime() != 0 || LongTicket == 0) === === === === === === === === === === === === Code:
if(Volume[0]==1)
|
Ich verstehe das mit LongTicket noch nicht so ganz also LongTicket =0; ist ja falsch. Aber wie weise ich ihm denn einen Wert zu? Ich möchte ja genau dieses Ticket aufrufen.
Fangen wir mal ganz von vorne an mir geht es ja in erster Linie darum das nur 1 Order eröffnet wird. Ich hab jetzt gesehen das kann ich auch mit Code:
If(OrdersTotal()==0) So dann schaut er ob die Bedienung stimmt und ist so lange in einer schleife bis LongTicket größer als 0 ist also 1. Code:
if(Open[2] < Close[2] && Open[1] < Close[1] ) |
Zitat:
Code:
int LongTicket = 0; was du mit "LongTicket" machen musst (obwohl DU sie ja erstellt hast.). Der Grund, warum dein Code fehlerhaft ist, ist ja der, dass du "LongTicket" eben KEINEN WERT gibst. Einen echten Wert (eben eine ECHTE Ticketnummer) erhält deine Variable "LongTicket" in dieser Zeile: Code:
LongTicket = OrderSend(Symbol(),OP_BUY,1.0,Ask,0,StopLossLevel,0.0,"Buy Order"); Code:
bool Ord = OrderSelect(LongTicket,SELECT_BY_TICKET); Zitat:
Code:
LongTicket = OrderSend(Symbol(),OP_BUY,1.0,Ask,0,StopLossLevel,0.0,"Buy Order"); Deine Frage lässt leider wirklich darauf schließen, das der Code 1-1 von extern übernommen wurde, und du wirklich keine Ahnung davon hast, was da eingentlich passiert! Zitat:
Es nur auf eine Order zu beschränken ist ja nicht das Problem, welches wir hier die ganze Zeit durchgehen! Zitat:
Zitat:
|
Ach jetzt hab ich es verstanden. Nein ein bisschen Ahnung hab ich schon bin zwar noch Anfänger aber immerhin. :D
Also ja im Grunde möchte ich einfach meinen Stoploss angezogen bekommen. So das wenn er den Trade eingeht ich nicht auf feste Pips angewiesen bin wie mit dem TrailingStop sonder das es Variabel ist. Immer an der letzten Korrektur soll der SL gesetzt werden. So und jetzt zu dem Code Code:
double val; |
So ich bin jetzt ein großes Stück weitergekommen. Erstmal will ich verstehen wie ich ganz genau mit OrderModify umgehen muss deswegen hab ich das alles mal anders gestaltet. Mein Code sieht jetzt folgendermaßen aus:
Code:
void OnTick() 2018.03.11 23:27:57.088 2017.01.03 09:00:27 EaLong2.0 EURUSD,M15: unknown ticket 24 for OrderModify function 2018.03.11 23:27:57.088 2017.01.03 09:00:26 EaLong2.0 EURUSD,M15: Error 4108 2018.03.11 23:27:57.088 2017.01.03 09:00:26 EaLong2.0 EURUSD,M15: OrderModify error 4108 2018.03.11 23:27:57.088 2017.01.03 09:00:26 EaLong2.0 EURUSD,M15: unknown ticket 24 for OrderModify function 2018.03.11 23:27:57.088 2017.01.03 09:00:25 EaLong2.0 EURUSD,M15: Error 4108 Wo liegt jetzt genau der Fehler? |
Zitat:
Kann es sein, das du deinen Code vor dem Posten um einige Zeilen verringert hast? Falls nicht, dann hast du hier immer noch die selben Fehler: Code:
void OnTick()
|
Hey, also die Punkte habe ich verbessert jetzt funktioniert es auch besser nur kommt jetzt so bald eine Order offen ist der Fehler ERROR 1 obwohl der SL nachgezogen wird in einem Englischen Forum hat einer gemeint das passiert wenn der SL schon nachgezogen ist das Programm es aber auf die selbe ziehen will stimmt das? Sonst hab ich nicht wirklich was gefunden was genau der Fehler ist. Also der Code bis jetzt:
Code:
void OnTick() |
Das liegt daran, das du den Code bei jedem Tick ausführst und folgendes
Code:
if(Open[8]< Ask) |
Und wie frage ich die Aktualität ab? Also den Order mit OrderSelect auswählen dann mit dem OrderStopLoss den SL bestimmen und dann?
|
Kannst du zum Beispiel in deiner Funktion. Von
Code:
... Code:
... |
Ach Perfekt hat sehr gut funktioniert. So jetzt kommt zwar ab und zu Error 130 aber da weiß ich das es an einem zu engen SL liegt, jetzt müsste ich eine Art Abstand einbauen also quasi: Denn SL erst dann verändern wenn mindestens 20 Pips Abstand zu Ask sind. Gibt es da eine einfache Lösung?
|
Zitat:
Code:
if(Open[8]< Ask) Code:
if(Open[8]< Ask - 20*Point) ============================================== Hast du "Open[8]" eigentlich nur zu Testzwecken genommen, oder ist es wirklich so von dir gewollt? Schließlich war deine ursprüngliche Idee ja die Verbindung mit deinem modifizierten ZigZag-Indikator. |
Hey, danke funktioniert jetzt ohne Fehlermeldungen:) Ja richtig Open[8] war nur zu Testzwecken damit ich erst mal die ganze Mechanik dahinter verstehe also von OrderModify. Hab das jetzt mit dem ZigZag Indikator verbunden und der SL wird ohne Problem nachgezogen. Wenn wir sowieso gerade schreiben hätte ich noch eine kleine frage wie mache ich mein Code sicherer? Also was Fehlermeldungen angeht.
|
Zitat:
Punkt für deine Order. Wieso nimmst du nicht einfach das letzte Hoch / Tief? Wäre das nicht sinnvoller? Zitat:
So wie du z.B. die OrderFunktionen und deine "LongTicket"-Variable verwendet hast, können sich schnell viele Fehler einschleichen. Aber mal unabhängig davon, schau dir mal die Fehlercodes an, die "GetLastError()" so bringt. Anhand denen kannst du deinen Code sicherlich noch anpassen. Wenn man guten Code schreibt, so macht man ihn ebend auch vor "Fehlermeldungen" sicher. Auch müssen Grundlagen sitzen. Einmal eine Funktion falsch (zum falschen Zeitpunkt) aufrufen ist ein versehen. Dein Code lässt aber leider darauf schließen, das da Verständnissprobleme vorhanden sind, die beim Programmieren fatal sein können. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 11:28 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