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

 
Renat Akhtyamov:
veremos o código.
Você mistura tudo.
 
A1exPit:
Agita tudo.
Então, boa sorte.
 
Renat Akhtyamov:
então, boa sorte.
O código não é importante na pergunta que você fez? Você poderia ter acabado de escrever - não sei, mas funciona de alguma forma.
 
A1exPit:
O código não é importante nesta pergunta? Você poderia ter acabado de escrever "Não sei", mas parece funcionar.

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 está no código - 100%.

 

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? Aquela que estava no momento da abertura da posição ou aquela que está agora (no momento em que queremos saber o valor do depósito para esta posição)?

 
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? Aquela que existia no momento da abertura da posição, ou aquela que existe agora (no momento em que queremos saber o valor do depósito para esta posição)?

margin = MarketInfo(OrderSymbol(),MODE_MARGINREQUIRED) * OrderLots();

O resultado não será exato.

Ou, você pode encontrar a taxa do par de moedas necessário no gráfico até o momento da abertura da ordem, levar em conta o spread (bid/ask) se necessário e calcular o valor mais preciso da margem no momento da abertura da ordem usando a seguinte fórmula

A armadilha pode ser o cálculo da margem em um momento em que a alavancagem era diferente

 
E se a taxa de câmbio EUR/USD estiver escrita no campo de comentários quando o pedido for aberto e depois lida a partir daí?
 
Babu Bonappan:
E se a taxa de câmbio EUR/USD estiver escrita no campo de comentários quando o pedido for aberto e depois lida a partir daí?

Comentário para outros fins.

É assim que se pode saber o preço:

         string Symbol_X="USDCHF";
        
         int bs=iBarShift(OrderSymbol(),Period(),OrderOpenTime());
         double bid_X=iClose(Symbol_X,Period(),bs);
 
Renat Akhtyamov:

Comentário para outros fins.

É assim que se pode saber o preço:

         string Symbol_X="USDCHF";
        
         int bs=iBarShift(OrderSymbol(),Period(),OrderOpenTime());
         double price_X=iClose(Symbol_X,Period(),bs);

Se negociarmos em, digamos, gráficos diários, obteremos o preço de abertura do dia, em algum lugar no meio do qual a ordem em que estamos interessados foi aberta, não? E pode ser significativamente diferente do preço que era no momento da abertura.

 
Babu Bonappan:

Então, se negociarmos, digamos, gráficos diários, obteremos o preço de abertura do dia, em algum lugar no meio do qual a ordem em que estamos interessados foi aberta, não? E pode ser significativamente diferente do preço pelo qual foi aberto.

Ninguém está insistindo em usar o Period()

Especificar expressamente PERÍODO_M15, por exemplo, ou outro

Razão: