マージンはどのように計算するのですか?

 

こんにちは。

突然、未決済ポジションの証拠金が大幅に増加(20倍)する事態に遭遇した。ブローカーが未決済ポジションの必要証拠金を増額した疑いがある。この仮定は、AccountMarginの値が、この商品と設定されたレバレッジの計算値の数倍と異常に高いことから確認される。

そのような状況にある口座の一つでは、預金の負荷を減らすため、ストップ・アウトを許さないために、最後に最も量の多いオープン・ポジションを損失で決済する必要がありました。そして、ある時点(別の負けポジションを決済した後)で、AccountMarginの値は計算されたレベルに戻 りました。おそらく、一度に気がつかなかったので、どのポジションに証拠金規制の強化が適用されたのか、はっきりしたことは言えません。

もう一つの口座では、ロック注文を開く以外はまだ何もしていません。今、私はブローカーに、どの注文が必要証拠金を増やして開設されたかをクレームする必要があります。そして、これには疑問が残ります。

ターミナルで、各オープンポジションの担保(証拠金)額を個別に確認する方法はありますか?ターミナルでは、証拠金の合計額しか表示されませんが、同じ値が AccountMargin() によって返されます。MQL4リファレンスでは、Orderという接頭辞を持つ適切な関数が見つかりませんでした。この値は OrderGetDouble() を使って取得できると考えるのが自然であるが、やはりENUM_ORDER_PROPERTY_DOUBLE には適切な値がない。

MT4ターミナルで1つのオープンポジションの保証金サイズを実際に取得する方法を教えてください。

 
こちらで 読むことができます。
Как получить программно "Процент маржи"
Как получить программно "Процент маржи"
  • 2017.05.31
  • www.mql5.com
В окне терминала "Спецификации контракта" есть пункт "Процент маржи...
 
Alexey Viktorov:
こちらで お読みいただけます。

ありがとうございます、読ませていただきました。7 ページに、各オープンポジションの証拠金計算値を計算するスクリプトがあります。CFDではなくFOREXであることを考慮して少し調整し、このような形にまとめました。

void OnStart()
{
 double size = 0, percentage = 0, orderMargin = 0, accountMargin = 0;
 long leverage = 0;
 for(int i = 0; i < OrdersTotal(); i++)
  {
   int tupe = -1;
   if(OrderSelect(i, SELECT_BY_POS) && (tupe=OrderType()) < OP_BUYLIMIT)
    {
     string symbol = OrderSymbol();
     string symbolCurencyMargin = SymbolInfoString(symbol, SYMBOL_CURRENCY_MARGIN);
     double orderOpenPrice = OrderOpenPrice();
     double orderLots = OrderLots();
     double margin = MarketInfo(symbol, MODE_MARGINREQUIRED);
     double ask = MarketInfo(symbol, MODE_ASK);
     double bid = MarketInfo(symbol, MODE_BID);
     double price = symbolCurencyMargin == "USD" ? 1 : tupe == OP_BUY ? bid : ask;
      size = SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE);
      leverage = AccountInfoInteger(ACCOUNT_LEVERAGE);
      percentage = NormalizeDouble(margin/(size*price/100)*leverage, 0);
      //orderMargin = (size*orderOpenPrice*percentage/100)/leverage;
      orderMargin = (orderLots*size*orderOpenPrice)/leverage;
      accountMargin += orderMargin;
      Print(symbolCurencyMargin, " ******** Маржа ", symbol, " = ", orderMargin);
    }
  }
 Print(AccountInfoString(ACCOUNT_CURRENCY), " ******** AccountMargin = ", DoubleToString(accountMargin, 2));
}

このスクリプトが計算する最終的なマージン値は、ほとんどの場合、実際のマージン値と一致する。でも、残念ながら、私の場合は違います。問題は、各注文の証拠金の計算式が、その時点で 有効なレバレッジの値を使用していることです。

しかし、一部のブローカーの規定では、(指弾することなく)特定の条件(金曜夜間、平均法等)で建てたポジションについては、レバレッジが規定されており、通常は口座全体の数倍のレバレッジがかかっています。まさに私の場合です。しかし、今後このような事態を繰り返さないために、どのポジションが通常のレバレッジで建てられ、どのポジションが高いレバレッジで建てられたかを正しく把握する必要があります。

