프로그래밍 방식으로 "마진 백분율"을 얻는 방법 - 페이지 7

 
K-2SO :

테스트에 따르면 마진 비율이 1과 같을 때 레버리지는 고려되지 않습니다! 그러나 100 이상부터는 이미 고려됩니다. 2에서 99까지의 마진 비율을 가진 브로커를 찾을 수 없다는 것이 유감입니다.

뭔가 잘못. 레버리지는 1스탠다드 랏당 마진에서 이 백분율을 계산한 다음 레버리지를 고려할 때 사용됩니다.

이 스크립트를 컴파일하고 미결 주문이 있으면 아무 쌍에서나 실행하십시오.

 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 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;
      accountMargin += orderMargin;
       Print (symbolCurencyMargin, " ******** Маржа " , symbol, " = " , orderMargin);
    }
  }
 Print ( AccountInfoString ( ACCOUNT_CURRENCY ), " ******** AccountMargin = " , DoubleToString (accountMargin, 2 ));
} /********************************************************************/
미결 주문이 2개뿐이며 올바르게 표시됩니다.
 
Alexey Viktorov :

뭔가 잘못. 레버리지는 1스탠다드 랏당 마진에서 이 백분율을 계산한 다음 레버리지를 고려할 때 사용됩니다.

이 스크립트를 컴파일하고 미결 주문이 있으면 아무 쌍에서나 실행하십시오.

미결 주문이 2개뿐이며 올바르게 표시됩니다.

만들어진. 지금 은 시장이 닫혀 있는 동안 금 주문이 열려 있는 동안 데모가 있습니다. 내 말은 인스타에서 확인되었습니다(여백 백분율: 1) 귀하의 스크립트에는 일종의 공백이 표시됩니다 ...

여백 비율이 100 및 200인 메타 인용 및 robo의 경우 모든 것이 정확합니다.

 
Renat Akhtyamov :
100의 레버리지로 5달러의 데모 계정을 열고 예를 들어 동일한 금 또는 더 쿨러의 경우 - 루블의 경우 마진 %가 얼마인지 확인하십시오...
나는 아직 마진율 계산을 마스터하지 못했고, 이미 계산의 논리를 깨달은 것 같지만 아직 코드를 작성하지 않았습니다. 자신의 것이 있으면 무슨 말인지 확인합시다)
 
K-2SO :

만들어진. 지금 은 시장이 닫혀 있는 동안 금 주문이 열려 있는 동안 데모가 있습니다. 내 말은 인스타에 의해 확인되었습니다(여백 비율: 1) 귀하의 스크립트는 일종의 공백을 보여줍니다 ... 그러나 SYMBOL_CURRENCY_MARGIN 과 같은

여백 비율이 100 및 200인 메타 인용 및 robo의 경우 모든 것이 정확합니다.

글쎄, 나는 무엇이 잘못되었는지 이해하지 못한다. 여기에서 마진 백분율 = 1이고 계약 크기가 통화에서와 같이 100,000이 아닌 1000인 오일에 대해 2개의 추가 주문을 열었습니다.

다음은 인쇄하는 내용입니다.

 2017.06 . 05 08 : 40 : 04.978 test EURUSD.e,H1: USD ******** AccountMargin = 2207.23
2017.06 . 05 08 : 40 : 03.360 test EURUSD.e,H1: US_ ******** Маржа BRENT = 508.0
2017.06 . 05 08 : 39 : 34.326 test EURUSD.e,H1: US_ ******** Маржа WTI = 484.9
2017.06 . 05 08 : 39 : 25.185 test EURUSD.e,H1: XAU ******** Маржа XAUUSD.e = 840.4333333333334
2017.06 . 05 08 : 39 : 19.651 test EURUSD.e,H1: EUR ******** Маржа EURUSD.e = 373.8933333333333

여기 사진이 있습니다


어떤 이유로 페니까지 나타납니다.

그래서 글과는 별개로 사진을...

 
Alexey Viktorov :

그래서 글과는 별개로 사진을...


다음과 같은 곳(로트 0.05, 레버리지 300):

 2017.06 . 05 12 : 06 : 11.968 Script gold_test_vik XAUUSD,H1: removed
2017.06 . 05 12 : 06 : 11.953 gold_test_vik XAUUSD,H1: uninit reason 0
2017.06 . 05 12 : 06 : 11.953 gold_test_vik XAUUSD,H1: USD ******** AccountMargin = 8193395.74
2017.06 . 05 12 : 06 : 11.953 gold_test_vik XAUUSD,H1: USD ******** Маржа XAUUSD = 8193395.736
2017.06 . 05 12 : 06 : 11.953 gold_test_vik XAUUSD,H1: initialized
2017.06 . 05 12 : 06 : 11.937 Script gold_test_vik XAUUSD,H1: loaded successfully

 
K-2SO :


다음과 같은 위치(로트 0.05, 레버리지 300):

분명한. 증거금 통화 에 주의하십시오. 내 버전 XAU와 USD에서 이 줄로 뭔가를 해야 합니다.

 double price = symbolCurencyMargin == "USD" ? 1 : tupe == OP_BUY ? bid : ask;

견적이 계산에 고려되도록. 기호 경로를 추가할 수 있습니다.

그리고 다시 확인하려면 이 줄을 다음과 같이 변경하십시오.

 double price = tupe == OP_BUY ? bid : ask;

그러나 통화에 의존하는 것은 잘못된 것입니다.

일반적으로 보편성을 위해 상품 경로에 대한 모든 옵션과 증거금 통화에 대한 옵션을 고려해야 합니다.

 
Alexey Viktorov :

분명한. 증거금 통화 에 주의하십시오. 내 버전 XAU와 USD에서 이 줄로 뭔가를 해야 합니다.

견적이 계산에 고려되도록. 기호 경로를 추가할 수 있습니다.

그리고 다시 확인하려면 이 줄을 다음과 같이 변경하십시오.


여전히 틀립니다. 순서는 동일하며 결과는 다음과 같습니다.

 2017.06 . 05 12 : 47 : 50.984 gold_test_vik XAUUSD,H1: USD ******** AccountMargin = 6392.70
2017.06 . 05 12 : 47 : 50.984 gold_test_vik XAUUSD,H1: USD ******** Маржа XAUUSD = 6392.7
알렉세이 빅토로프 :

일반적으로 보편성을 위해 상품 경로에 대한 모든 옵션과 증거금 통화에 대한 옵션을 고려해야 합니다.

증거금에 대해서는 명확하지만, 우리가 말하는 상품의 경로에 대한 옵션은 무엇입니까?


추신 공식에 따르면 레버리지를 고려하지 않고 모든 것이 정확하게 계산됩니다.

margin=( OrderLots ()*contract* OrderOpenPrice ())/ 100 *Percentage; // инста - процент маржи 1% 
 
K-2SO :

여전히 틀리고 순서는 동일하며 결과는 다음과 같습니다.

증거금에 대해서는 명확하지만, 우리가 말하는 상품의 경로에 대한 옵션은 무엇입니까?


추신 공식에 따르면 레버리지를 고려하지 않고 모든 것이 정확하게 계산됩니다.

네, 제가 좀 망쳤습니다... 부지의 크기는 전혀 고려되지 않습니다. 1개의 표준 로트에 대한 주문이 있기 때문에 올바르게 표시됩니다... 이 라인을 추가해야 합니다.

orderMargin = ( OrderLots ()* size*orderOpenPrice*percentage/ 100 )/leverage;

기호에 대한 경로는 다음과 같이 정의됩니다.

 SymbolInfoString (symbol, SYMBOL_PATH );

하지만 이름에 모호함이 없어 조건을 설정하기가 쉽지 않다.

ecn 데모의 Robo에는 이 경로가 있습니다.


그리고 센트에

다른 사람들도 비슷할 수 있지만 분명한 것은 아닙니다. 물론 부분 문자열로 비교할 수도 있지만 보편성을 확보하기 위해서는 경로가 있는 많은 DC를 확인해야 합니다.

비록 ... 담보 계산 방법을 확인하려고 할 수 있습니다.

지금 확인하겠습니다.

 
Alexey Viktorov :

네, 제가 좀 망쳤습니다... 부지의 크기는 전혀 고려되지 않습니다. 1개의 표준 로트에 대한 주문이 있기 때문에 올바르게 표시됩니다... 이 라인을 추가해야 합니다.

추가했지만 여전히 결과가 잘못됨)

알렉세이 빅토로프 :

기호에 대한 경로는 다음과 같이 정의됩니다.

이 경로를 사용해야 하는 방법, 위치 및 이유에 대해 이야기하고 있습니다.
 

글쎄, 출혈성 ... 어떻게 생각하는지 확인하십시오.

 void OnStart ()
{
 double contractSize = 0 , orderMargin = 0 , accountMargin = 0 ; double percentage = 0 ;
 long leverage = 0 ;
 for ( int i = 0 ; i < OrdersTotal (); i++)
  {
   int type = - 1 ;
   if ( OrderSelect (i, SELECT_BY_POS ))
    {
      type = OrderType ();
     string symbol = OrderSymbol ();
     string symbolCurencyMargin = SymbolInfoString (symbol, SYMBOL_CURRENCY_MARGIN );
     double orderLots = OrderLots ();
      leverage = AccountInfoInteger ( ACCOUNT_LEVERAGE );
     double margin = MarketInfo (symbol, MODE_MARGINREQUIRED );
     double ask = MarketInfo (symbol, MODE_ASK );
     double bid = MarketInfo (symbol, MODE_BID );
     int calcMode = int ( SymbolInfoInteger (symbol, SYMBOL_TRADE_CALC_MODE ));
     int stringFind = StringFind (symbol, "USD" );
     double price = stringFind == 0 ? 1 : type% 2 == OP_BUY ? bid : ask;
     double orderOpenPrice = stringFind == 0 ? 1 : OrderOpenPrice ();
      contractSize = SymbolInfoDouble (symbol, SYMBOL_TRADE_CONTRACT_SIZE );
      percentage = NormalizeDouble (margin/(contractSize*price/ 100 )*(calcMode == 0 ? leverage : 1 ), 0 );
      orderMargin = (orderLots*contractSize*orderOpenPrice*percentage/ 100 )/(calcMode == 0 ? leverage : 1 );
       Print ( "******** Процент маржи " , int (percentage), " Маржа ордера " , symbol, " " , orderLots, " = " , orderMargin);
       if (type < OP_BUYLIMIT )
       accountMargin += orderMargin;
    }
  }
 Print ( "******** AccountMargin = " , DoubleToString (accountMargin, 2 ), " " , AccountInfoString ( ACCOUNT_CURRENCY ));
} /********************************************************************/
보류 주문 도 계산하기 위해 만들었지만 총 마진 금액은 포함되지 않았습니다.