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: 3824
Beiträge: 36916
Benutzer: 6.081
Aktive Benutzer: 495
Links: 80
Wir begrüßen unseren neuesten Benutzer: DarthTrader
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 14 Stunden
- DarthTrade...
vor 16 Stunden
- Eren
vor 23 Stunden
- Rene1504
vor einem Tag
- ibdafx
vor einem Tag
- Batangenyo

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 55
Gesamt: 55
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 06.08.17
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);
}
  #2 (permalink)  
Alt 06.08.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
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.
  #3 (permalink)  
Alt 07.08.17
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...?
  #4 (permalink)  
Alt 07.08.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
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.
  #5 (permalink)  
Alt 08.08.17
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.
Thema geschlossen

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 +1. Es ist jetzt 15:03 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
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.
-----------------------------------------------------------------------------------------------------------------------------