ブローカーのサポートチームは、レバレッジの増加は口座全体ではなく、特定の注文に対して設定され、これはポジションが開かれた後に発生すると公言しています。したがって、AccountFreeMarginChek リクエストを使用することは無駄である。

ブローカーが各ポジションに異なるレバレッジを設定できることが分かっている場合、ターミナルで各ポジションに実際に使用されるマージンを確実に知る方法はありますか?

 
Janis Ozols:

しかし、一部のブローカーの規則では(指をさすのはやめましょう)、特定の条件(金曜日の夜、平均法など)で開いたポジションには特別なレバレッジが設定され、通常は口座全体よりも数倍低く設定されています。まさに私の場合です。しかし、今後このような事態を繰り返さないために、適切な請求をするためには、どのポジションが通常のレバレッジで開設され、どのポジションが高いレバレッジで開設されたかを把握する必要が ありますね。

1)ブローカーは常に正しい。
2) ブローカーが間違っている場合は、ルール1を読んでください。

 
Janis Ozols:

ありがとうございます、読ませていただきました。7 ページに、各オープンポジションの証拠金計算値を計算するスクリプトがあります。CFDではなくFOREXであることを考慮して少し調整し、このような形にまとめました。

このスクリプトが計算する最終的なマージン値は、ほとんどの場合、実際のマージン値と一致する。でも、残念ながら、私の場合は違います。問題は、各注文の証拠金の計算式が、その時点で 有効なレバレッジの値を使用していることです。

しかし、一部のブローカーの規定では、(指弾することなく)特定の条件(金曜夜間、平均法等)で建てたポジションについては、レバレッジが規定されており、通常は口座全体の数倍のレバレッジがかかっています。まさに私の場合です。しかし、今後このような事態を繰り返さないために、どのポジションが通常のレバレッジで建てられ、どのポジションが高いレバレッジで建てられたかを正しく 把握する必要があります。

ブローカーのサポートチームは、レバレッジの増加は口座全体ではなく、特定の注文に対して設定され、これはポジションが開かれた後に発生すると公言しています。したがって、AccountFreeMarginChek リクエストを使用することは無駄である。

ブローカーがポジションごとに異なるレバレッジを設定できることが分かっている場合、ターミナルで各ポジションに実際に使用されているマージンを確実に知る方法はあるのでしょうか?

無駄な通信に時間を費やさないでください。規則に書いてあることなので、議論するのは風車と戦うようなものです。

シンボルではなく、開封の儀 が重要なのです。多くは週末閉店の15分前に持っています。そして15分後の月曜日には、レバレッジが元に戻るのです。

 
Alexey Viktorov:

無駄な通信で時間を浪費しないでください。規則に書いてあることなので、議論するのは風車と戦うようなものです。

主にレバレッジを上げる適用ルールについて明確にしてもらいたいと思い、苦言を呈したい。この点については、レギュレーションがあまり明確ではありません。

私が一番理解したいのは、今後このような事態を避けるにはどうしたらいいかということです。具体的には、私のブローカーの規定では、問題の条項には「会社は権利を留保する」という曖昧な表現が含まれています。つまり、特定の注文に必要な証拠金の増額を適用する場合としない場合があります。したがって、(AccountLeverageによって発行された以外の)増加したレバレッジが適用されたポジションをターミナルで検出する方法を見つけ出すことは、私にとって非常に重要なことなのです。例えば、そのようなポジションを速やかに決済し、トレーダーに通知し、取引を停止することです。

確かに、1つのポジションに対する証拠金の額を端末に要求する方法はありますね。ただ、まだ知らないし、ドキュメントにも載っていない。

 
Janis Ozols:

主にレバレッジを上げる適用ルールについて明確にしてもらいたいと思い、苦言を呈したい。規定上、あまり明確ではありません。

私が一番理解したいのは、今後このような事態を避けるにはどうしたらいいかということです。具体的には、私のブローカーの規定では、問題の条項には「会社は権利を留保する」という曖昧な表現が含まれています。つまり、特定の注文に必要な証拠金の増額を適用する場合としない場合があります。したがって、(AccountLeverageによって発行された以外の)増加したレバレッジが適用されたポジションをターミナルで検出する方法を見つけ出すことは、私にとって非常に重要なことなのです。例えば、そのようなポジションを速やかに決済し、トレーダーに通知し、取引を停止することです。

