Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 15

 
Renat Akhtyamov:
guarderemo il codice.
Mischiate il tutto.
 
A1exPit:
Tu lo rimescoli.
Allora buona fortuna.
 
Renat Akhtyamov:
allora buona fortuna.
Il codice non è importante nella domanda che hai fatto? Avresti potuto scrivere semplicemente - non lo so, ma in qualche modo funziona.
 
A1exPit:
Il codice non è importante in questa domanda? Avresti potuto scrivere semplicemente "non lo so", ma sembra funzionare.

La domanda riguarda il codice, quindi non si può fare senza il codice.

Stai chiedendo dei modificatori o dell'elaborazione degli ordini?

Non so di cosa avete bisogno. Ma l'errore è nel codice - 100%.

 

Per favore consigliate come usare MQL4 per ottenere un valore di margine per ogni posizione aperta nel terminale?

Lo facevo in questo modo:

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

Nel trading di EUR/USD questa costruzione ha funzionato bene ed ero sicuro che la sua logica fosse corretta.

Ma ora voglio ottenere lo stesso risultato per EUR/JPY (o EUR/CHF). Ovviamente, invece diOrderOpenPrice() ho bisogno di moltiplicare il valore di un lotto standard per il tasso della valuta di base alla valuta di deposito (nel mio caso, per EUR/USD). Ma qual è questo tasso? Quello che era al momento in cui la posizione è stata aperta, o quello che è ora (al momento in cui vogliamo conoscere l'importo del deposito per questa posizione)?

 
Babu Bonappan:

Per favore consigliate come usare MQL4 per ottenere un valore di margine per ogni posizione aperta nel terminale?

Io lo facevo così:

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

Nel trading di EUR/USD questa costruzione ha funzionato bene ed ero sicuro che la sua logica fosse corretta.

Ma ora voglio ottenere lo stesso risultato per EUR/JPY (o EUR/CHF). Ovviamente, invece diOrderOpenPrice() ho bisogno di moltiplicare il valore di un lotto standard per il tasso della valuta di base alla valuta di deposito (nel mio caso, per EUR/USD). Ma qual è questo tasso? Quella che esisteva al momento dell'apertura della posizione, o quella che esiste ora (nel momento in cui vogliamo conoscere l'importo del deposito per questa posizione)?

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

Il risultato non sarà accurato.

Oppure, puoi trovare il tasso della coppia di valute necessaria sul grafico al momento dell'apertura dell'ordine, prendere in considerazione lo spread (bid/ask) se necessario e calcolare il valore più preciso del margine al momento dell'apertura dell'ordine utilizzando la seguente formula

Il trabocchetto può essere il calcolo del margine in un momento in cui la leva era diversa

 
Cosa succede se il tasso di cambio EUR/USD viene scritto nel campo dei commenti quando l'ordine viene aperto e poi letto da lì?
 
Babu Bonappan:
Cosa succede se il tasso di cambio EUR/USD viene scritto nel campo dei commenti quando l'ordine viene aperto e poi letto da lì?

Commento per altri scopi.

Ecco come scoprire il prezzo:

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

Commento per altri scopi.

Ecco come scoprire il prezzo:

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

Se facciamo trading su, diciamo, grafici giornalieri, otterremo il prezzo di apertura del giorno, da qualche parte nel mezzo del quale l'ordine che ci interessa è stato aperto, no? E può essere significativamente diverso dal prezzo che era al momento dell'apertura.

 
Babu Bonappan:

Quindi, se facciamo trading su, diciamo, grafici giornalieri, otterremo il prezzo di apertura del giorno, da qualche parte nel mezzo del quale l'ordine che ci interessa è stato aperto, no? E può essere significativamente diverso dal prezzo al quale è stato aperto.

Nessuno insiste sull'uso di Period()

Specificare espressamente PERIOD_M15, per esempio, o un altro