Questo è il calcolo per il FOREX. Il resto è simile.
Bene, tutto ciò che rimane è portare il margine nella valuta di deposito, perché il margine, per esempio, per AUDCAD con la valuta di deposito USD deve essere in USD.
Alexey Volchanskiy: Bene, tutto quello che dobbiamo fare è portare il margine nella valuta di deposito, perché il margine, per esempio, per AUDCAD con valuta di deposito USD deve essere in USD.
Alexey Volchanskiy: Bene, ora abbiamo bisogno di portare il margine nella valuta di deposito, perché il margine, per esempio per AUDCAD con valuta di deposito USD dovrebbe essere in USD.
sembra che SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE ) nella funzione sia solo per questo... per portare i lotti a depositare la valuta
Tutto funziona bene in forex, ma c'è un'ultima domanda: "perché è dimezzato e come lo sistemiamo?
Ho riscontrato che il margine su SGDJPY è diverso sui server FIBOGroup-MT5 Server e MetaQuotes-Demo. Questo suggerisce che MT5 stesso calcola il margine con errori. E poiché è così, non c'è alcun riferimento per il confronto. Pertanto, non posso dire con certezza se questo è un errore della mia implementazione o degli sviluppatori. Credo che ci sia un errore in entrambi i casi. Il problema è la mancanza di informazioni corrette.
fxsaber: Ho riscontrato che su SGDJPY il margine è diverso sui server FIBOGroup-MT5 Server e MetaQuotes-Demo. Questo suggerisce che MT5 stesso calcola il margine con errori. Beh, se questo è il caso, non c'è uno standard di confronto. Pertanto, non posso dire con certezza se questo è un errore della mia implementazione o degli sviluppatori. Credo che ci sia un errore in entrambi i casi. Il problema è la mancanza di informazioni corrette.
Ho due server che mostrano correttamente, con un'eccezione - evidenziata in rosso
Come faccio a trovare la proprietà evidenziata in rosso?
Devi capire chiaramente che in MT5 ci possono essere requisiti di margine molto diversi in diverse direzioni. Cioè una singola variante di MT4 potrebbe non funzionare. Sul Forex, ovviamente, questo non sarà il caso. Ma dovete ricordare. Quindi, in generale, si dovrebbe scrivere così
La soluzione è arrivata subito.
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);
}
Bene, tutto quello che dobbiamo fare è portare il margine nella valuta di deposito, perché il margine, per esempio, per AUDCAD con valuta di deposito USD deve essere in USD.
Bene, ora abbiamo bisogno di portare il margine nella valuta di deposito, perché il margine, per esempio per AUDCAD con valuta di deposito USD dovrebbe essere in USD.
Questo è ciò che è stato fatto.
Tutto funziona bene in forex, tranne che la domanda finale rimane, "perché la metà, e come posso risolvere il problema?
Tutto funziona bene in forex, ma c'è un'ultima domanda: "perché è dimezzato e come lo sistemiamo?
Ho riscontrato che su SGDJPY il margine è diverso sui server FIBOGroup-MT5 Server e MetaQuotes-Demo. Questo suggerisce che MT5 stesso calcola il margine con errori. Beh, se questo è il caso, non c'è uno standard di confronto. Pertanto, non posso dire con certezza se questo è un errore della mia implementazione o degli sviluppatori. Credo che ci sia un errore in entrambi i casi. Il problema è la mancanza di informazioni corrette.
Ho due server che mostrano correttamente, con un'eccezione - evidenziata in rosso
Come faccio a trovare la proprietà evidenziata in rosso?
Grazie!
Ho due server che mostrano correttamente, con un'eccezione - evidenziata in rosso
Come posso scoprire la proprietà evidenziata in rosso?
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);
}
Devi capire chiaramente che in MT5 ci possono essere requisiti di margine molto diversi in diverse direzioni. Cioè una singola variante di MT4 potrebbe non funzionare. Sul Forex, ovviamente, questo non sarà il caso. Ma dovete ricordare. Quindi, in generale, si dovrebbe scrivere così
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);
}
Questo è quello che è stato fatto.
Scherzo MT5 su FIBOGroup-MT5 Server SGDJPY
In questa situazione MyOrderCalcMargin conta correttamente ma il normale OrderCalcMargin no!
Scherzo di MT5 su FIBOGroup-MT5 Server SGDJPY
In questa situazione MyOrderCalcMargin conta correttamente ma il normale OrderCalcMargin no!