Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1055

 
Igor Makanu:

das ist alles klar, aber wie berechnet man die Differenz zwischen 2 Preisen in ganzen Punkten richtig?

An dieser Stelle kann gerundet werden. Sie können selbst entscheiden, ob Sie sich für einen Weg entscheiden oder nur für eine ganze Zahl.

int pips_profit = (int)MathFloor(OrderOpenPrice()-OrderClosePrice())/_Point);
 
Igor Makanu:

Würde in der Bestellschleife SymbolInfoDouble(OrderSymbol(), SYMBOL_POINT); jedes Mal neu berechnet werden, weilOrderSymbol() jedes Mal anders ist?

Das Problem ist hier etwas anders - der Gesamtgewinn in Pips für alle Symbole.

 
Konstantin Nikitin:

An dieser Stelle kann gerundet werden. Sie können selbst entscheiden, ob Sie sich für einen Weg entscheiden oder nur für eine ganze Zahl.


Nun ja, ich habe solche Konstruktionen vergessen, in Kims Losberechnungsfunktionen wurde korrekt gerundet.
fxsaber:

Die Aufgabe dort ist also etwas anders - der Gesamtgewinn in Pips für alle Symbole.

OK, aber warum const - wie der Compiler verhält, wenn die Schleife wird const ändern?

PS: Der Code ist lesbar, muss aber überprüft werden, da er nie benutzt wurde.

 
Igor Makanu:

OK, aber warum const - wie verhält sich der Compiler, wenn const in der Schleife geändert wird?

PS: Der Code ist lesbar, muss aber überprüft werden, da er nie benutzt wurde.

Bei jedem Schritt wird eine Variable erstellt. const - in diesem Schritt ist keine Änderung vorgesehen.

 
fxsaber:

Bei jedem Schritt wird eine Variable erstellt. const - in diesem Schritt sind keine Änderungen vorgesehen.

Ist der Schritt eine Iteration der Schleife?

Es ist immer noch nicht klar, wie sich eine solche Konstruktion verhält, wir brauchen ein Skript, um zu prüfen

 
fxsaber:

Das Ziel ist also ein etwas anderes - Gesamtgewinn in Pips über alle Symbole hinweg.

Nun, dann ist es so

short pipsProfitOrder = (short)MathFloor( ( OrderProfit()+OrderSwap()+OrderCommission() ) / (SymbolInfoDouble(_OrderSymbol(), SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );

Ich berechne die Gewinne in Pips für eine Position, aber ich denke, es wird kein Problem sein, dies auf mich selbst anzuwenden.

 
Igor Makanu:

ein Schritt eine Iteration eines Zyklus ist?

Ja.

es ist immer noch nicht klar, wie sich eine solche Konstruktion verhalten würde, wir brauchen ein Skript, um zu prüfen

Hier ein Beispiel für eine praktische Verwendung der Lebensdauer einer Variablen

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Diskussion über "LifeHack für Trader: ForEach auf Defines (#define) mischen"

fxsaber, 2018.02.14 10:54

Leistungsmessung

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}

double GetAsk()
{
  static MqlTick tick = {0};
  
  return(SymbolInfoTick(Symbol(),tick) ? tick.ask : 0);
}

#define  AMOUNT 1 e6

void OnStart()
{
  double Sum = 0;
  
  BENCH(for (int i = 0; i < AMOUNT; i++) Sum += GetAsk())
  BENCH(for (int i = 0; i < AMOUNT; i++) Sum += SymbolInfoDouble(_Symbol, SYMBOL_ASK))
  
  Print(Sum);
}


Ergebnis

Time[for(inti=0;i<AMOUNT;i++)Sum+=GetAsk()] = 78952
Time[for(inti=0;i<AMOUNT;i++)Sum+=SymbolInfoDouble(_Symbol,SYMBOL_ASK)] = 162606
 

Forum für Handel, automatisierte Handelssysteme und Strategietests

FAQ von Anfängern MQL5 MT5 MetaTrader 5

Konstantin Nikitin, 2019.06.04 19:58

Nun denn

short pipsProfitOrder = (short)MathFloor( ( OrderProfit()+OrderSwap()+OrderCommission() ) / (SymbolInfoDouble(_OrderSymbol(), SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );

Ich berechne die Gewinne in Pips für eine Position, aber ich denke, ich habe kein Problem damit.

Dies wird als Umwandlung von Gewinnen mit Kosten in ECHTE (nicht bei Abschluss) Pips bezeichnet.

 
fxsaber:

Dies wird als Kosten-Gewinn-Transfer in AKTUELLE (nicht zum Zeitpunkt des Abschlusses) Punkte bezeichnet.

So muss er den Gewinn in Punkte umsetzen. Bei der Berechnung der Geschlossenen müssen Sie weiterhin den Punktwert als Grundlage nehmen. Der Gewinn in Pips muss nicht gleich der Differenz in Pips zwischen dem Eröffnungs- und dem Schlusskurs sein. und Schlusskurse.

 
Konstantin Nikitin:

Er muss also den Gewinn in Punkte umrechnen.

Manchmal denken sie, dass Gewinn = OrderProfit().

Wenn Sie ein geschlossenes Symbol berechnen, sollten Sie trotzdem den Punktwert verwenden. Der Pip-Wert des Gewinns muss nicht gleich der Differenz in Pips zwischen dem Eröffnungs- und dem Schlusskurs sein.

Der Punktwert bei Abschluss ist nicht gleich dem Punktwert zum Zeitpunkt der Berechnung. Außerdem kann es sein, dass das Symbol zum Zeitpunkt der Berechnung einfach nicht im Market Watch enthalten ist.

Deshalb werden sowohl die Pip-Werte als auch ihr Wert zum Zeitpunkt des Abschlusses berechnet.