Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
A solução veio logo a seguir.
double GetMarginRequired( const string Symb )
{
MqlTick Tick;
return(SymbolInfoTick(Symb, Tick) ? Tick.ask * SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) * SymbolInfoDouble(Symb, SYMBOL_TRADE_CONTRACT_SIZE) *
SymbolInfoDouble(Symb, SYMBOL_POINT) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
Óptimo, tudo o que temos de fazer é trazer margem na moeda de depósito, porque a margem, por exemplo, para o AUDCAD com moeda de depósito USD precisa de estar em USD.
Ótimo, a única coisa que resta é trazer margem em moeda de depósito, porque para o AUDCAD, por exemplo, a moeda de depósito deve ser em USD.
Isto é o que tem sido feito.
Tudo está funcionando bem em forex, exceto a pergunta final, "por que a metade, e como eu conserto isso?".
Tudo está funcionando bem em forex, mas há uma última pergunta: "por que foi reduzido pela metade e como consertar isso?"
Descobri que no SGDJPY a margem é vezes diferente no FIBOGroup-MT5 Server e MetaQuotes-Demo servers. Isto sugere que a própria MT5 calcula a margem com erros. E como é assim, não há nenhuma referência para comparação. Portanto, não posso dizer com certeza se isto é um erro da minha implementação ou dos desenvolvedores. Eu acho que há um erro em ambos os casos. O problema é a falta de informação correcta.
Os meus dois servidores aparecem correctamente, com uma excepção - destacado a vermelho
Como é que eu descubro o imóvel destacado a vermelho?
Obrigado!
Eu tenho dois servidores mostrando corretamente, com uma exceção - destacado em vermelho
Como posso descobrir o imóvel destacado em vermelho?
double GetMarginRequired( const string Symb )
{
MqlTick Tick;
double MarginInit, MarginMain;
return((SymbolInfoTick(Symb, Tick) && SymbolInfoMarginRate(Symb, ORDER_TYPE_BUY, MarginInit, MarginMain)) ? MarginInit * Tick.ask *
SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
Você tem que entender claramente que na MT5 pode haver requisitos de margem muito diferentes em diferentes direções. Ou seja, uma única variante do MT4 pode não funcionar. No Forex, é claro, este não será o caso. Mas tens de te lembrar. Portanto, em geral, você deve escrevê-lo desta forma
bool MyOrderCalcMargin( const ENUM_ORDER_TYPE action, const string symbol, const double volume, const double price, double &margin )
{
double MarginInit, MarginMain;
const bool Res = SymbolInfoMarginRate(symbol, action, MarginInit, MarginMain);
margin = Res ? MarginInit * price * volume * SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE) /
(SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0;
return(Res);
}
Isso foi o que foi feito.
Piada MT5 no servidor FIBOGroup-MT5 SGDJPY
Nesta situação MyOrderCalcMargin conta corretamente, mas o normal OrderCalcMargin não conta!
Truque MT5 no servidor FIBOGroup-MT5 SGDJPY
Nesta situação MyOrderCalcMargin conta corretamente, mas o normal OrderCalcMargin não conta!