|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Berücksichtigung der/des Kommission/Swap
Hallo zusammen, ich habe einen eigenen EA und versuche beim Schliessen der Positionen Kommission und Swap zu berücksichigen.
Nun habe ich 2 verschiedene Möglichkeiten mit ebenso verschiedenen Resultaten. Die Ergebnisse unterscheiden sich interessanterweise nicht gross im Endresultat, jedoch habe ich bei der Anzahl gewonnener Positionen (Sell&Buy) einmal ~83% und mit der anderen "Version" ~93%... Vllt. kann mir jemand dabei helfen zu bestimmen welche der 2 Möglichkeiten denn nun die Richtige ist, bzw. ob es da sonst noch Fehler drin hat: Code:
for (pos = OrdersTotal()-1; pos >= 0; pos--) { if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { cOrderProfit=OrderProfit()+OrderSwap()+OrderCommission(); //---- if (UseCloseIndicator == 1) { if(OrderType()==OP_BUY) { if(cOrderProfit > 0 && PriceBid >= channel_main) { RefreshRates(); if(OrderClose(OrderTicket(), OrderLots(), PriceBid, 3, Blue)==true) pos--; } } und: Code:
for (pos = OrdersTotal()-1; pos >= 0; pos--) { if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { //---- if (UseCloseIndicator == 1) { if(OrderType()==OP_BUY) { if(Profit() > 0 && PriceBid >= channel_main) { RefreshRates(); if(OrderClose(OrderTicket(), OrderLots(), PriceBid, 3, Blue)==true) pos--; } } //---- bool Profit() { double TotalProfit = 0; for(int iPos = OrdersTotal()-1; iPos >= 0; iPos--) if(OrderSelect(iPos, SELECT_BY_POS) && OrderMagicNumber() == Magic && OrderSymbol() == Symbol()) TotalProfit += OrderProfit()+OrderSwap()+OrderCommission(); return (TotalProfit); } |
|
|||
Also, erstens darf in das pos-- nach der OrderType()-Abfrage nicht erscheinen.
Und zweitens unterscheiden sich die beiden Varianten gravierend voneinander. Im ersten Fall wird nur der cOrderProfit einer! Order berechnet und im zweiten Fall wird, falls OrderType() == OP_BUY ist, danach über alle offenen Orders die TotalProfits addiert. Wobei da wohl einige Klammern fehlen! Deshalb musst Du Dir erst einmal einig werden, ob nun nur eine Order oder alle Orders berücksichtigt werden sollen. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Danke für Deine Antwort traderdoc. Da ich die Berechnung für jede einzelne Position bevorzuge und bez. pos-- hab ich das mal wie folgt geändert:
Code:
for (pos = OrdersTotal()-1; pos >= 0; pos--) { if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { bOrderProfit=OrderProfit()+OrderSwap()+OrderCommission(); //---- if (UseCloseIndicator == 1) { if(OrderType()==OP_BUY) { if(bOrderProfit > 0 && PriceBid >= channel_main) { RefreshRates(); bOrderClose = OrderClose(OrderTicket(), OrderLots(), PriceBid, 3, Blue); } } if(OrderType()==OP_SELL) { if(bOrderProfit > 0 && PriceAsk <= channel_main) { RefreshRates(); bOrderClose = OrderClose(OrderTicket(), OrderLots(), PriceAsk, 3, Red); } } } |
|
|||
Ich habe das mal der besseren Lesbarkeit etwas geschmeidiger geschrieben:
Code:
for (pos = OrdersTotal()-1; pos >= 0; pos--) { if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { dOrderProfit = OrderProfit() + OrderSwap() + OrderCommission(); if (UseCloseIndicator == 1) { if (OrderType() == OP_BUY) { if (dOrderProfit > 0 && PriceBid >= channel_main) { bOrderClose = OrderClose(OrderTicket(), OrderLots(), PriceBid, 3, Blue); } } if (OrderType() == OP_SELL) { if (dOrderProfit > 0 && PriceAsk <= channel_main) { bOrderClose = OrderClose(OrderTicket(), OrderLots(), PriceAsk, 3, Red); } } } } } } Und aus bOrderProfit habe ich konsequenterweise dOrderProfit gemacht, weil der zurückgegebene Wert ein double-Wert ist. Also, immer darauf achten, dass die Klammerstruktur konsequent eingehalten wird, dann ist der Code für alle auch besser lesbar. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Stichworte |
gebühren, kommission, mql4, programmierung, programmierung metatrader, programmierung mql4, swap |
|
|