Einzelnen Beitrag anzeigen
  #58 (permalink)  
Alt 04.04.18
piptrade piptrade ist offline
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

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.