Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3745
Beiträge: 36591
Benutzer: 5.902
Aktive Benutzer: 519
Links: 80
Wir begrüßen unseren neuesten Benutzer: Polytrade
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 2 Stunden
- Polytrade
vor 8 Stunden
- exspas432
vor 19 Stunden
- elgaza
vor einem Tag
- DeSaint
vor einem Tag
- DeSaint123...

Onlineuser
'Wer ist online' anzeigen Benutzer: 3
Gäste: 98
Gesamt: 101
Team: 0
Team:  
Benutzer:  Breakout25, ForexMax, Lena
Freunde anzeigen

Empfehlungen

Werbung

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Apr 2017
Beiträge: 7
romario befindet sich auf einem aufstrebenden Ast
Standard 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);
}
Mit Zitat antworten
  #2 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.821
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Apr 2017
Beiträge: 7
romario befindet sich auf einem aufstrebenden Ast
Standard

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);
        }
    }
}
Eigentlich sollte alles seine Richtigkeit haben da ich die mq4-Datei mit #property strict kompiliere und weder einen Fehler noch eine Warnung habe...?
Mit Zitat antworten
  #4 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.821
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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);
               }
            }
         }
      }
   }
}
Das RefreshRate() fällt weg, weil es an dieser Stelle nicht zu refreshen gab, denn die Übergabe des Bid- und Ask-Werte an PriceBid und PriceAsk muss irgendwo anders stattfinden.
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.
Mit Zitat antworten
  #5 (permalink)  
Alt vor einer Woche
Neues Mitglied
 
Registriert seit: Apr 2017
Beiträge: 7
romario befindet sich auf einem aufstrebenden Ast
Standard

ok. vielen Dank für Deine Hilfe traderdoc und für die "geschmeidigere" Darstellung des Ganzen - sieht wirklich besser aus. Und sorry für die fehlenden Klammern, die wären eigentlich etwas weiter unten im EA.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
gebühren, kommission, mql4, programmierung, programmierung metatrader, programmierung mql4, swap


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 17:53 Uhr.



-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------