Bibliotheken: MT4Orders - Seite 29

 
Interessant ist die Sache mit der Provision. MT5 teilt sie beim Einstieg und Ausstieg eines Trades in zwei Hälften (wenn eine Position 2 Trades hat). OrderCommission gibt 2x die Größe der Provision für Trades zurück (berechnet durch PositionID? Ich habe es mir nicht angesehen). Aber um die gleichen Berichtsindikatoren wie im Tester zu erhalten, müssen wir die Hälfte der Provision für gewinnbringende Geschäfte berücksichtigen, und der Teil, der bei der Eingabe eines Geschäfts abgezogen wurde, sollte beim Gesamtverlust berücksichtigt werden. Das heißt, profitable Geschäfte zählen 1/2 der OrderCommission(), und unprofitable Geschäfte zählen die gesamte Provision und +1/2 für jeden Gewinn im Gesamtverlust.... Dies ist der einfachste Fall, wenn es keine teilweisen Ein- und Ausstiege gibt, über kompliziertere Fälle möchte ich noch nicht nachdenken))) Ich frage mich, ob das auch bei OrderSwap() der Fall ist? P.S. Nein, es scheint, dass Swap nur in der Out-Richtung berechnet wird.
Im Allgemeinen, coole Bibliothek, danke nochmals an saber.
 
Ilya Malev:
Um die gleichen Berichtsindikatoren wie im Tester zu erhalten, ist es notwendig, die Hälfte der Provision für gewinnbringende Geschäfte zu berücksichtigen, und der Teil, der beim Abschluss eines Geschäfts abgezogen wurde, sollte beim Gesamtverlust berücksichtigt werden. Das heißt, profitable Geschäfte zählen 1/2 der OrderCommission(), und unprofitable Geschäfte zählen die gesamte Provision und +1/2 für jeden Gewinn im Gesamtverlust.... Dies ist der einfachste Fall, wenn es keine teilweisen Ein- und Ausstiege gibt, über kompliziertere Fälle möchte ich noch nicht nachdenken))))

Hier stimmt etwas nicht.

 
fxsaber:

Irgendetwas ist schief gelaufen.

Ich mache eine parallele Berechnung von PF-Indikatoren für verschiedene Arten von Geschäften, die gleichzeitig während des Tests geöffnet werden. So habe ich bemerkt, dass, wenn MT4-meine dummerweise summieren OrderProfit()+OrderCommission()+OrderSwap getrennt von allen plus und minus Trades, dann der Gesamtgewinn, Gesamtverlust und Ruß-no PF am Ende nicht übereinstimmen. Damit sie übereinstimmen, müssen Sie Folgendes tun (in der "idealen Testerumgebung", in der 2 Trades pro Position garantiert sind)

double summ_plus=0, summ_minus=0;
int oht=OrdersHistoryTotal();
for(int i = oht-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)&&OrderType()<2/*...*/)
{
if(OrderProfit()>0)
{
summ_plus+=OrderProfit()+OrderCommission()/2+OrderSwap();
summ_minus+=-OrderCommission()/2;
}
else
{
summ_minus+=-OrderProfit()-OrderCommission()-OrderSwap();
}
}
}
return(summ_minus>0?summ_plus/summ_minus:0.0); // Korrekter Gewinnfaktor auf MT5-Tester
 
Ilya Malev:

Ich mache parallel mit dem Tester die Berechnung von PF-Indikatoren für verschiedene Arten von Geschäften, die während des Tests gleichzeitig eröffnet werden.

Die PF-Berechnung ist also absolut falsch. PF kann nicht anders berechnet werden, egal welche Plattform verwendet wird. Es handelt sich um ein rein mathematisches Konzept. Daher wird er immer eindeutig berechnet.

 
fxsaber:

Also völlig falsche PF-Berechnung. PF kann nicht anders berechnet werden, egal welche Plattform verwendet wird. Es ist ein rein mathematisches Konzept. Deshalb wird er auch immer eindeutig berechnet.

