|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Hallo, lieber next user,
bin in den vergangene Stunden tatsächlich nochmals ALLES durchgegangen, habe den Code entsprechend den aktuellen Gegebenheiten ergänzt und noch unverstandene Details markiert (red). Mit nachfolgendem Resultat: Code:
int orderTicket1 = 0; int orderTicket2 = 0; void ChekTicket(int ticket) // mein Versuch == ohne error // ???? //void OnTick() // deaktiviert, da error: 'OnTick' - function already defined and has body { if(OrderSelect(ticket,SELECT_BY_TICKET)== true) // meine Ergänzug // ???? if(orderTicket1) updateSL(orderTicket1); if(orderTicket2) updateSL(orderTicket2); if(orderTicket1 && orderTicket2) { if(OrderSelect(orderTicket2,SELECT_BY_TICKET,MODE_HISTORY)) { if(OrderSelect(orderTicket1,SELECT_BY_TICKET)) { if(OrderType() == OP_BUY) { if(!OrderClose(orderTicket1,OrderLots(),Bid,3)) Print("Order konnte nicht geschlossen werden, weil: ", GetLastError()); else Print("BIN ZU !!!"); } else if (OrderType() == OP_SELL) { if(!OrderClose(orderTicket1,OrderLots(),Ask,3)) Print("Order konnte nicht geschlossen werden, weil: ", GetLastError()); else Print("BIN ZU !!!"); } orderTicket1 = 0; orderTicket2 = 0; } } } } void updateSL(int ticket) { ResetLastError(); if(OrderSelect(ticket,SELECT_BY_TICKET)) { if(OrderType() == OP_BUY && (openOrders == 1 || openOrders == 2)) { if(Bid - OrderOpenPrice() > Trail_Target_1 *100 * Point) { if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue)) Print("Error setting Buy trailing stop: ", GetLastError()); } } } else if(OrderType() == OP_SELL && (openOrders == 1 || openOrders == 2)) { if(OrderOpenPrice() - Ask > Trail_Target_1 *100 * Point) { if(OrderStopLoss() > Ask + TSL || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TSL, OrderTakeProfit(), Blue)) Print("Error setting Sell trailing stop: ", GetLastError()); } } } } } Dennoch gibt es sicher 2 - 3 "Ungereimtheiten" (meine Ergänzungen), die geprüft und ggf. bereinigt werden sollten. In der Hoffnung auf Deine nochmaligen Denkanstöße der ungeduldige, spannungsgeladene piptrade PS.: Und wieder warst Du schneller ! Dieses mal habe ich mir Deinen post jedoch schon angesehen und die Ergänzungen bereits integriert. Ich bin begeistert ! Darüber hinaus ist es einfach "Spitze", DASS Du und WIE Du die einzelnen Details "auseinandernimmst" und erläuternd darauf eingehst. Sicher werde ich noch einige Zeit brauchen, bis jede Erklärung auch bei mir in "Fleisch und Blut" übergegangen ist, dennoch habe ich schon bis hier her eine Menge dazugelernt. Wenn jetzt noch die letzten kleinen Unsicherheiten ausgeräumt werden könnten, wäre die Welt endlich wieder in Ordnung. DANKE für Deinen tollen Einsatz ! pt |
|
|||
Zitat:
eben der OnTick-Angabe übernommen. Ich dachte, dir wäre klar, wie ich es gemeint habe. "OnTick()" ist ja eine "hauseigene" Funktion eines EA's. Mit meinem Code hatte ich nur angegeben, das der Code (in meinem OnTick) in die Funktion "OnTick gehört". Also kurz nochmal:
|
|
|||
Lieber next user, Hallo !
Da hast Du absolut recht; - dieses "OnTick()" wurde tatsächlich, ohne grassartig nachzudenken, übernommen. Damit war natürlich ein "OnTick()" zuviel im Code und mußte als "error" ausgewiesen werden. Sorry, mein Fehler. Was die Unterscheidung zwischen "hauseigenen" und "persönlichen" Haupt-Funktionen eines EA betrifft, bin ich mir der Differenzierung bewußt. Dennoch habe ich auch hierzu nachfolgende Frage: Nach Initialisierung und Deklaration von Parametern, nach "void OnInit()" und "void DeInit()" beginnt irgendwann auch der Abschnitt "void OnTick()". So der "hauseigene" Funktionsablauf. Alle in diesen letzten 2 Klammern stehenden Operationen werden also per Tick durchlaufen. Innerhalb meines Codes wurde die "OnTick()"-Funktion zwar richtig angelegt, fälschlicher Weise aber relativ zeitig wieder geschlossen. Es folgten weitere abgegrenzte Bereiche mit eigens kreierten, persönlichen "voids", die weitere Funktionen im EA abdecken. Auch diese Bereiche werden per Tick durchlaufen und funktionieren tadellos. So wurde das Auslösen der "Trail_SL-Funktion" in einem Abschnitt "void TakeProfit()" untergebracht und wurde dort auch ohne Beanstandung ausgeführt !!! So weit zur Vorgeschichte. Jetzt waren die in diesem Beitrag erarbeiteten Code-Bereiche A) "Schließen der 1. Position" und B) "updateSL" in den Gesamt-Code zu integrieren. Bereich A): wurde nun unmittelbar an die "Trail_SL-Funktion" angehängt und "void TakeProfit()" auch erst hier per Klammer geschlossen. Bereich B): hier funktionierte dieses Anhängen nicht; - hier sollte "Global deklariert" werden. Dem entsprechend habe ich die Funktion "updateSL" unmittelbar hinter der "OnTick()"-Funktion eingeordnet - und siehe da - keine errors ! Allerdings verblaßte diese erste Freude, als ich den ersten Test durchführte ! Ich bin exakt auf dem Stand von vor 5 Tagen. Irgend etwas scheint immer noch nicht zu stimmen. Hier die Demonstration des "Eibaus", einschl. ausführlichen Code-Details: Code:
void OnTick() { // ... //--- calculate open orders by current symbol --> and close by TP if (CalculateCurrentOrders(Symbol()) == 0) CheckForOpen(); //--- calculate open orders --> and opening a hedging position if (CalculateCurrentOrders(Symbol()) != 0) CheckHedgeOpen(); CheckTakeProfit(); } //--------------------------------------------------------------------------- void updateSL(int ticket) { ResetLastError(); double TSL = Trail_SL *100 *Point; if(OrderSelect(ticket,SELECT_BY_TICKET)) { if(OrderType() == OP_BUY && (openOrders == 1 || openOrders == 2)) { if(Bid - OrderOpenPrice() > Trail_Target_1 *100 * Point) { if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue)) Print("Error setting Buy trailing stop: ", GetLastError()); } } } else if(OrderType() == OP_SELL && (openOrders == 1 || openOrders == 2)) { if(OrderOpenPrice() - Ask > Trail_Target_1 *100 * Point) { if(OrderStopLoss() > Ask + TSL || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TSL, OrderTakeProfit(), Blue)) Print("Error setting Sell trailing stop: ", GetLastError()); } } } } } //------------------- //--- mehrere eigene "voids" //------------------- void CheckTakeProfit(); { //--- Bereich TakeProfit //+==================================================================+ //| Check for Trailing_StopLoss Conditions | //+==================================================================+ int orderTicket1 = 0; int orderTicket2 = 0; double TSL = Trail_SL *100 *Point; //--- Trailing_SL for order type BUY --------------------------------+ if (OrderType() == OP_BUY && (openOrders == 1 || openOrders == 2)) { if (Bid - OrderOpenPrice() > Trail_Target_1 *100 * Point) { if (OrderStopLoss() == 0 || OrderStopLoss() < Bid - TSL) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue)) Print("Error setting Buy trailing stop: ", GetLastError()); } } } //--- Trailing_SL for order type SELL ---------------------------------+ if(OrderType() == OP_SELL && (openOrders == 1 || openOrders == 2)) { if (OrderOpenPrice() - Ask > Trail_Target_1 *100 *Point) { if (OrderStopLoss() == 0 || OrderStopLoss() > Ask + TSL) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TSL, OrderTakeProfit(), Blue)) Print("Error setting Sell trailing stop: ", GetLastError()); } } } //--- Schließen Ticket1 ------------------------- // völlig NEU (next user) if(orderTicket1) updateSL(orderTicket1); if(orderTicket2) updateSL(orderTicket2); if(orderTicket1 && orderTicket2) { if(OrderSelect(orderTicket2,SELECT_BY_TICKET,MODE_HISTORY)) { if(OrderSelect(orderTicket1,SELECT_BY_TICKET)) { if(OrderType() == OP_BUY) { if(!OrderClose(orderTicket1,OrderLots(),Bid,3)) Print("Order konnte nicht geschlossen werden, weil: ", GetLastError()); else Print("BIN ZU !!!"); } else if (OrderType() == OP_SELL) { if(!OrderClose(orderTicket1,OrderLots(),Ask,3)) Print("Order konnte nicht geschlossen werden, weil: ", GetLastError()); else Print("BIN ZU !!!"); } orderTicket1 = 0; orderTicket2 = 0; } } } } } // diese Klammer schließt nun den gesamten TP-Bereich und entdeckst den verhängnisvollen "Haken" ? - Ich würde mich riesig freuen - und auch gegenüber den anderen usern wäre es ein "runder" Beitrag. Und wieder spannungsgeladen und ungeduldig - mit ganz lb. Grüße pt. PS.: Die Tests dauern ewig, da die 2. Pos. entweder gar nicht erreicht oder ergebnislos schon durch eine 3. Pos. abgelöst wird. Somit "SORRY", dass ich mich nicht schneller melden konnte. |
|
|||
Oh oh, ich glaub da ist bischen was an Verständnis verrutscht
Gehen wirs nochmal durch: Code:
void OnTick() { //--- calculate open orders by current symbol --> and close by TP if(CalculateCurrentOrders(Symbol()) == 0) CheckForOpen(); //--- calculate open orders --> and opening a hedging position if(CalculateCurrentOrders(Symbol()) != 0) CheckHedgeOpen(); CheckTakeProfit(); } Die dritte "CheckTakeProfit()" muss ich jetzt aber etwas auseinandernehmen: Code:
void CheckTakeProfit(); { === === === === === === === === === === === === Code:
double TSL = Trail_SL *100 *Point; === === === === === === === === === === === === Code:
//--- Trailing_SL for order type BUY --------------------------------+ if (OrderType() == OP_BUY && (openOrders == 1 || openOrders == 2)) { if (Bid - OrderOpenPrice() > Trail_Target_1 *100 * Point) { if (OrderStopLoss() == 0 || OrderStopLoss() < Bid - TSL) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue)) Print("Error setting Buy trailing stop: ", GetLastError()); } } } //--- Trailing_SL for order type SELL ---------------------------------+ if(OrderType() == OP_SELL && (openOrders == 1 || openOrders == 2)) { if (OrderOpenPrice() - Ask > Trail_Target_1 *100 *Point) { if (OrderStopLoss() == 0 || OrderStopLoss() > Ask + TSL) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TSL, OrderTakeProfit(), Blue)) Print("Error setting Sell trailing stop: ", GetLastError()); } } }
=== === === === === === === === === === === === Code:
//--- Schließen Ticket1 ------------------------- // völlig NEU (next user) if(orderTicket1) updateSL(orderTicket1); if(orderTicket2) updateSL(orderTicket2); if(orderTicket1 && orderTicket2) { if(OrderSelect(orderTicket2,SELECT_BY_TICKET,MODE_HISTORY)) { if(OrderSelect(orderTicket1,SELECT_BY_TICKET)) { if(OrderType() == OP_BUY) { if(!OrderClose(orderTicket1,OrderLots(),Bid,3)) Print("Order konnte nicht geschlossen werden, weil: ", GetLastError()); else Print("BIN ZU !!!"); } else if (OrderType() == OP_SELL) { if(!OrderClose(orderTicket1,OrderLots(),Ask,3)) Print("Order konnte nicht geschlossen werden, weil: ", GetLastError()); else Print("BIN ZU !!!"); } orderTicket1 = 0; orderTicket2 = 0; } } }
=== === === === === === === === === === === === Code:
void updateSL(int ticket) { ResetLastError(); double TSL = Trail_SL *100 *Point; if(OrderSelect(ticket,SELECT_BY_TICKET)) { if(OrderType() == OP_BUY && (openOrders == 1 || openOrders == 2)) { if(Bid - OrderOpenPrice() > Trail_Target_1 *100 * Point) { if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue)) Print("Error setting Buy trailing stop: ", GetLastError()); } } } else if(OrderType() == OP_SELL && (openOrders == 1 || openOrders == 2)) { if(OrderOpenPrice() - Ask > Trail_Target_1 *100 * Point) { if(OrderStopLoss() > Ask + TSL || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TSL, OrderTakeProfit(), Blue)) Print("Error setting Sell trailing stop: ", GetLastError()); } } } } }
Eigentlich müsste dein Code ungefähr so aussehen: Code:
// OBEN int orderTicket1 = 0; int orderTicket2 = 0; double TSL = Trail_SL *100 *Point; ... // In OnTick() void OnTick() { //--- calculate open orders by current symbol --> and close by TP if(CalculateCurrentOrders(Symbol()) == 0) CheckForOpen(); //--- calculate open orders --> and opening a hedging position if(CalculateCurrentOrders(Symbol()) != 0) CheckHedgeOpen(); 1 if(orderTicket1) updateSL(orderTicket1); 2 if(orderTicket2) updateSL(orderTicket2); 3 if(orderTicket1 && orderTicket2) { if(OrderSelect(orderTicket2,SELECT_BY_TICKET,MODE_HISTORY)) { if(OrderSelect(orderTicket1,SELECT_BY_TICKET)) { if(OrderType() == OP_BUY) { if(!OrderClose(orderTicket1,OrderLots(),Bid,3)) Print("Order konnte nicht geschlossen werden, weil: ", GetLastError()); else Print("BIN ZU !!!"); } else if (OrderType() == OP_SELL) { if(!OrderClose(orderTicket1,OrderLots(),Ask,3)) Print("Order konnte nicht geschlossen werden, weil: ", GetLastError()); else Print("BIN ZU !!!"); } orderTicket1 = 0; orderTicket2 = 0; } } } } // Die Funktion "updateSL()" außerhalb setzen. // Der Code & die ganze Funktion "CheckTakeProfit()" sind unnötig. void updateSL(int ticket) { ResetLastError(); if(OrderSelect(ticket,SELECT_BY_TICKET)) { if(OrderType() == OP_BUY) { if(Bid - OrderOpenPrice() > Trail_Target *100 * Point) { if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue)) Print("Error setting Buy trailing stop: ", GetLastError()); } } } else if(OrderType() == OP_SELL) { if(OrderOpenPrice() - Ask > Trail_Target *100 * Point) { if(OrderStopLoss() > Ask + TSL || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TSL, OrderTakeProfit(), Blue)) Print("Error setting Sell trailing stop: ", GetLastError()); } } } } }
=== === === === === === === === === === === === Code:
} // diese Klammer schließt nun den gesamten TP-Bereich |
|
|||
Lieber next user, Hallo!
Es ist einfach nur toll, dass Du mich nicht "auf die Folter spannst", sondern mir so schnell geantwortet hast. DANKE. Dem entsprechend bin ich jedes Wort, jede Silbe und manchesmal sogar jeden Buchstaben durchgegangen und habe jeden Logikansatz nachvollzogen. Deine Argumente sind absolut überzeugend ! Das, was zwischenzeitlich etwas durcheinandergeraten war, sollte jetzt wieder geradegerückt sein und in den richtigen Bahnen verlaufen. Fast auf Anhieb "NULL error" !!! Schon DAS ist richtig gut ! ... Und wenn dann noch die Live-Tests am Mo. halbwegs klappen - ohhhh, dass wäre ... ! Lieber next user; - zwischendurch nochmals DANKE; - ich melde mich ! LG. pt. PS.: ... und wenn dann der in diesem Thema ursprünglich gewünschte Part tatsächlich funktionsfähig ist, gebe ich mehr als nur gern, meine Empfehlung weiter ! Allein das "Hin und Her" der Diskussionen war lehrreich und hilft zumindest mir ein großes Stück weiter. |
|
|||||||||
Lieber next user, nochmals Hallo!
Was in den letzten Tagen relativ schnell abgearbeitet wurde, kann ich heute "Revue passieren" lassen: Zitat 1: Zitat:
Zitat 2: Zitat:
Zitat 3: Zitat:
Zitat 4: Zitat:
Zitat 5: Zitat:
Zitat 6: Zitat:
Zitat 7: Zitat:
Zitat 8: Zitat:
Die Funktion "CheckTakeProfit()" ist aber dennoch notwendig für eine 3., 4., 5. und 6. Order (DAX). Diese TPs werden "step by step" verkleinert, um eine 7. oder 8. Position möglichst auszuschließen. Hierzu wäre allerdings eine Strategie-Erläuterung sinnvoll, um das Gesamtanliegen des EA zu verstehen. 2 Anhänge sollen hierzu wenigstens eine kleinen Einblick vermitteln. (Bei näherem Interesse bitte einfach nachfragen.) And the last: Zitat:
So weit, so gut. Und wenn der gesamte Code dann etwas "aufgeräumt" und strukturiert ist, kann er sogar ästhetisch gut aussehen und "das Auge erfreuen"! Dieses kleine "Zwischenspiel" war ich noch schuldig. Auch ein kleiner Einblick zur Wirkungsweise des EA und in die Performance gehören sicher dazu (siehe Anhänge). Ansonsten werde ich mich am Mo. melden, um Erfolg oder Misserfolg meiner Tests zu verkünden. Bis dahin, LG. pt. |
|
|||
Hallo an alle user, die das Thema begleiten,
und natürlich ein Hallo an next user ! Mit Bangen hatte ich dem Moment entgegengesehen, der nun über Erfolg oder Misserfolg entscheiden würde: Die ersten Tradingstunden der neuen Woche. Und um nicht lange drumherum zu reden, - der Code funktioniert NICHT ! Was könnte jetzt noch falsch sein ? "Sehe ich den Wald vor lauter Bäumen" nicht mehr? Hier nochmals der vollständige Code: Code:
int OnInit() { //--- calculate open orders by current symbol --> and close by TP if (CalculateCurrentOrders(Symbol()) == 0) CheckForOpen(); //--- calculate open orders --> and opening a hedging position if (CalculateCurrentOrders(Symbol()) != 0) CheckHedgeOpen(); //+==================================================================+ //| Check for Trailing_StopLoss Conditions | //+==================================================================+ int orderTicket1 = 0; int orderTicket2 = 0; //--- Nachträgliches Schließen Ticket1 (Pos.1) ---------------------+ // völlig NEU (next user) und innerhalb der "void OnTick" if (orderTicket1) TrailStopLoss(orderTicket1); if (orderTicket2) TrailStopLoss(orderTicket2); if(orderTicket1 && orderTicket2) { if(OrderSelect(orderTicket2,SELECT_BY_TICKET,MODE_HISTORY)) { if(OrderSelect(orderTicket1,SELECT_BY_TICKET)) { if(OrderType() == OP_BUY) { if(!OrderClose(orderTicket1,OrderLots(),Bid,3)) Print("Order konnte nicht geschlossen werden, weil: ", GetLastError()); else Print("BIN ZU !!!"); } else if (OrderType() == OP_SELL) { if(!OrderClose(orderTicket1,OrderLots(),Ask,3)) Print("Order konnte nicht geschlossen werden, weil: ", GetLastError()); else Print("BIN ZU !!!"); } orderTicket1 = 0; orderTicket2 = 0; } } } } //--- Trailing SL - openOrder ----------------------------------------+ // Diese Funktion "TrailStopLoss()" außerhalb "void OnTick()" setzen void TrailStopLoss(int ticket) { ResetLastError(); if(OrderSelect(ticket,SELECT_BY_TICKET)) { if(OrderType() == OP_BUY && (openOrders == 1 || openOrders == 2)) { if(Bid - OrderOpenPrice() > Trail_Target_1 *100 * Point) { if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue)) return; Print("Error setting Buy trailing stop: ", GetLastError()); } } } else if(OrderType() == OP_SELL && (openOrders == 1 || openOrders == 2)) { if(OrderOpenPrice() - Ask > Trail_Target_1 *100 * Point) { if(OrderStopLoss() > Ask + TSL || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TSL, OrderTakeProfit(), Blue)) return; Print("Error setting Sell trailing stop: ", GetLastError()); } } } } } sofort danach Pos.1 und Pos. 2 bei eben diesen + 9 Punkten (abzüglich Spread), - ohne sichtlichen Grund. Auch in der 1. Position wird nun gar nicht mehr getrailt ! Schade, eine ganze Woche Arbeit, ohne den gewünschten Erfolg. Ich habe zwar vieles dazugelernt und kann die gewollten Schritte auch nchvollziehen, dennoch liegen ein oder mehrere Fehler vor ! In meinem ursrünglichen Code hatte wenigstens die Pos.1 tadellos funktioniert. Ursprünglich entstand das o.a. Problem nur bei der Pos. 2, hatte ich (CloseAllOrder()" eingefügt. Ließ ich "CloserAllOrder()" weg, funktionierte auch hier das Trailing hervorragend; - allerdings wurde die Pos. 1 dann nicht geschlossen. Soweit zur Erinnerung. Was nun ??? Große Trauer, - ich war soooo zuversichtlich ! LG. pt. |
|
|||
Ich hoffe, du hast den Code auch WIRKLICH in die entsprechenden Funktionen gepackt! Dein geposteter Code liegt nähmlich (obere Hälfte) in "OnInit()"!
Zitat:
Falls du es nicht schaffst, den Zeitpunkt & Codestelle beim Schließen der 2 Order zu ermitteln, dann poste mal den ganzen, relevanten Code und nicht nur Passagen. Dann kann ich auch viel wahrscheinlicher den Fehler sehen! |
|
|||
Hallo next user,
lieb von Dir, dass Du "am Ball bleibst". Kann morgen früh in aller Ruhe Deine Hinweise durchgehen. In diesem Zusammenhang werde ich auch versuchen einen Gesamtüberblick des EA zusammenzustellen, damit Fehlerstellen leichter erkennbar werden. Ich hoffe nur, wir (Du) finden den "Haken. Bis dahin LG pt. |
|
|||
So, da bin ich wieder !
... und das mit ersten Erkenntnissen : Hallo, lieber next user, habe mir jetzt nochmals die Zeit genommen, alles in Ruhe zu überprüfen. Die erste Erkenntnis war nun, dass der von Dir gewählte Begriff "updateSL" (unter "void OnTick()" die ganze Anglegenheit tatsächlich am besten trifft. Dieses update ist ja wichtig, um a) die Positionen 1 + 2 ständig zu "scannen", b) zu registrieren, dass ggf. eine der beiden Tickets geschlossen wurde und c) um dann nachträglich die Pos. 1 zu schließen. Bis dahin ist in Punkto "Block 1" alles recht gut verständlich. (Ohne den 2. "Block" "void updateSL(int ticket)" wird allerdings "updateSL" beim Kompellieren als error ausgewiesen.) Somit muß dieses "updateSL" also in einem 2. "Block" = "void updateSL(int ticket)" nochmals aufgegriffen werden und - siehe da, - das o.a. error verschwindet, da es jetzt erkannt wird. Auch bis dahin ist alles halbwegs verständlich. Nicht ganz verständlich hingegen ist, was der 2. "Block" bewirkt. Theoretisch sind jetzt alle Orders geschlossen und es sollte (irgendwann) eine neue, erste Order, gem. Strategie-Konditionen, eröffnet werden. So z.B. eine BUY-Pos.. Auch das ist noch OK. Damit gibt es jetzt wieder ein Ticket in der History (wie eigentlich immer), ein zweites Ticket ist geöffnet. Dies wiederum wird unter OrderSelect erkannt, was zum Schließen der Position führen müßte. Kaum wäre die neue 1. Pos. geöffnet, würde sie auch schon wieder gechlossen werden ? Wo ist hier der Gedankenfehler ? - oder ist der Gedanke ggf. gar nicht so falsch ? Und ein zweiter Gedanke: Angenommen, die o.a. 1. Pos. verbleibt im Markt, sie wird selektiert, es wird festgestellt BUY oder SELL, so würde bei Erreichen des Trail_Targets der Trail_SL übergeben werden. Weiterhin angenommen, die 1. Pos. erreicht ihr Trail_Target NICHT und rutscht statt dessen in die Verlustzone, ---> jetzt wird gehedged und eine 2. Pos. zusätzlich geöffnet. Somit gibt es jetzt 2 geöffnete Tickets, wobei nur die 2. Pos. den Trail_SL erhalten soll. Da im Code aber nur nach Ticket bzw. Tickets und anschließend nur nach BUY bzw. SELL unterschieden wird, müßte doch wenigstens auch die "openOrders == 2" angesprochen werden ? - Oder ? Wie sonst kann der Trail_SL an die richtige Pos. übergeben werden ? Erst einmal bis zu diesem Punkt. Vielleicht kannst Du meine ersten Gedanken nochmals prüfen und sollten sie Fehler aufweisen, korrigieren. LG. pt. |
Lesezeichen |
Stichworte |
alle order schließen, closeallorders, mql4, programmierung, programmierung metatrader, programmierung mql4, trailingstop |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|