確かに、1つのポジションに対する証拠金の額を端末に要求する方法はありますね。ただ、まだ知らないし、ドキュメントにも載っていないんです。

あなたのブローカーがどうなのかは知りませんが、何も問題なく、ポジションをクローズして、マージンが増えたケースもあります。これをトレースする方法はない。そして、誰も何の説明もしない。それは、証拠金が増える可能性のあるタイミングでは取引しないことです。これは、レバレッジではなく、証拠金の割合で規制されている可能性が高いです。

 

ポジションを建てる 際に、一般に公開されている計算式を使って、ご自身の証拠金とレバレッジを計算します。

レバレッジを解説に書くか、マジコンに書くか、一般的には-レバレッジを調整した証拠金を一度に書く。

思い出の品になる

 
Alexey Viktorov:

あなたのブローカーはどうか知らないが、すべてがうまくいって、ポジションをクローズして、マージンを増額してもらったケースもある。

私のブローカーでは次のような感じです:ポジションを持ち、証拠金を増額してもらう。そして、ある場合はそうし、ある場合はそうしない(「当社は、・・・する権利を留保します」)。


Alexey Viktorov:

それは、証拠金が増加する可能性のある時間帯に取引をしないことです。これは、レバレッジではなく、証拠金の割合で規制されている可能性が高いです。

私の場合、残念ながら、これは役に立ちません。マージンはいつでも増加させることができます。しかもテコ入れで規制されている。いずれにせよ、レギュレーションではレバレッジについて語られています。このスレッドで特定のブローカーの取引条件を論じることは是非とも避けたいところです。私が本当に興味があるのは、1つのポジションに対する証拠金の額について、ターミナルからどのように情報を得ることができるのかということです。

 
Renat Akhtyamov:

ポジションを建てる 際に、一般に公開されている計算式を使って、ご自身の証拠金とレバレッジを計算します。

レバレッジを解説に書くか、マジコンに書くか、一般的には-レバレッジを調整した証拠金を一度に書く。

思い出に残るものがあるはずです。

ということをやってみた。しかし、問題はポジションを建てた後に マージンが増えることです。つまり、ポジションを建てる前に、それに対する証拠金の計算値を取得するのです。そして、OrderSendの呼び出しが 成功した直後に、端末にAccountMarginの値を聞いています。そして、私の期待に十分に応えてくれる。しかし、しばらくすると、この値が急激に大きくなるのですそして、AccountMarginの値は、オープン直後に取得した各オープンオーダーの証拠 金の数十倍であることが判明した。

私の疑問は、ある特定の注文に対して、端末がどのようにして実際の証拠金の値を 得ることができるのか、ということに尽きる。

これは、口座全体の AccountMargin() または AccountInfoDouble(ACCOUNT_MARGIN) である。そこで、この値を得るには2つの方法があります。少なくとも、注文の証拠金の値を得る方法はあるはずだ。ただ、まだ知らないから聞いているのです。

 
Janis Ozols:

試してみました。しかし、問題はポジションを建てた後に マージンが増えることです。つまり、ポジションを建てる前に、その証拠金の計算値を取得するのです。そして、OrderSendの呼び出しが 成功した直後に、端末にAccountMarginの値を聞いています。そして、私の期待に十分に応えてくれる。しかし、しばらくすると、この値が急激に大きくなるのですそして、AccountMarginの値は、オープン直後に取得した各オープンオーダーの証拠 金の数十倍であることが判明した。

私の疑問は、ある特定の注文に対して、端末がどのようにして実際の証拠金の値を 得ることができるのか、ということに尽きる。

これは、口座全体の AccountMargin() または AccountInfoDouble(ACCOUNT_MARGIN) である。そこで、この値を得るには2つの方法があります。少なくとも、注文の証拠金の値を得る方法はあるはずだ。単にまだ知らないから聞いているのです。

聞くまでもない

検討する

と肩のあたりも。 せいしき

ターミナルは現在のレバレッジを追跡せず、ターミナルをロードしたときのレバレッジを表示します。

そのため、この関数で要求されるマージンは異なります。

理由: