Como obter a "Porcentagem de Margem" de forma programática

 

Na janela do terminal "Especificações do Contrato" há um item "Porcentagem de Margem". Supostamente deve ser devolvido por SymbolInfoDouble(), mas não encontrei nenhum valor entre seus especificadores que permita descobrir esta "Porcentagem de Margem". Como pode ser obtido de forma programática?


 
O que isso significa, esta porcentagem de margem?
 
Alexey Viktorov:
O que isso significa, esta porcentagem de margem?
Ele é usado no cálculo da margem para o CFD. Veja a descrição de ENUM_SYMBOL_CALC_MODE.
 

Desculpe pela pergunta incompleta, eu deveria ter feito uma pergunta mais explícita.

Qual é a finalidade da pergunta? Para verificar se a margem é calculada corretamente/mal? Caso contrário, pode ser calculado a partir dessa fórmula na descrição. E o que você faz com ele?

 
Alexey Viktorov:

Desculpe pela pergunta incompleta, eu deveria ter feito uma pergunta mais explícita.

Qual é o objetivo? Para verificar se a margem é calculada corretamente ou incorretamente?

Com a imaginação correta, você pode chegar a muitos objetivos. :) E não verificar "certo/ errado".

Caso contrário, pode ser calculado a partir da fórmula da descrição.

Como? Bem, é para isso que serve esta "Porcentagem de Margem". Você está sugerindo que digitemos à mão?) O código deve ser capaz de obtê-lo de forma programática.

E então o que fazer com ele?

Agora a questão é - obter o valor da "Porcentagem de margem" de forma programática. Se estiver na tabela, deve ser possível obtê-la de forma programática. E o que fazer a seguir é uma pergunta à parte, que não é relevante para este tópico.
 

verSymbolInfoDouble

SymbolInfoDouble(symbol, SYMBOL_MARGIN_INITIAL);
SymbolInfoDouble(symbol, SYMBOL_MARGIN_MAINTENANCE);
 
Taras Slobodyanik:

ver SymbolInfoDouble


Infelizmente, não é isso. Em MT4, esses valores são, na maioria das vezes, zero.
 

Está bem assim?

double procentMgn;
procentMgn=AccountBalance()*100/MarketInfo("GOLD",MODE_MARGINREQUIRED);
 
Renat Akhtyamov:

está bem assim?

Não, não vai.

1. A função MarketInfo() é obsoleta.

2. MODE_MARGINREQUIRED retorna o resultado correto somente para posições longas, falha para posições curtas.

3. MODE_MARGINREQUIRED retorna o resultado já na moeda do depósito, que eu não preciso.

4. Eu não preciso de porcentagem de depósito. Eu só preciso do valor do parâmetro "porcentagem de margem" para o símbolo. E eu mesmo posso calcular o que eu preciso.

 
ir0407:

Não, não vai.

1. A função MarketInfo() é obsoleta.

2. MODE_MARGINREQUIRED retorna o resultado correto apenas para posições longas, para as curtas está errado.

3. MODE_MARGINREQUIRED retorna na moeda do depósito, que eu não preciso.

4. Eu não preciso de uma porcentagem do depósito. Eu só preciso do valor de "Porcentagem de Margem" para o símbolo. E eu mesmo posso calculá-lo.

Se você precisar dele no MT5, vá para outra seção do fórum.

Você não se surpreende com seu conhecimento comum, ou pior:

1. não é a função MarketInfo(), mas uma expressão, cujo resultado será um percentual de

2. você não tem pelo menos 4 casas decimais, portanto a % de margem para longo e curto será a mesma.

3. Basta multiplicar

procentMgn

Você pode usar 0,01, e ficará feliz.

 
ir0407:

Com a imaginação correta, você pode pensar em muitos alvos. :) E não para o teste certo/mal errado.

Como funciona? Você precisa desta mesma "Porcentagem de Margem". Você quer que eu digite à mão?) O código deve ser capaz de obtê-lo de forma programática.

Agora a questão é - obter o valor da "Porcentagem de margem" de forma programática. Se estiver na tabela, deve ser possível obtê-la de forma programática. E o que fazer a seguir é uma pergunta à parte que não é relevante para este tópico.

Sim, bem... fantasia é tudo... Eu só não entendo por que as pessoas que tentam ajudá-lo devem fantasiar sobre o que você fantasia? De qualquer forma, não é essa a questão.

Como você obtém o que precisa com essa fórmula?

A fórmula em si é Margem = Lotes *Tamanho do contrato*Preço de mercado*Percentagem/100

Portanto Porcentagem = Margem/(Lotes *Tamanho do contrato*Preço de mercado/100)

ir0407:

1. A função MarketInfo() é obsoleta.

Ela ainda não está na lista de funções depreciadas. Portanto, ele produz o valor em falta para determinar a porcentagem da margem.

MarketInfo(_Symbol, MODE_MARGINREQUIRED);

Tendo obtido todos os dados no momento atual, ao preço atual, é fácil recalcular a margem que foi retida quando a ordem foi aberta, ao preço de abertura da ordem.

Se você precisar dele para mql5, você deve usar

bool  SymbolInfoMarginRate( 
   string             name,                     // символ 
   ENUM_ORDER_TYPE    order_type,               // тип ордера 
   double&            initial_margin_rate,      // коэффициент взимания начальной маржи 
   double&            maintenance_margin_rate   // коэффициент взимания поддерживающей маржи 
   );
Устаревшие функции - Справочник MQL4
Устаревшие функции - Справочник MQL4
  • docs.mql4.com
Устаревшие функции - Справочник MQL4