마진을 계산하는 방법?

 

안녕하세요!

갑자기 오픈 포지션의 마진이 크게 증가하는 상황(20배)에 직면했습니다. 중개인이 오픈 포지션에 대한 증거금 요구 사항을 높였을 것이라는 의혹이 있습니다. 이 가정은 이 상품에 대해 계산된 값 및 설정된 레버리지보다 몇 배 더 높은 AccountMargin의 비정상적으로 높은 값에 의해 확인됩니다.

그러한 상황에 처한 계정 중 하나에서 나는 예금에 대한 부담을 줄이고 스탑 아웃을 방지하기 위해 손실이 가장 큰 마지막 오픈 포지션을 닫을 수 밖에 없었습니다. 그리고 어느 시점(또 다른 무익한 포지션을 청산한 후)에 AccountMargin 값이 계산된 수준으로 돌아갔습니다. 내가 이것을 즉시 알아차리지 못했을 가능성이 있으며 이러한 이유로 어떤 포지션에 증가된 증거금 요건이 적용되었는지 확실하게 말할 수 없습니다.

다른 계정에서는 잠금 명령을 여는 것 외에는 아직 아무것도 하지 않았습니다. 이제 중개인에게 청구해야 하며 여기에는 증거금 요구 사항이 증가하여 개설된 주문이 표시됩니다. 그리고 이와 관련하여 다음과 같은 질문이 제기됩니다.

터미널에서 각각의 오픈 포지션에 대한 마진(마진)의 양을 별도로 알 수 있는 방법이 있나요? 터미널에서는 총 마진 금액만 볼 수 있으며 AccountMargin() 함수에 의해 동일한 값이 반환됩니다. MQL4 참조에서 Order 접두사가 있는 적절한 함수를 찾지 못했습니다. 이 값을 OrderGetDouble() 함수로 얻을 수 있다고 가정하는 것이 논리적이지만 ENUM_ORDER_PROPERTY_DOUBLE 열거형에서 적절한 값을 찾지 못했습니다.

MT4 터미널에서 단일 오픈 포지션에 대한 마진을 실제로 어떻게 얻을 수 있습니까?

 
여기에서 읽을 수 있습니다.
Как получить программно "Процент маржи"
Как получить программно "Процент маржи"
  • 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가 제공하는 것과 다름)를 식별하는 방법을 파악하는 것이 매우 중요합니다. 예를 들어, 그러한 포지션을 즉시 청산하려면 거래자에게 알리고 거래를 중단하십시오.

확실히 특정 포지션에 대한 마진 금액을 단말기에 물어보는 방법이 있습니다. 아직 잘 모르겠지만 설명서에서 찾을 수 없습니다.

 
Janis Ozols :

증가된 레버리지 적용 규칙에 대한 설명을 얻기 위해 주로 청구를 하고 싶습니다. 이것은 규정에 명확하지 않습니다.

내가 가장 이해하고 싶은 것은 현재 상황을 앞으로 반복하지 않는 방법입니다. 구체적으로 내 중개인의 규정에 귀하가 찾고 있는 항목에 "회사가 권리를 보유합니다"라는 모호한 문구가 포함되어 있습니다. 즉, 특정 주문에 더 높은 증거금 요구 사항을 적용하거나 적용하지 않을 수 있습니다. 따라서 증가된 레버리지가 적용된 터미널의 위치(AccountLeverage가 제공하는 것과 다름)를 식별하는 방법을 파악하는 것이 매우 중요합니다. 예를 들어, 그러한 포지션을 즉시 청산하기 위해 거래자에게 알리고 거래를 중단하십시오.

확실히 특정 포지션에 대한 마진 금액을 단말기에 물어보는 방법이 있습니다. 아직 잘 모르겠지만 설명서에서 찾을 수 없습니다.

나는 당신의 중개인에 대해 모르지만 모든 것이 잘되었을 때 포지션을 닫고 증가된 마진을 얻는 경우가 있습니다. 추적할 방법이 없습니다. 그리고 아무도 설명을 하지 않을 것입니다. 탈출구는 한 가지뿐입니다. 마진을 늘릴 수 있는 시기에 거래하지 마십시오. 아마도 이것은 레버리지가 아닌 마진 비율에 의해 규제됩니다.

 

오픈 소스의 공식을 사용하여 포지션을 열 때 마진을 계산하고 자신을 활용하십시오.