Versuchen Sie doch mal, ein beliebiges System selbst zu berechnen und vergleichen Sie es mit den Zahlen im MT5-Bericht. Nur dass die Kommission war und vorzugsweise Forex (weil ich Forex getestet wurde).

 
Ilya Malev:

Nun, versuchen Sie, jedes System selbst zu berechnen und vergleichen Sie es mit den Zahlen im MT5-Bericht. Nur wenn es eine Provision gab und vorzugsweise Forex (weil ich Forex getestet habe).

Ich habe diesen Code in MQL5\Experts\Examples\Moving Average\Moving Average.mq5 eingefügt .

#include <MT4Orders.mqh>

double GetPF()
{
  double SumPlus = 0;
  double SumMinus = 0;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
    {
      const double Profit = OrderProfit() + OrderCommission() + OrderSwap();
      
      if (Profit > 0)
        SumPlus += Profit;
      else
        SumMinus -= Profit;      
    }
    
  return(SumMinus ? SumPlus / SumMinus : DBL_MAX);
}

Volle Übereinstimmung mit dem Tester.

 
fxsaber:

Ich habe diesen Code in MQL5\Experts\Examples\Moving Average\Moving Average.mq5 eingefügt

Eine vollständige Übereinstimmung mit dem Tester.

Also vielleicht hat der Kontotyp, mit dem Sie verbunden sind, keine Kommission für Trades.

P.S. Ich werde es noch einmal überprüfen, okay. Wenn etwas, werde ich es mit Bildern posten :)
 
fxsaber:

Ich habe diesen Code in MQL5\Experts\Examples\Moving Average\Moving Average.mq5 eingefügt

Volle Übereinstimmung mit dem Tester.

Der MetaQuotes-Demo-Server hat keine Kommission für Forex-Trades.

1) Finden Sie einen Server, auf dem es z.B. beim Broker A-i ist.

2) Fügen Sie zu Ihrem Code hinzu

    printf("My Profit Factor = %.8f, MT5 Profit Factor = %.8f",GetPF(),TesterStatistics(STAT_PROFIT_FACTOR));
// а заодно это
  printf("My Plus=%.8f, My Minus=%.8f, MT5 Plus=%.8f, MT5 Minus=%.8f",SumPlus,SumMinus,
    TesterStatistics(STAT_GROSS_PROFIT),TesterStatistics(STAT_GROSS_LOSS));

3) ???

4) Profitieren!!! :lol:

 
Ilya Malev:

Es kann also sein, dass die Art des Kontos, mit dem Sie verbunden sind, keine Kommission für Transaktionen hat.

Genau, ich habe auf dem falschen Handelsserver geprüft. Mit Kommission stimmt der korrekte PF nicht mit dem Tester überein. Das deutet darauf hin, dass MT5 den PF falsch berechnet und die DEAL_IN-commission überhaupt nicht berücksichtigt.

Gewinn wird absolut korrekt berechnet

double GetProfit()
{
  double Res = 0;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
      Res += OrderProfit() + OrderCommission() + OrderSwap();
    
  return(Res);
}


PF ist im MT5 krumm. MT5 kann am Ende des Handels einen unendlichen PF haben, wobei der Saldo abnimmt. Das ist natürlich falsch.

 
fxsaber:

Richtig, auf dem falschen Handelsserver geprüft. Bei der Kommission stimmt die korrekte PF nicht mit der des Testers überein. Dies zeigt, dass MT5 PF krumm berechnet, nicht unter Berücksichtigung DEAL_IN Kommission überhaupt.

Das zeigt, dass sie eine andere Philosophie haben - sie betrachten Transaktionen nicht als Ganzes (und es gibt keine Positionen in der Historie als solche, im Sinne von HistoryPositionSelect usw.). Für sie ist jede Transaktion ein unabhängiger Vorgang, weshalb sie die Provision am Eingang mit Verlusten addieren (obwohl dann nicht klar ist, warum sie sie vom Gewinn am Ausgang abziehen).