Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 16

 

OK.

O mais importante para mim agora é provavelmente esclarecer por mim mesmo se estou correto ao assumir que para calcular a margem em uma determinada operação, deve ser utilizado um valor fixo da moeda base em relaçãoà moeda de depósito, tomado no momento da abertura da operação. Isto é correto? E a margem sobre este comércio permanece constante até que a ordem seja fechada? Isto é correto?

 
Babu Bonappan:

.....

O mais importante para eu esclarecer é provavelmente se estou ou não correto ao assumir que um valor fixo da moeda base em relação à moeda de depósito, tomado no momento da abertura do comércio, deve ser usado para calcular a margem para um determinado comércio. Isto é correto? E a margem sobre este comércio permanece constante até que a ordem seja fechada? Isto é correto?

Sim, você está correto.

Portanto, o preço para calcular a margem é importante no momento da abertura do pedido

 
Renat, muito obrigado por sua ajuda!
 
Babu Bonappan:
Renat, muito obrigado por sua ajuda!
Você é bem-vindo
 
Renat Akhtyamov:

A questão é sobre o código, então você não pode fazer isso sem o código.

Você está perguntando sobre modificadores ou processamento de pedidos?

Eu não sei do que você precisa. Mas o erro no código é de 100%.

Você não sabe nada, mas está tirando conclusões com confiança.

Eu estou perguntando sobre OrderSelect

 
Babu Bonappan:

Favor aconselhar como usar a MQL4 para obter um valor de margem para cada posição aberta no terminal?

Eu costumava fazer isso desta maneira:

margin = MarketInfo(Symbol(),MODE_LOTSIZE) * OrderOpenPrice() / AccountLeverage() * OrderLots();

Ao negociar o EUR/USD esta construção funcionou bem e eu estava certo de que sua lógica estava correta.

Mas agora eu quero obter o mesmo resultado para EUR/JPY (ou EUR/CHF). Obviamente, ao invés deOrderOpenPrice() eu preciso multiplicar o valor de um lote padrão pela taxa da moeda base para a moeda de depósito (no meu caso, por EUR/USD). Mas qual é essa taxa? A taxa de câmbio que estava no momento da abertura da posição ou a que temos agora (no momento em que queremos saber o valor do depósito para esta posição)?

O OrderOpenPrice - é o preço de abertura do pedido selecionado - não faz nenhuma diferença qual moeda ele está exibindo. Provavelmente deveríamos verificar Ponto e Dígitos. Ou você deve verificar o arredondamento. Em algum lugar há um arredondamento.

NormalizarDuplicar até 5 casas decimais, e precisamos de 3 casas decimais para JPY. E a própria vinculação deve funcionar da mesma forma para todas as moedas.

 
Babu Bonappan:
E se, no momento da abertura do pedido, a taxa de câmbio EUR/USD for escrita no campo de comentários e depois lida a partir daí?
É mais fácil escrever "USDJPY" ao invés de OrderSymbol()
 
A1exPit:
É mais fácil escrever "USDJPY" ao invés de OrderSymbol()

Por que USD/JPY? Afinal, estamos negociando EUR/JPY, portanto 1 lote é 100.000 EUR, enquanto a moeda de depósito é USD. Na minha opinião, neste caso precisamos da taxa de câmbio EUR/USD no momento da abertura de um negócio.

Além disso, se você definir um símbolo forçado no código, o código não será adequado para negociação em outro par de moedas, por exemplo NZD/CAD. Mas eu gostaria de ter uma variante universal. Até agora, só consigo pensar em uma maneira de armazenar o valor do depósito para cada pedido calculado no momento de sua abertura. Talvez pudéssemos criar uma matriz para este fim, onde o bilhete de pedido e seu depósito seriam armazenados. Mas talvez haja uma solução mais trivial.

 
A1exPit:

OrderOpenPrice - Preço de abertura do pedido selecionado - não importa qual moeda está usando, ele dá o preço. Muito provavelmente Pontos e Dígitos devem ser verificados. Ou você deve verificar o Arredondamento. Devemos verificar os arredondamentos.

NormalizeDouble é 5 casas decimais, enquanto JPY precisa de 3 casas decimais. E o aglutinante em si deve funcionar da mesma forma para todas as moedas.

E por que você mente sobre o número de dígitos? Não induzir as pessoas em erro.

 
A1exPit:

OrderOpenPrice - o preço de abertura do pedido selecionado - não importa qual moeda está usando, ele dá o preço.

O OrderOpenPrice, como eu o entendo, dá exatamente o que eu preciso. Mas somente se a moeda de depósito for o dólar e o par negociado for EUR/USD. Neste caso, é como se a OrderOpenPrice armazenasse a taxa de câmbio da moeda base para a moeda de depósito no momento da abertura do pedido sabendo qual é a moeda que você pode facilmente calcular o depósito.

Mas se pelo menos uma dessas condições não for cumprida, como podemos obter o valor do depósito para um pedido individual? Onde podemos encontrar a taxa da moeda base de uma cotação em relação à moeda do depósito no momento de sua abertura?

Sim, temos o tempo de abertura do pedido para o segundo mais próximo. Mas o que podemos conseguir? No máximo - os parâmetros da vela de minuto do símbolo requerido. Mas nunca o valor exato da taxa utilizada para o cálculo do depósito. Mas a função AccountMargin consegue isso de alguma forma! Seria muito interessante entender como exatamente.

Razão: