mql5言語の特徴、微妙なニュアンスとテクニック - ページ 9

 
fxsaber
解決策はすぐに見つかった。
// Размер свободных средств, необходимых для открытия 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);
}
これはFOREXの計算です。あとは似たようなものです。
素晴らしい、あとは証拠金を入金通貨で持って くるだけです。例えば、入金通貨がUSDのAUDCADの場合、証拠金はUSDである必要があるからです。
 
アレクセイ・ヴォルチャンスキー
素晴らしい!あとは証拠金を預け入れ通貨で持って くるだけです。例えば、預け入れ通貨がUSDのAUDCADの証拠金はUSDである必要がありますから。
されています。
 
アレクセイ・ヴォルチャンスキー
証拠金は、たとえばAUDCADの場合、預け入れ通貨がUSDでなければなりませんから、預け入れ通貨で 証拠金を持参する必要があります。
関数内のSymbolInfoDouble(Symbol,SYMBOL_TRADE_TICK_VALUE) がそれのためにあるように見える... 通貨を預けるためにたくさん持ってくるために。
 
fxsaber
ということが行われてきました。

FXではすべてうまくいっているのですが、最後の疑問が残ります。"なぜ半分なのか、どうすれば解決できるのか "ということです。

 
ヴィタリー・ムジチェンコ

FXではすべてうまくいっているのですが、最後の疑問があります。"なぜ半減しているのか、どうすれば直るのか "ということです。

FIBOGroup-MT5サーバーとMetaQuotes-Demoサーバーで、SGDJPYの証拠金が何倍も違うことがあります。これは、MT5自体が誤差を含んだマージンを計算して いることを示唆しています。そして、そうである以上、比較するための参考資料がない。したがって、これが私の実装のミスなのか、開発者のミスなのか、はっきりしたことは言えません。どちらにも間違いがあると思います。問題は、正しい情報がないことです。
 
fxsaber
SGDJPYでFIBOGroup-MT5サーバーとMetaQuotes-Demoサーバーで証拠金が何倍も違うという現象が発生したことがあります。これは、MT5自体が誤差を含んだマージンを計算して いることを示唆しています。まあ、そうなると、比較する基準がないんですけどね。したがって、これが私の実装のミスなのか、開発者のミスなのか、はっきりしたことは言えません。どちらにも間違いがあると思います。問題は、正しい情報がないことです。

2つのサーバーが正しく表示されていますが、1つの例外があります(赤でハイライトされています)。

赤色で表示されている物件はどうすれば確認できますか?

ありがとうございました。

 
Vitaly Muzichenko:

2つのサーバーが正しく表示されていますが、1つの例外があります(赤でハイライトされています)。

赤色で表示されているプロパティを確認するにはどうしたらよいですか?

ご指摘ありがとうございます。荒野では、SymbolInfoMarginRate です。だから、今はこんな感じです。
// Размер свободных средств, необходимых для открытия 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);
}

MT5では、方向によって必要な証拠金が大きく異なる可能性があることを明確に理解する必要があります。すなわち、単一のMT4バリアントが機能しない場合があります。もちろん、FXの場合はそうではないでしょう。でも、忘れてはいけないことがあります。したがって、一般的には次のように書けばよいでしょう。
// Альтернатива 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
それが実現したのです。
そうです、その通りです。
 

FIBOGroup-MT5サーバーSGDJPYでのMT5ジョーク。

この場合、MyOrderCalcMarginは正しくカウントされますが、通常のOrderCalcMarginはカウントされません!

 
fxsaber

FIBOGroup-MT5サーバーSGDJPYにMT5のいたずら

この場合、MyOrderCalcMarginは正しくカウントされますが、通常のOrderCalcMarginはカウントされません!

ヘッジマージンを計算する方法はありますか?