Zitat:
In deiner 1-zeiligen Erwähnung hast du daneben ein Kommentar ("// nicht notwendig (next user)!!!") stehen. Mein, einige Posts zurückliegendes "nicht nötig" bezog sich auf deinen geposteten Beitrag HIER !!! Alles, was du DORT in der Funktion "CheckTakeProfit()" stehen hattest, war unnötig. Der Inhalt deiner Funktion "CheckTakeProfit()", wie du ihn jetzt aber wenige Posts zurück gepostet hast, war bei dem verlinkten Beitrag doch garnicht drinne. Deshalb sagte ich "unnötig"! === === === === === === === === === === === === Zitat:
Was ich sagte war, das deine beiden if-Abfragen sich nur um den Wert deiner Variablen "openOrders" unterscheidet. Diese Abfragen läufst du in ner Schleife durch. Bei einer Order ("openOrders" == 1) kommt der erste if-Block, soweit ok. Sobald es aber mindestens 2 Orders sind ("openOrders" == 2), bearbeitest du in der Schleife AUCH DIE ERSTE Order mit dem zweiten if-Block, ist das so gewollt (ich denke nicht)? === === === === === === === === === === === === Zitat:
IMMER Inhalt entsprechend dem Variablennamen zu erwarten. Und auch deine Kombination (Berechnung, Glättung) der beiden kenne ich nicht. Auch da kann ein "außenstehender" theoretisch alles erwarten, wenn ich an so manchen Code denke den ich schon gesehen habe... :D Daher meine allgemeine "Vermutung"! Außerdem habe ich nicht Zitat:
Zitat:
Zitat:
Was wird denn da an "OrderStopLoss()" "übergeben"? Zitat:
Und was meinst du mit "OrderStopLoss()" erkannt? Erfolgloser Aufruf? === === === === === === === === === === === === Zitat:
ich es richtig gesehen habe. === === === === === === === === === === === === Zitat:
Kommt etwas spät, aber die Print-Ausgaben siehst du im Terminal im Reiter "Experten". Ich persönlich setze immer eine MessageBox ein, die dann plötzlich aufplopt und ich sofort bescheid weiß. === === === === === === === === === === === === Kann sein, das ich dich da bei paar Punkten falsch verstanden habe, aber es ist gleich 6 und ich bin müde. Evtl. Fehler bei meinen Zeilen oben sind dann wohl auf den bereits aktiven "Sparmodus" meines Gehirns zurückzuführen... hehe. |
Hallo, lieber next user,
Danke für Deine Zeit und Danke für Deine Hinweise. Ich hoffe Du konntest Dich zwischenzeitlich etwas erholen. Nun aber zu Deinem letzten Beitrag: "nötig oder unnötig" zu "ChechTakeProfit()", sollte nicht das Thema sein. === Bei "openOrders == 1" bzw. "openOrders == 2" wird es schon interessanter: Zitat:
Danke für den Hinweis. Somit hast Du natürlich recht; - beide Blöcke sollen eigentlich getrennt voneinander bearbeitet werden. "openOrders == 1" mit den dortigen Konditionen und "openOrders == 2" mit den Konditionen, die dann dort aufzuführen wären. (Lediglich zur Vereinfachung des Codes haben wir momentan die Konditionen für "openOrders == 1" bzw. "openOrders == 2" gleichgesetzt.) === "Trail_Target_2 + SMA7_ATR5_1" bzw. " *100 * Point", können wir uns wahrscheinlich "schenken". Nunmehr wissen wir beide, was gemeint war. (Unabhängig davon weiß ich nicht, wie ich "SMA7_ATR5_1" besser erklären soll. Zudem hat diese variierende Größe wenig Code-Relevanz.) === Nun aber zum "Trail_SL()" bzw. dem "updateSL()": Um wieder einheitliche Begriffe zu verwenden, ist es sicher sinnvoll, zu den Ursprüngen zurückzukehren. So sollte unter "void OnTick()" das (nachträgliche) Schließen der Position 1 erfolgen. Hier wurde der Begriff "updateSL" verwendet und der diesbezügliche Code als "Block 1" bezeichnet: Code:
void OnTick() { Separat bzw. parallel dazu müssen natürlich erst einmal die Positionen 1 + 2 eröffnet werden. Dies sollte dann außerhalb der "void OnTick()" erfolgen ("Block 2") und "SO" aussehen: Code:
void TrailStopLoss(int ticket) "Alle sprechen deutsch, doch keiner versteht mich !" - Oder vielleicht doch ? Ich wäre überaus dankbar, wenn dem so sein sollte !!! Wenn allerdings Korrekturen notwendig sind, würde ich mich über die entsprechenden Hinweise freuen. Anbei herzlichen Dank für Deine Anmerkungen zu den "Print-Ausgaben". Ansonsten hoffe ich, dass Du Dich ein wenig erholt hast und warte `mal wieder voller Spannung auf Dein nächstes Statement. Bis dahin mit LG. pt. |
Zitat:
Kommentar "// nicht notwendig (next_user) !!!" stehen, was ich lediglich richtig stellen wollte... === === === === === === === === === === === === Zitat:
beiden Variablen "orderTicket1 / 2" nutzen. === === === === === === === === === === === === Zitat:
Zum zweiten Teil, du hast es ja ausreichend gut erklärt, das war ja nicht das Problem. Ich habe ja im vorherigen Post erklärt, warum ich es TROZDEM als mögliche Fehlerquelle angesprochen hatte, eben weil ich schon viele "gut benannte" Variablen anderer gesehen habe, die sich dann komplett anders herausstellten. === === === === === === === === === === === === Zitat:
=== === === === === === === === === === === === Zitat:
Zum zweiten Satz, auch hier war eine Übereinstimmung ja gegeben. Lediglich deine beiden Codeblöcke müsstest du "kommunizieren" lassen. In Block 1 nutzt du "updateSL()" in diesem, zweiten Block nennst du die Funktion "TrailStopLoss()" ;) === === === === === === === === === === === === Zitat:
Schauen wir mal, wenn das nächste mal der Fehler auftaucht, welche deiner Print-Ausgaben dabei aktiv werden. So sollten wir dann schnell zur Ursache kommen... |
Toll, Thanks !
Ich melde mich !!! LG. pt. |
So, nun endlich meine Antwort:
Lieber next user, Zitat:
Und "Yes !" Inhaltlich völlig richtig und auch mein Ansinnen ! ...:rolleyes: Vorschlag: Als erstes sollten wir uns vielleicht wieder auf einen einheitlichen Sprachgebrauch einigen und dabei die einzelnen Code-Bezeichnungen ggf. etwas eindeutiger formulieren: A) Block_A (ehemals "Block 1" = neue Benennung!) = der, welcher unter "void OnTick()" zugeordnet ist, welcher die Ticket-Abfrage bewerkstelligen und die openOrder == 1 (Pos.1) schließen soll. Code:
void OnTick() { Code:
void CheckForOpen() { // Formulierung entsprechend üblicher Codes Code:
void CheckHedgeOpen() { Und wenn wir dieses "Ticket_2" tatsächlich nicht brauchen, könnte im "Block_A" ja auch die "Abfrage in der History" entfallen. Ob all diese Gedanken richtig sind, weiß ich nicht, - dennoch erscheinen sie mir logisch ! Eine zweite Idee (Deine Frage: Wo wird denn die Pos.1 eröffnet?) könnte darin bestehen, dass man genau diese EröffnungsOrder modifiziert, indem eine "OrderModify ..." ergänzt wird, die schon einen SL enthält. (Auslöser: openOrders == 2 oder fix, die Hedge-Grenze 1 Pkt. überschreitend) - In diesem Falle könnten wir sogar auf die gesamte "Ticket-Geschichte" verzichten ! Die Vorteile hier : 1.) Verlustbegrenzung = wird verbessert 2.) Die 3. Position (jetzt openOrder == 2 !!!) würde nicht mit 1.1 lot sondern wiederum mit 0.4 lot ausgelöst werden, was dann die Gesamt-Positionsgröße der Tradefolge reduziert und damit ggf. auch eine Pos.7 (wäre ja auch für kleinere Equity sinnvoll !) zulässt. Nur `mal so nebenbei ! In der Hoffnung, dass die o.a. Gedanken und Ideen zumindest nachvollziehbar und halbwegs richtig/umsetzbar sind, würde ich gern diese Änderungen/Optimierungen vornehmen. Wäre oder "IST" das der richtige Weg ? Und wieder einmal in Erwartung Deiner (hoffentlich baldigen) Antwort sowie mit dem üblichen DANKE und LG. pt. PS.: Wenn wir dann ggf. bis zu dieser Stelle Einigkeit hergestellt haben, müsste nur noch Ticket_1 (in "Block_B") initiiert, "Block_A" inhaltlich reduziert und die richtige Korrespodenz zwischen den Blöcken A und B hergestellt werden. So zur ersten neuen Idee. Ist das soweit richtig ? Zum zweiten Gedanken: "OrderModify ..." in der "void CheckForOpen()"- hier müsste eine korrekte Formulierung und Einfügung erfolgen. Wenn Dein "JA" vorliegt, sollte das "Dingeling" nun endlich, und wie gewünscht, funktionieren ! |
So, Wochenende um...
... auf in den Montag! Zitat:
Da es ursprünglich nur um die beiden Orders ging, habe ich die beiden Variablen eingeführt. Allerdings hatte ich auch erwartet, das du sie dann auch überall nutzt. Die Ticketnummern speicherst du bei "OrderSend()" aber anscheinend (erst) in einer Variablen "res". Warum nutzt du nicht die beiden Ticketvariablen? Auch sind die nicht als lokale Variablen in "OnTick()" vorgesehen, sondern wurden von mir ursprünglich global definiert... === === === === === === === === === === === === Zitat:
Trotzdem sollten auch unabhängig davon die Probleme ermittelt und beseitigt werden... === === === === === === === === === === === === Zitat:
Wenn du nicht mit den Tickets arbeiten willst, müsstest du die Orders ja anders ansprechen. Die Tickets sind da doch aber eine bequeme Methode... === === === === === === === === === === === === Zitat:
=== === === === === === === === === === === === Zitat:
|
Liebe next user, Hallo !
Es ist einfach nur "große Klasse", dass Du Dich sogar am Montag Morgen, den eigenltlich keiner so gerne mag, meiner annimmst und akribisch jeden von mir geäußerten Gedanken "geraderückst". Toll ! - und Danke ! Dennoch bin ich mittlerweile zu einer Erkenntnis gelangt: 1. Ich selbst sollte nicht ständig neue Dinge ins Spiel bringen (weniger ist oft mehr!). Statt dessen ist es sicher wesentlich effektiver auf einen vormals recht weit entwickelten Code zurückzugreifen (den mit Ticket_1 und Ticket_2), hier die Ursache(n) für die Nicht-Ausführung zu finden und das "Ding" funktionsfähig zu machen. Grundvoraussetzung hierfür wäre, dass man wirklich Schritt für Schritt vorgeht und jeder einzelne Schritt auch von beiden Seiten exakt verstanden wird. Wenn dann alles laufen sollte, kann man ja immer noch darüber nachdenken, wie der Code/die Herangehensweise optimiert werden kann. Damit wäre mein anfängliches Ansinnen letztendlich umgesetzt. Und 2. Für den Fall (und wirklich nur für diesen Fall), dass sich innerhalb aller Disskusionen eine strategisch bessere und codetechnisch sinnvollere Variante ergibt, sollte auch diese zumindest erörtert werden. Das aber erst, wenn die obige Ausführung fertiggestellt ist. Würdest Du da mitgehen ? ================================================== ============== Beginnen wir also nochmals, wie unter 1. beschrieben: 1. Schritt: es werden "int Ticket_1 = 0" und "int Ticket_2 = 0" global (also im Code ganz oben) deklariert. 2. Unter "void OnTick()" wird dann das "updateSL()" aufgeführt, damit die weiter unten stehende Funktion "void updateSL()" auch per Tick erfolgen kann. 3. Ebenfalls unter "void On Tick()" müßte dann die Funktion "updateSL()" (= Block_A) ausgeführt und die Pos.1 nachträglich geschlossen werden. 4. NICHT unter "void OnTick()" stehend !!!, also eher im unteren Teil des Codes, wird dann die Funktion "void updateSL()" aufgeführt, welche den Trail_SL immer wieder aktuell modifiziert (= Block_B). Gleichzeitig sollte dieser Block dann auch für das ticket-update zuständig sein. So ! Jetzt nochmals zu Deinen letzten Hinweisen: vorheriges Zitat: Zitat:
... Und weiter - Zitat: Zitat:
Letztes Zitat: Zitat:
---> Den ersten Teil des Zitates verstehe ich allerdings nicht. Die Verwendung der Tickets = ok. und verstanden. NICHT verstanden Deine Erwartung, dass ich die Tickets auch überall verwenden soll und die Ticketnummern bei "OrderSend()" zu speichern sind. Wo sollten die Tickets denn noch genutzt werden ? Und was hat es mit der "OderSend()" und einer Speicherung der Ticketnummern auf sich. Beides wurde bisher gar nicht erwähnt. Oder ? ...:o Im Resultat sieht die Gesamt-Struktur des EA, einschließlich "UNSERER" Deklarationen und Blöcke jetzt "SO" aus: CODE: Code:
/*--- EA_Gesamt-Struktur: Obwohl mich noch viele Fragen quälen; - im Sinne von "Konzentration auf eine Sache" halte ich mich jedoch zurück, warte natürlich wieder geduldig und verbleibe vorerst mit ganz LG. pt. |
Werde ich nachher in Ruhe durchgehen.
|
Zitat:
traderdoc |
Hallo, traderdaoc,
ein ganz herzliches "Willkommen" in diesem Beitrag ! Große Kanne Tee? - kein Thema ! Wenn Du es wünscht, auch eine ganze Plantage !!! Ich freue mich riesig, dass es nunmehr ggf. einen "Einklang" im "Dreiklang" geben könnte. (next user, traderdoc und meine Wenigkeit -piptrade) Deine Hinweise könnten diesen Forenbeitrag imens bereichern und uns ggf. schneller/optimaler ans Ziel führen. Für alle anderen zur Info: traderdoc hat mir schon 2 x zum Code-Erfolg verholfen; - und das in einfach fairer Form ! Somit meine Empfehlung: "Daumen hoch !" In angespannter Haltung und voller Ungeduld, Euer einfach nur dankbarer (und natürlich wartender) piptrade |
PS.: Der hier vorliegende EA wurde innerhalb der letzten 3 Jahre soweit geschrieben und entwickelt, dass er ca. 1.600% p.a. erwirtschaftet. Und das zu 99,2 % (2017) vollautomatisch ! Und die verbleibenden 0,8% werden im manuellen Trading mittels einer "ausgefeilten Trading-Strategie" erreicht. (gerade hier sind natürlich auch gigantische und überproportionale Profitzuwächse möglich !, - die genutzt werden sollten.)
Ich habe vor 4 Jahren operative Eingriffe erleben müssen, was nur die aller wenigsten überstehen. Nach dem 1. Jahr der Lethargie habe ich mich aufraffen können und mich mit der mql4 motiviert. DAS war der richtige Weg. Der "HEAD_ExpertAdvisor" ist der lebendige Beweis dafür. LG. Euer piptrade |
Zitat:
|
Zwar etwas später als geplant, aber naja...
=== === === === === === === === === === === === Zitat:
Also Punkt 2 & 3, damit sind die von dir neu hinzugefügte Funktion "CheckForUpdateSL()" und meine ursprüngliche "updateSL()" gemeint. Dazu gleich weiter unten mehr... === === === === === === === === === === === === Zitat:
Zitat:
Wo erst bekommen denn bei dir die Ticket-Variablen ihren Wert? Das meinte ich mit "überall" nutzen. === === === === === === === === === === === === Jetzt zum Codeabschnitt: Ich geh erstmal kurz auf deine roten Hinweise im Code ein...
---------------------------------------------------------------- So, jetzt noch kurz zum Code an sich:
|
Hallo, next user !
Lieber später, als NIE ! - das ist schon völlig in Ordnung. Hauptsache Du unterstützt mich bis "zum bitteren Ende" und lässt mich "nicht im Regen stehen"! Und für das, was ich bisher dazulernen konnte/durfte bin ich sehr dankbar! Thanks ! So, nun aber wieder an die Arbeit: Pkt.1) Zitat:
Pkt.2) Zitat:
die "OrderSend"-Funktion (siehe Code) verwenden: Code:
int ticket=OrderSend(Symbol(),OP_BUY,1,price,3,stoploss,takeprofit,"My order",16384,0,clrGreen); Und wenn auch das richtig sein sollte, müßte ich dann das "void updateSL(int ticket)" gegen "void updateSL(int ticket_2)" für "ticket_2" ersetzen ? Und jetzt die unklaren Codeabschnitte: Zitat:
"void CheckTakeProfit()" auch läuft, ... dann sollte ich mit "CheckForUpdateSL()" bzw. richtiger: "updateSL()" / "void updateSL()" analog verfahren. Oder sind unter "void OnTick()" werder dieses "CheckTakeProfit()" noch das "updateSL()" notwendig ? (So ist es, glaube ich !) Zitat:
Code:
if(OrderSelect(orderTicket2,SELECT_BY_TICKET,MODE_HISTORY)) { Verwendung finden. Oder liege ich da falsch ? Zum Code an sich: Pkt.1) "int orderTicket1 = 0;" bzw. "int orderTicket2 = 0;" - so steht es jetzt durchgängig im Code. Pkt.2) Thema "Doppelblöcke": So, wie Du es darstellst ist es nicht ganz richtig. Die Unterscheidungen betreffen nicht nur die"openOrders", sondern auch die "Trail_Targets" und die "TSL(s)". Hier sollen Auslöser und Spanne (von Pos.1 zu Pos.2) reduziert werden, da hier mit einer höheren Positionsgröße gearbeitet wird. Puhhh... , - das war`s mal wieder. Nunmehr hoffe ich, dass wieder einige Kleinigkeiten richtiggestellt wurden und unsere nächsten Posts kürzer ausfallen. Und wenn dann als neuer Post nur noch das lang ersehnte "OK" übermittelt wird, sollten wir es geschafft haben. DANKE, dass Du wirklich auf jedes Komma, jeden Punkt und auch auf ... eingehst. Und vielen, vielen Dank für Deine Geduld, Ausdauer und Zielstrebigkeit. Mit jedem neuen Statement habe ich etwas dazugelernt, so dass schon jetzt allein die Verständigung besser klappt. Thanks, bis bald und LG. pt. |
Zitat:
=== === === === === === === === === === === === Zitat:
Zitat:
Der Rest ist richtig. Zitat:
Code:
void updateSL(int ticket) werden doch beim Aufruf genutzt: Code:
if(orderTicket1) updateSL(orderTicket1); Zitat:
"CheckTakeProfit()" nutzt du ja denke ich für TP. Ob es notwendig ist, weißt nur du genau. "updateSL()" SORGT DOCH EBEN FÜR DAS UPDATEN DER (TRAIL)SL! Die wird doch die ganze Zeit genutzt und jetzt denkst du, sie sei unnötig? Hast du vergessen, wozu wir sie erstellt haben? === === === === === === === === === === === === Zitat:
Wenn sie aber von dir bereits an anderer Stelle aus welchem Grund auch immer durch "CloseAllOrders()" geschlossen wurde, so wird "OrderSelect()" fehlschlagen und der Block danach NICHT ausgeführt, was Folgen hat! === === === === === === === === === === === === Zitat:
"CloseAllOrders()" verarbeitet werden. Da hast du mich verwirrt... === === === === === === === === === === === === Zitat:
Zitat:
auf 2 Blöcke mit entsprechenden Bedingungen reduzieren kann. === === === === === === === === === === === === Wegen dem ganzen "Durcheinander" im Code ect. frage ich mich grad, ob nicht das die Ursache für das plötzliche schließen der Order verantwortlich ist... Auch haben wir ja vor ein paar Tagen Ausgaben angesprochen, die du doch machen wolltest, oder. Schauen wir mal weiter... |
Lieber next user,
„erstens kommt es anders, zweitens als man denkt !“ So und dieses Mal auch hier. Vorab aber erst einmal das DANKESCHÖN, für Deine letzten Hinweise. Wie immer haben mir diese wieder einmal geholfen, ein Stückchen weiterzukommen. Einerseits dadurch, dass ich nur diesen Hinweisen nachging und andererseits dadurch, dass ich registrieren musste, dass mir das Hintergrundwissen zu „OrderSend“„ zu Order Modify“ sowie das Auslesen der History und der Umgang mit den „tickets“ zumindest teilweise noch fehlt ! Und genau das ist der Grund, weshalb ich mich nicht eher gemeldet habe. Deshalb „Sorry“ und die Bitte um Verständnis. Im Weiteren erscheint es mir als sinnvoll diese Lücken mit Wissen zu füllen, so dass ich über die Osterfeiertage „eirige Dinge“ aus der Welt schaffen und „runde Dinge“ machen möchte. Deshalb auch jetzt und hier keinen vorschnellen Comment. Anbei: Es ist schon gut, all diese mögliche Abfolgen einmal selbst zu coden und sich zu zwingen, der entsprechenden Logik nachzugehen. So ist es auch wesentlich leichter, entsprechende Hinweisdetails zu verstehen. Lassen wir das Fest in aller Ruhe verstreichen, um dann mit neuem Elan an alten Dingen „zu feilen“. DANKE. Ich denke, dass ich mich spätestens Mo./Di. wieder melde, wünsche ein “Frohes Fest“ und verbleibe mit LG. pt. |
Zitat:
Dir auch noch schöne Feiertage. |
Hallo, next user,
das Fest der unrunden Dinge ist nun vorbei und, wie versprochen, hier meine Rückmeldung. Ebenfalls, wie zugesagt, habe ich mich neben österlichen Dingen auch um einige MQL4-Funktionen gekümmert. Sicher sind im Nachfolgenden noch Fehler enthalten, sicher werden hier und da auch umrichtige Begriffe verwendet, dennoch bin ich unterschiedliche Codebestandteile des betreffenden EA durchgegangen und möchte hier hauptsächlich die Passagen ansprechen, die in diesem Forenbeitrag primär zur Disskusion stehen. 1. Der Grundaufbau des EA wurde bereits in einem vorhergehenden post übergeben. Hier konnte entnommen werden, dass unter „void OnTick()“ unter anderem die Funktionen „CheckForOrder()“, „CheckHedgeOpen()“ und „CheckTakeProfit()“ deklariert sind, welche im späteren Verlauf des EA als separate “void“- oder „Funktions“-Blöcke ausführlich behandelt werden. Und hier gab es eine este Ungereimtheit: Die Funktion „Trail_SL()“ wurde bisher unter „void CheckTakePrpfit“ gecodet. Also müßte nach meinem Ermessen folgende Veränderung vorgenommen werden: zusätzliche Deklaration der Funktion „CheckTrail_SL()“ unter „void OnTick()“, um später auch hierfür einen separaten „Funktions-Block“ „void CheckTrail_SL()“ ausbilden zu können. Also nicht mehr unser altes „updateSL(int ticket)“. Jetzt hätte ich 4 „saubere“ Deklarationen und die Möglichkeit auch 4 separate Funktionsblöcke zu bilden. 2. Gehen wir `mal davon aus, dass dies annähernd richtig ist. So wird die Pos.1 immer und generell unter „void CheckForOrder()“ mittels „OrderSend...“und die Pos.2 immer und generell unter „void CheckHedgeOpen()“ ebenfalls unter einer „OrderSend...“ geöffnet. 2 x „OrderSend...“ ! Bei diesen Eröffnungen sind StopLoss und TakeProfit jeweils „0“. Das Schließen der Pos.1 erfolgt dann mittels TP unter „voidCheckTakeProfit()“ und einem „OrderModify...“ oder eines SL unter „void CheckTrail_SL()“ und wiederum einem „OrderModify...“ Selbiges betrifft die Pos.2 ! Um an dieser Stelle konsequent zu bleiben, wäre es n.m.E. richtig, wenn „ticket_1“ und „ticket_2“ nicht aus den Modifizierungen „geupdatet“, sondern mittels der „OderSend...“-Befehle festgelegt werden. Dies wiederum würde heissen, das das o.a, „void CheckForOpen()“ auf „void CheckForOpen(int ticket_1)“ - und das „void CheckHedgeOpen()“ auf „void HedgeOpen(int ticket_2)“ erweitert werden müßte. In den jeweiligen Funktionen/Durchläufen wären dann nicht mehr diese „res = OrderSend...“ gefragt, sondern „ticket_1 = OrderSend...“ bzw. „ticket_2 = OrderSend...“ zu formulieren. Damit sind nunmehr auch die Tickets eindeutig und könnten mit „return ticket_1“ bzw. „return ticket_2“ übergeben werden. Und damit zu 3. „ticket_1 = 0;“ und „ticket_2 = 0;“ werden global deklariert und stellen den jeweiligen Ausgangszustand der Tickets dar. 4. Jetzt könnte direkt unter“void OnTicK“ ein zusätzlicher Block platzieren werden, der zwischen „HISTORY = geschlossene Pos. 2“ und „TICKET = offene Pos.1“ unterscheidet und welcher dafür zuständig ist, die ggf. noch geöffnete Position nachträglich zu schließen. In diesem Zusammenhang müsste als erstes die Anweisung gegeben sein, dass „if (ticket_1) --→ CheckForOpen (ticket_1)“ und dass „if (ticket_2) --→ CheckHedgeOpen (ticket_2)“. Dann sollten die Ticket-Abfragen und der „OrderClose...“-Befehl folgen. Den Abschluss würden die Rücksetzungen der Tickets auf “0“ und ein „return“ bilden. Bis auf Formulierungs- oder Benennungsfehler erscheint mir das alles recht logisch und nachvollziehbar. Dennoch bin ich relativ sicher, dass der „Teufel wahrscheinlich im Detail“ liegt und ggf. doch noch einiges Andere „geradezurücken“ ist. Vielleicht könnte das ursprüngliche Problem aber auch auf der hier beschriebenen Basis gelöst werden !? Sauber, klar und eindeutig. Bin natürlich auf Deine neuerliche Reaktion gespannt, warte voller Ungeduld auf Deinen nächsten post, sage schon `mal DANKE und bis bald ... LG. pt. |
Lieber next user,
wie schon angenommen, war nicht alles zu 100% wirklich richtig ! - Dennoch stimmte der „Leitfaden“; - die zu vermutende Logik und der zu vermutende Code ! 4 separate Blöcke, einschließlich Deklaration und deren Funktionsausführung wurden umgesetzt ! Die „Ticket-updates“ werden jetzt in der „void CheckForOpen()“ und in der „void CheckHedgeOpen()“ (Primär-Orders für Pos.1 und Pos.2) festgelegt und in der Endkonsequenz sogar übernommen ! Globale Deklarationen wurden ebenfalls ergänzt. Soweit war ein erster und wichtiger Fortschritt erreicht !!! - Eine tatsächliche Kommunikation und damit eine neue BASIS !!! Thanks, - für mehrere kleine Details Deiner Statements, die ich mir immer wieder „vor Augen führte“, haben mir hier weitergeholfen. Da Du momentan scheinbar "verschollen“ bist und weder im Forum noch direkt an meiner Seite "aufwachst", blieb nur nur DAS „Do it`s your help“; … und das waren nunmehr 3 Tage „Kampf“ ! Dennoch bin ich mehr als nur zufrieden, diese „Krampf-Orgie“ auf mich genommen zu haben, dass Resultat kann sich nämlich wirklich sehen lassen !!! (Bis auf eine absolute Kleinigkeit); - läuft der EA ! Und er läuft richtig gut ! Jetzt ist lediglich noch etwas „Kosmetik“ der Conditions und im Code-Styling angesagt und das „DINGELING“ kann seinen Weg, - welcher das auch seien mag`, - gehen ! Lieber next user, … lieber traderdock, - herzlichen Dank für Eure „Bemühungen“, vielleicht ist hier aber auch „Herausforderungen“ richtiger ? Dennoch DANKE !!! In diesem Sinne LG. Euer piptrade PS.: (Fair play !) An alle, die den Beitrag verfolgt haben: Den allumfassenden, richtigen Code werde auch ich Euch nicht so einfach liefern. Dafür musste ich zu hart dafür arbeiten. Dennoch hat jeder Interessierte die Möglichkeit eines direkten Kontaktes. Für einen kleinen Obolus gebe ich gern den richtigen Code preis. Eine Einsicht “in“ - oder ein realer Test des EXPERT ADVISORs - wäre dann eine vielleicht nächste und zugesichert, lukrative Option. LG. Und um "meiner Seele freien Lauf zu lassen": Lieber next user - Programmierungswissen und Strategie-Erfahrung wären ggf. der richtige "DEAL" gewesen ! |
Alle Zeitangaben in WEZ +2. Es ist jetzt 22:01 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