의견이나 마법에 레버리지를 쓰거나 일반적으로 레버리지에 맞게 조정된 마진을 즉시 기록합니다.

그리고 기억할 것이 있을 것이다.

 
Alexey Viktorov :

나는 당신의 중개인에 대해 모르지만 모든 것이 잘되었을 때 포지션을 닫고 증가된 마진을 얻는 경우가 있습니다.

이것이 제 브로커의 경우입니다. 우리는 포지션을 열고 증가된 마진을 얻습니다. 그리고 어떤 경우에는 이해하지만 어떤 경우에는 그렇지 않습니다("회사는 권리를 보유합니다...").


알렉세이 빅토로프 :

탈출구는 한 가지뿐입니다. 마진을 늘릴 수 있는 시기에 거래하지 마십시오. 아마도 이것은 레버리지가 아닌 마진 비율에 의해 규제됩니다.

내 경우에는 이것이 도움이되지 않습니다. 마진은 언제든지 증가할 수 있습니다. 그리고 어깨에 의해 조절됩니다. 어떤 경우든 규정은 특히 어깨에 관한 것입니다. 이 주제에서 특정 브로커의 거래 조건에 대해 논의하는 것은 정말 피하고 싶습니다. 사실, 단일 포지션에 대한 마진 금액에 대한 정보를 터미널에서 어떻게 얻을 수 있는지에 관심이 있습니다.

 
Renat Akhtyamov :

오픈 소스의 공식을 사용하여 포지션을 열 때 마진을 계산하고 활용하십시오.

의견이나 마법에 레버리지를 쓰거나 일반적으로 레버리지에 맞게 조정된 마진을 즉시 기록합니다.

그리고 기억할 것이 있을 것이다.

나는 그것을 하려고 노력했다. 하지만 문제는 포지션을 연 마진이 증가한다는 것입니다. 즉, 포지션을 열기 전에 마진의 계산된 값을 얻습니다. 그리고 OrderSend 를 성공적으로 호출 한 직후 터미널에 AccountMargin 값을 요청합니다. 그리고 그것은 내 기대를 완전히 충족시킵니다. 그러나 잠시 후 이 값이 급격히 증가합니다! 그리고 AccountMargin의 값은 개설 직후에 받은 각 개설 주문의 증거금 금액보다 10배 더 큰 것으로 판명되었습니다.

내 질문은 주어진 시간에 터미널에서 특정 주문에 대한 실제 마진 값을 얻을 수 있는 방법으로 축소할 수 있습니다.

계정 전체의 경우 이것은 AccountMargin() 또는 AccountInfoDouble(ACCOUNT_MARGIN)입니다. 즉, 이 값을 얻는 두 가지 방법이 있습니다. 분명히 주문에 대한 마진을 얻는 방법이 적어도 하나는 있습니다. 제가 아직 잘 몰라서 여쭤봅니다.

 
Janis Ozols :

나는 그것을 하려고 노력했다. 하지만 문제는 포지션을 연 마진이 증가한다는 것입니다. 즉, 포지션을 열기 전에 마진의 계산된 값을 얻습니다. 그리고 OrderSend 를 성공적으로 호출 한 직후 터미널에 AccountMargin 값을 요청합니다. 그리고 그것은 내 기대를 완전히 충족시킵니다. 그러나 잠시 후 이 값이 급격히 증가합니다! 그리고 AccountMargin의 값은 개설 직후에 받은 각 개설 주문의 증거금 금액보다 10배 더 큰 것으로 판명되었습니다.

내 질문은 주어진 시간에 터미널에서 특정 주문에 대한 실제 마진 값을 얻을 수 있는 방법으로 축소할 수 있습니다.

계정 전체의 경우 이것은 AccountMargin() 또는 AccountInfoDouble(ACCOUNT_MARGIN)입니다. 즉, 이 값을 얻는 두 가지 방법이 있습니다. 분명히 주문에 대한 마진을 얻는 방법이 적어도 하나는 있습니다. 제가 아직 잘 몰라서 여쭤봅니다.

물어볼 필요가 없다

계산 공식

어깨도 공식에 따라

터미널은 현재 레버리지를 추적하지 않지만 터미널을 로드할 때 있었던 레버리지를 표시합니다.

따라서 함수에서 요청한 여백이 다릅니다.