Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 8

 

Dice nell'Aiuto

ENUM_SYMBOL_CALC_MODE

Identificatore

Descrizione

Formula

SIMBOLO_CALC_MODO_FOREX

Modalità Forex - calcolo del profitto e del margine per il Forex

Margine: Lotti*dimensione del contratto/leva

Profitto: (close_price-open_price)*Contract_Size*Lots

SYMBOL_CALC_MODE_FUTURES

Modalità Futures - calcola il margine e il profitto per i futures

Margine: Lotti *InitialMargin*Percentage/100

Profitto: (close_price-open_price)*TickPrice/TickSize*Lots

SYMBOL_CALC_MODE_CFD

Modalità CFD - calcolo del margine e del profitto per CFD

Margine: Lots *ContractSize*MarketPrice*Percentage/100

Profitto: (close_price-open_price)*Contract_Size*Lots

SYMBOL_CALC_MODE_CFDINDEX

Modalità indice CFD - calcolo del margine e del profitto per gli indici CFD

Margine: (Lotti*Dimensione contratto*Prezzo di mercato)*TickPrice/TickSize

Profitto: (close_price-open_price)*Contract_Size*Lots

SYMBOL_CALC_MODE_CFDLEVERAGE

Modalità di leva CFD - calcolo del margine e del profitto per i CFD quando si fa trading con la leva

Margine: (Lotti*Dimensione contratto*Prezzo di mercato*Percentuale)/Leva

Profitto: (close_price-open_price)*Contract_Size*Lots

SYMBOL_CALC_MODE_EXCH_STOCKS

Modalità di scambio - calcolo del margine e del profitto per la negoziazione di titoli in borsa

Margine: Lotti*GrandezzaContratto*PrezzoAperto

Profitto: (close_price-open_price)*Contract_Size*Lots

SYMBOL_CALC_MODE_EXCH_FUTURES

Modalità Futures - calcolo del margine e del profitto per il trading di contratti futures in borsa

Margine: Lotti*InitialMargin o Lotti*MaintenanceMargin

Profitto: (close_price-open_price)*Lotti*TickPrice/TickSize

SYMBOL_CALC_MODE_EXCH_FUTURES_FORTS

FORTS Futures mode - calcolo del margine e del profitto per il trading di contratti futures su FORTS. La dimensione del margine può essere diminuita dal valore di MarginDiscount secondo le seguenti regole:

1. Se il prezzo di una posizione lunga (ordine di acquisto) è inferiore al prezzo calcolato, MarginDiscount = Lots*((PriceSettle-PriceOrder)*TickPrice/TickSize)

2. Se il prezzo di una posizione corta (ordine di vendita) è superiore al prezzo di regolamento, allora MarginDiscount = Lotti*((PrezzoOrdine-PrezzoSettle)*TickPrice/TickSize)

dove:

    • PriceSettle - prezzo di liquidazione (clearing) della sessione precedente;
    • PriceOrder - prezzo medio ponderato di una posizione o prezzo di apertura specificato nell'ordine (order);
    • TickPrice - prezzo di tick (costo del cambiamento di prezzo di un punto);
    • TickSize - dimensione del tick (passo minimo del cambiamento di prezzo)

Margine: Lotti*InitialMargin o Lotti*MaintenanceMargin

Profitto: (close_price-open_price)*Lotti*TickPrice/TickSize

SYMBOL_CALC_MODE_SERV_COLLATERAL

Modalità collaterale - lo strumento viene utilizzato come asset non di trading nel conto di trading. Il valore di mercato della posizione aperta è calcolato in base al volume, al prezzo corrente di mercato, alla dimensione del contratto e al rapporto di liquidità. Il valore è contabilizzato nell'Attivo, che viene aggiunto al Patrimonio netto. Quindi, le posizioni aperte in tale strumento aumentano il Free Margin e servono come garanzia aggiuntiva per le posizioni aperte in strumenti negoziati

Margine: no

Profitto: no

Valore di mercato: Lots*ContractSize*MarketPrice*LiqudityRate

 
fxsaber:

C'è scritto nella Guida.

Con tutto il rispetto, ho intenzione di riportarla alla sua lettura

P.S.

Puoi ottenerlo, ma se usiamo AUDCAD, otterremo il margine in valuta AUD, mentre il conto è denominato in dollari. Se usi il prezzo AUDUSD, otterrai la quantità di margine richiesta, ma non è universale e cattivo, perché ci sono conti con prefissi e suffissi, e qui inizia tutta una storia. Inoltre, potrebbe semplicemente non esserci nessuna coppia aperta nella panoramica del mercato e il calcolo è un vicolo cieco.

Un programma che lavora con il denaro (affermazione degli sviluppatori) non può calcolarlo. Il vecchio, cattivo e lento mt4 poteva lavorare con i soldi, ma il nuovo e fantasioso mt5 non può. Come mai?

 
fxsaber

Usa questa formula dal link:

Per esempio calcoliamo il collaterale per CADJPY, otteniamo il collaterale in CAD

SymbolInfoDouble("CADJPY",SYMBOL_TRADE_CONTRACT_SIZE) / AccountInfoInteger(ACCOUNT_LEVERAGE)*0.7625 // СADUSD

Vedo0,7625, è il prezzo del CADUSD ma il terminale non ha nemmeno questa coppia nei suoi calcoli.

È così difficile trasferire la funzione"MODE_MARGINREQUIRED" in mt5 usando il metodo del "copia-incolla", facilitando così la vita degli sviluppatori?

 
Artyom Trishkin:
Vorrei avere un calcolo indipendente dal tipo di programma.
Gli sviluppatori pensano che il calcolo del margine (e alcune altre funzioni informative) sia una funzione di trading e dovrebbe essere vietato negli indicatori. Ho iniziato un thread serio su questo argomento - i suoi moderatori lo hanno subito tagliato, come al solito, in modo anonimo. Ora non mi interessa, ha postato un indicatore castrato senza margine in KB.
 
Vitaly Muzichenko:

Con tutto il rispetto, ho intenzione di riportarla alla sua lettura

Lo ammetto, sono stato disattento. In qualche modo ho sempre trovato inutile il calcolo dei margini. Soprattutto negli indicatori. Dove può essere necessario negli indicatori?

Penso che la soluzione sia molto semplice. Quando sarò libero, ci penserò.

 
Vitaly Muzichenko:

Puoi ottenerlo, ma se usiamo AUDCAD, otterremo il margine in valuta AUD, e il conto è denominato in dollari. Se usiamo il prezzo AUDUSD, otteniamo il margine richiesto, ma non è universale e cattivo, perché ci sono conti con prefissi e suffissi e qui inizia tutta una storia. Inoltre, potrebbe semplicemente non esserci nessuna coppia aperta nella panoramica del mercato e il calcolo andrà in fumo.

E quale sarà il ritorno dei quattro se AUDUSD non è nella panoramica del mercato?

Per il compito specifico della riflessione sui margini nell'indicatore è possibile costruire una stampella, tenendo conto dei prefissi e dei suffissi (o utilizzando un consigliere ausiliario). C'è tutto per il commercio.

 
Andrey Khatimlianskii:

E quale sarà il ritorno dei quattro se AUDUSD non è nella panoramica del mercato?

Per il compito specifico della visualizzazione dei margini nell'indicatore, si può costruire una stampella che tenga conto di prefissi e suffissi (o usare un EA ausiliario). E per il commercio, tutto sembra essere lì.

Quattro restituirà"MODE_MARGINREQUIRED" )

Alexey Volchanskiy:
Penso che calcolare il margine (e qualcos'altro dalle funzioni informative) sia una funzione di trading e dovrebbe essere vietato negli indicatori. Ho iniziato un thread serio su questo argomento - i suoi moderatori l'hanno subito tagliato, in modo anonimo come sempre. Ora non mi interessa, ha postato un indicatore castrato senza margine in KB.

È davvero il commercio? ))) Anche se sì, sparare non è proibito. Mi chiedo cosa commercia, apre o chiude, o solo modifica gli ordini?

fxsaber:

Lo ammetto, sono stato disattento. Non ho sempre avuto bisogno del calcolo del margine. Inoltre, non è necessario negli indicatori. Dove può essere necessario negli indicatori?

Penso che la soluzione sia molto semplice. Quando sarò libero, lo inventerò.

Oltre alla MA e allo stocastico, ci sono indicatori informativi. Per esempio, l'indicatore di informazione per conoscere il deposito prima di fare un affare (osservare MM), calcolare il lotto e vedere se si adatta alle condizioni del vostro TS o non entrare nel commercio e aspettare un altro segnale. E questo è solo un singolo esempio del suo utilizzo.

 
fxsaber:

Penso che la soluzione sia molto semplice. Ci penserò quando sarò libero.

La soluzione è arrivata immediatamente.
// Размер свободных средств, необходимых для открытия 1 лота на покупку
double GetMarginRequired( const string Symb )
{
  MqlTick Tick;

  return(SymbolInfoTick(Symb, Tick) ? Tick.ask * SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) /
        (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
Questo è un calcolo per il FOREX. Il resto è per analogia.
 
fxsaber:
La soluzione è arrivata subito.
// Размер свободных средств, необходимых для открытия 1 лота на покупку
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);
}
Questo è il calcolo per il FOREX. Il resto è simile.
Grazie mille, c'è ancora un bug con le coppie di yen
 
Vitaly Muzichenko:
Grazie mille, c'è ancora un bug con le coppie di yen
Sì, ho fatto un po' di confusione. Ora è corretto.
Motivazione: