Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 9

 
fxsaber:
Die Lösung kam sofort.
// Размер свободных средств, необходимых для открытия 1 лота на покупку
double GetMarginRequired( const string Symb )
{
  MqlTick Tick;

  return(SymbolInfoTick(Symb, Tick) ? Tick.ask * SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) * SymbolInfoDouble(Symb, SYMBOL_TRADE_CONTRACT_SIZE) *
         SymbolInfoDouble(Symb, SYMBOL_POINT) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
Dies ist die Berechnung für FOREX. Der Rest ist ähnlich.
Gut, dann muss nur noch die Marge in der Einzahlungswährung mitgebracht werden, denn die Marge, zum Beispiel für AUDCAD mit der Einzahlungswährung USD, muss in USD sein.
 
Alexey Volchanskiy:
Großartig, alles was wir tun müssen, ist, die Marge in der Depotwährung mitzubringen, denn die Marge, zum Beispiel für AUDCAD mit der Depotwährung USD, muss in USD sein.
Das ist bereits geschehen.
 
Alexey Volchanskiy:
Gut, dann bleibt nur noch, die Marge in der Einzahlungswährung mitzubringen, denn für AUDCAD zum Beispiel sollte die Einzahlungswährung in USD sein.
Sieht aus wie SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE ) in der Funktion ist nur für sie... zu bringen Lose zu hinterlegen Währung
 
fxsaber:
Dies ist geschehen.

In Forex funktioniert alles einwandfrei, nur die letzte Frage bleibt: "Warum nur halb so viel, und wie kann ich das beheben?"

 
Vitaly Muzichenko:

In Forex funktioniert alles einwandfrei, aber es gibt noch eine letzte Frage: "Warum ist es halbiert und wie können wir es beheben?"

Ich habe festgestellt, dass die Marge auf SGDJPY auf dem FIBOGroup-MT5 Server und dem MetaQuotes-Demo Server unterschiedlich ist. Dies deutet darauf hin, dass der MT5 selbst die Marge mit Fehlern berechnet. Nun, wenn das der Fall ist, gibt es keinen Vergleichsmaßstab. Daher kann ich nicht mit Sicherheit sagen, ob es sich um einen Fehler in meiner Implementierung oder bei den Entwicklern handelt. Meiner Meinung nach liegt in beiden Fällen ein Fehler vor. Das Problem ist der Mangel an korrekten Informationen.
 
fxsaber:
Ich habe festgestellt, dass bei SGDJPY die Marge auf dem FIBOGroup-MT5 Server und dem MetaQuotes-Demo Server unterschiedlich ist. Dies deutet darauf hin, dass der MT5 selbst die Marge mit Fehlern berechnet. Und da das so ist, gibt es keine Referenz für einen Vergleich. Daher kann ich nicht mit Sicherheit sagen, ob dies ein Fehler meiner Implementierung oder der Entwickler ist. Meiner Meinung nach liegt in beiden Fällen ein Fehler vor. Das Problem ist der Mangel an korrekten Informationen.

Meine beiden Server werden korrekt angezeigt, mit einer Ausnahme - rot hervorgehoben

Wie finde ich die rot markierte Eigenschaft heraus?

Ich danke Ihnen!

 
Vitaly Muzichenko:

Ich habe zwei Server, die korrekt angezeigt werden, mit einer Ausnahme - rot hervorgehoben

Wie kann ich die rot markierte Eigenschaft herausfinden?

Danke für den Tipp! In der Wildnis ist esSymbolInfoMarginRate. Jetzt sieht es also so aus
// Размер свободных средств, необходимых для открытия 1 лота на покупку
double GetMarginRequired( const string Symb )
{
  MqlTick Tick;
  double MarginInit, MarginMain;

  return((SymbolInfoTick(Symb, Tick) && SymbolInfoMarginRate(Symb, ORDER_TYPE_BUY, MarginInit, MarginMain)) ? MarginInit * Tick.ask *
          SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}

Sie müssen sich darüber im Klaren sein, dass es im MT5 sehr unterschiedliche Margin-Anforderungen in verschiedenen Richtungen geben kann. D.h. eine einzige MT4-Variante kann nicht funktionieren. Auf dem Forex ist dies natürlich nicht der Fall. Aber Sie müssen daran denken. Daher sollten Sie ihn im Allgemeinen wie folgt schreiben
// Альтернатива OrderCalcMargin
bool MyOrderCalcMargin( const ENUM_ORDER_TYPE action, const string symbol, const double volume, const double price, double &margin )
{
  double MarginInit, MarginMain;

  const bool Res = SymbolInfoMarginRate(symbol, action, MarginInit, MarginMain);
  
  margin = Res ? MarginInit * price * volume * SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE) /
                 (SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0;
  
  return(Res);  
}
 
fxsaber:
Genau das wurde getan.
Ja, so ist es, so ist es.
 

MT5-Witz auf FIBOGroup-MT5 Server SGDJPY

In dieser Situation zählt MyOrderCalcMargin korrekt, aber der reguläre OrderCalcMargin nicht!

 
fxsaber:

MT5-Streich auf FIBOGroup-MT5 Server SGDJPY

In dieser Situation zählt MyOrderCalcMargin korrekt, aber der reguläre OrderCalcMargin nicht!

Gibt es eine Möglichkeit, die abgesicherte Marge zu berechnen?
Grund der Beschwerde: