Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 815

Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Non riesco a capire se è normale che.
Ci sono molte cose difficili da capire qui. In particolare, quando si tratta della sequenza delle transazioni, ho scoperto che ci sono alcune incongruenze in un certo numero di casi.
A mio parere, è meglio organizzare il controllo degli scambi: ricordare gli ordini di compravendita e monitorare la composizione degli ordini e delle posizioni semplicemente per il fatto della loro presenza nelle relative liste.Per esempio, quando si apre una posizione, viene formalmente aperto prima un ordine a mercato, che poi si trasforma in una posizione. Tuttavia, durante questa serie di transazioni a mitraglia c'è una situazione in cui una posizione è già stata aperta, ma l'ordine non è ancora stato chiuso. Chiaramente si tratta dello stesso evento, ma le transazioni sono organizzate in modo frammentario, emesse in sequenza, e con questo approccio è in linea di principio impossibile riflettere correttamente la trasformazione di un ordine di mercato in una posizione.
A proposito di uccelli.
Sapevate che gli ordini di mercato sono emessi in queste transazioni con un prezzo zero?
Per esempio, una persona vuole aprire una posizione Buy a 1.2000, Sl=1.1000, Tr=1.3000.
Quando questa transazione viene eseguita, la prima cosa che appare è l'ordine di mercato con i seguenti dati:
Sl= 1.1000, Tr=1.3000, cioè con le cifre selezionate e Price=0 (uguale a zero). Solo una specie di ordine di mercato con prezzo zero :) E pensa quello che vuoi.
Per comodità. Una piccola funzione è chiamata da MqlTradeTransaction. L'elemento richiesto si trova lì attraverso la ricerca di elementi della classe. E per questo elemento, viene chiamata una delle funzioni di classe che fa qualcosa di utile.
Per favore, descrivi più dettagliatamente cosa vuoi ottenere esattamente? Perché state chiamando qualcosa da OnTradeTransaction?
Prima solo a parole, poi lo correggeremo nella giusta direzione.
Viene eseguita la funzione Abc() dell'utente, che implementa un algoritmo lungo (in termini di tempo).
Durante l'esecuzione di questa funzione, hanno luogo alcuni eventi, per esempio - Trade, Timer, ecc.
È possibile sapere che questi eventi si sono verificati senza terminare l'esecuzione della funzione Abc()?
No. Mentre una funzione è in conteggio, tutto il resto viene saltato.
È simile allafunzioneSleep()- cioè mentre la vostra funzione sta contando per un tempo molto lungo, il suo comportamento è simile a Sleep - tutti gli altri eventi saranno saltati.
...
Assolutamente tutto è trasparente in OnTradeTransaction.
Primo:la struttura MqlTradeTransaction è riempita diversamente a seconda del tipo di transazione commerciale (ENUM_TRADE_TRANSACTION_TYPE).
leggi qui:Struttura di una transazione commerciale (MqlTradeTransaction)
Secondo: Per visualizzare i risultati, possiamo estrarre questo blocco di codice dall'esempioOrderSendAsync
e incollarlo in un Expert Advisor che può essere collegato a un grafico. Poi puoi aprire/chiudere manualmente le posizioni e guardare la stampa dei risultati nella scheda Experts.
No. Mentre una funzione è in conteggio, tutto il resto viene saltato.
È analogo allafunzioneSleep()- cioè, mentre la vostra funzione sta contando per un tempo molto lungo, il suo comportamento è anflogico a Sleep - tutti gli eventi di riposo saranno saltati.
Grazie, è un peccato.
E come utilizzare efficacemente le risorse del PC? Ancora codice in loop e polling periodico dei parametri?
Assolutamente tutto è trasparente in OnTradeTransaction.
Grazie per la risposta, è più o meno quello che ho fatto. Più domande che intuizioni finora...
Per favore, descrivi più dettagliatamente cosa vuoi ottenere esattamente? Perché chiamate qualcosa da OnTradeTransaction?
Prima solo a parole, poi lo correggeremo nella giusta direzione.
Ho capito che il problema non è con OnTradeTransaction. Guarda che casino ho qui:
Ecco il codice.
Ed ecco il risultato della sua esecuzione
2017.09.22 10:30:12 Impossibile selezionare la posizione per simbolo SBRF-12.17
2017.09.22 10:30:12 Volume 0.0 Volume 0.0
Ho scambiato le linee 2 e 3. Cioè il codice è ora
Ottengo un risultato come questo.
2017.09.22 10:30:12 Impossibile selezionare la posizione per simbolo SBRF-12.17
2017.09.22 10:30:12 SBRF-3.18 Volume 1.0 SBRF-3.18 Volume 1.0
In entrambi i casi il compilatore non genera avvertimenti. In allegato c'è il codice di Expert Advisor di 80 linee e le impostazioni di test. Broker BCS. La versione 1730.
Ho capito che il problema non è con OnTradeTransaction. Guarda che casino che ho fatto:
Ecco il codice.
Ed ecco il risultato della sua esecuzione
2017.09.22 10:30:12 Impossibile selezionare la posizione per simbolo SBRF-12.17
2017.09.22 10:30:12 Volume 0.0 Volume 0.0
Ho scambiato le linee 2 e 3. Cioè il codice è ora
Ottengo un risultato come questo.
2017.09.22 10:30:12 Impossibile selezionare la posizione per simbolo SBRF-12.17
2017.09.22 10:30:12 SBRF-3.18 Volume 1.0 SBRF-3.18 Volume 1.0
In entrambi i casi il compilatore non genera avvertimenti. In allegato c'è il codice di Expert Advisor di 80 linee e le impostazioni di test. Broker BCS. La versione 1730.
L'errore sembra essere nel tentativo di ottenere informazioni su più di 1 posizione, in 1 riga(Print).
Solo le informazioni su 1 posizione (selezionata ) sono disponibili in qualsiasi momento:
- Nel secondo caso tutto è corretto, perché l'ultimo Select restituisce true, che non avete controllato.
- E nel primo caso: l'ultimo Select restituisce false, che non hai nemmeno controllato, e il risultato è imprevedibile.
..... ovviamente Select==false resetta le informazioni del precedente Select==true