Domanda sulla funzione OnTradeTransaction - pagina 4

 
Mikalas:

Questo perché lo scambio non ha cucina (solo commissioni) e FOREX ha milioni di seguaci di MMM,

Ci saranno anche 100 dollari, ma TUTTI li hanno! Soldi enormi, c'è qualcosa da contare! :)

Non capisco MetaQuotes )

Per le cucine forex c'è un ottimo terminale MT4.

Molte cucine forex non forniscono mai l'accesso tramite MT5, non ne hanno bisogno, cazzo.

È impossibile per tanti anni fare un terminale vicino agli scambi?

Se hanno un buon terminale, avranno un sacco di clienti che vogliono fornire servizi MT5.

 
Serj_Che:

Non capisco MetaQuotes )

Per le cucine forex c'è un ottimo terminale MT4.

Molte cucine forex non forniscono mai l'accesso tramite MT5, non ne hanno bisogno, cazzo.

È impossibile per tanti anni fare un terminale vicino agli scambi?

Se abbiamo un buon terminale, ci saranno molti clienti che vogliono fornire servizi MT5.

Non si tratta di MQ, ma di broker.

I broker traggono vantaggio dai clienti che fanno scambi - più scambi - più commissioni.

Il robot farà solo "compravendite corrette", e mettendo gli ordini "a mano" la gente è molto

Il robot farà solo affari "corretti" e mettendo un ordine a mano la gente sbaglia molto spesso (io stesso ho fatto questo errore molte volte),

Ti fai prendere, imprechi, chiudi l'ordine con una perdita, vuoi riprenderlo, l'hai impostato male di nuovo, ecc.

E il broker e la borsa hanno ricevuto una commissione :)

Quindi, per lo scambio e soprattutto per il broker QUIK è la patria.

 
Mikalas:

Vasily, ci sarà una risposta?

Non credo.

Ho vinto?

Ti darò una risposta stasera. In questo momento non posso.
 
C-4:

Non complicare le cose. Non è necessario utilizzare l'asincronia per fare trading su FORTS. Per cominciare, date un'occhiata a questo articolo, capitolo 3: "Le basi delle operazioni asincrone". Non è molto, è molto elementare, ma è sufficiente per iniziare a studiarlo. Il codice descritto lì è asincrono al 100%, tuttavia ciò non impedisce di lavorare in modalità sincrona senza ottenere ogni sorta di eventi OnTradeTransaction e altri.

La soluzione deve essere basata sul vostro compito. In MetaTrader 5, hai solo una posizione attiva in qualsiasi momento, quindi fai attenzione. Non c'è bisogno di guardare la storia dell'ordine. Se hai ancora bisogno della cronologia degli ordini, dovresti chiarire il tuo obiettivo.

No, Vasily, non hai capito bene il mio scopo. Non ho intenzione di scrivere nulla o fare trading su FORTS, ho appena iniziato a imparare mql5. Ho iniziato a leggere questo articolo prima. Ma ho letto non più di 2 pagine e ho rinunciato. Non credo di averne bisogno, io stesso sono un NT. Ma una chiara spiegazione della differenza tra OrderSend e OrderSendAsync è utile. È più o meno quello che mi aspettavo.

Se saltiamo l'invio asincrono dell'ordine e usiamo OnTradeTransaction per tracciare ciò che sta accadendo nel conto, questo non migliorerebbe le prestazioni dell'EA?

Una cosa è eseguire un controllo ad ogni spunta, un'altra cosa è controllare solo se c'è stato qualche cambiamento nel conto. Mi sbaglio? L'ordine in sospeso è stato attivato, abbiamo informazioni su di esso. Una posizione è chiusa, possiamo analizzare il risultato della sua chiusura. Ci sono solo pochi controlli durante il tempo dall'apertura alla chiusura di una posizione. E al contrario, ci sono controlli su ogni tick...

Ecco un'altra domanda: per determinare il profitto di una posizione, c'è la funzione PositionGetDouble(POSITION_PROFIT), ma per determinare il profitto di una posizione chiusa, solo OrderCalcProfit() ha un mucchio di parametri che devono prima essere ottenuti da questo trade. O forse sono così nuovo di mql5 che non riesco a trovare una soluzione adeguata?

Se non ti dispiace...

 
AlexeyVik:

No, Vasily, hai frainteso il mio obiettivo. Non ho ancora intenzione di scrivere qualcosa o fare trading su FORTS, ho appena iniziato a imparare mql5. Ho iniziato a leggere questo articolo prima. Ma ho letto non più di 2 pagine e ho rinunciato. Non credo di averne bisogno, io stesso sono un NT. Ma una chiara spiegazione della differenza tra OrderSend e OrderSendAsync è utile. È più o meno quello che mi aspettavo.

Se scartiamo l'invio asincrono degli ordini e usiamo ancora OnTradeTransaction per tracciare ciò che sta accadendo nel conto, non migliorerà le prestazioni dell'EA?

Una cosa è eseguire un controllo ad ogni spunta, un'altra cosa è controllare solo se c'è qualche cambiamento nel conto. Mi sbaglio? L'ordine in sospeso è stato attivato, abbiamo informazioni su di esso. Una posizione è chiusa, possiamo analizzare il risultato della sua chiusura. Ci sono solo pochi controlli durante il tempo dall'apertura alla chiusura di una posizione. E al contrario, ci sono controlli su ogni tick...

Ecco un'altra domanda: per determinare il profitto di una posizione, c'è la funzione PositionGetDouble(POSITION_PROFIT), ma per determinare il profitto di una posizione chiusa, solo OrderCalcProfit() ha un mucchio di parametri che devono essere prima ottenuti da questo trade. O forse sono così nuovo di mql5 che non riesco a trovare una soluzione adeguata?

Se non è troppo disturbo...

OrderCalcProfit non aiuta.

Devi calcolare il prezzo medio di tutti gli ordini (in) e il prezzo medio di tutti gli ordini (out),

allora il profitto di una posizione chiusa può essere calcolato.

Dovremo cercare nella storia.

 
Mikalas:

OrderCalcProfit non aiuta.

Devi calcolare il prezzo medio di tutti gli ordini (in) e il prezzo medio di tutti gli ordini (out),

Poi possiamo calcolare il profitto di una posizione chiusa.

Dovremo indagare la storia.

In linea di principio, lo capisco (anche se non ho ancora capito come farlo), ma in questo caso, solo l'ultima posizione chiusa è importante per me. Apparentemente questo è più adatto al caso in cui la posizione è stata occupata. Ma il mio compito è diverso.

Ho deciso di riscrivere i miei gufi mql5 con martin. È sul mercato continuamente e apre il prossimo trade verso l'ultima posizione...

Ops... ecco quanto è utile comunicare sul forum. Dopo tutto, se la posizione può solo invertire quando l'ordine pendente viene attivato, o chiudere al take, non mi interessa la dimensione del profitto o della perdita. Beh, se l'ultimo ginocchio darà un meno, allora non avrete bisogno di nulla... È sufficiente conoscere il tipo di posizione chiusa... E questo può essere scritto in una variabile di livello globale nel gestore OnTradeTransaction con tipo di transazione TRADE_TRANSACTION_DEAL_ADD e con tipo di transazione TRADE_TRANSACTION_HISTORY_ADD o con la condizione che PositionsTotal sia uguale a zero per mettere il prossimo primo ordine della serie... Ho scritto questo per me, per non dimenticarlo :)))



 
papaklass:

...Cioè, la logica del vostro algoritmo dovrebbe essere basata sul CAMBIAMENTO DELL'AMBIENTE DI TRADING, e non sull'elaborazione di qualche funzione o evento.

3 La frequenza di controllo dell'ambiente di trading (al tick, alla barra, al timer, ecc.) deve corrispondere alla logica del vostro TS. Cioè, quanto velocemente deve essere elaborato il cambiamento dell'ambiente di trading? Se la logica del vostro TS richiede di elaborare il cambiamento il più rapidamente possibile, allora non potete evitare di controllarlo ad ogni tick...

E se il tuo EA è multi-valuta?
 
papaklass:

1. La funzione OrderSendAsync() è usata quando diversi ordini devono essere inviati UNA volta sola, una specie di invio in batch. Con l'invio in batch, se aspettate che il server risponda ad ogni ordine (usando la funzione OrderSend()), ci sarà un significativo ritardo totale nell'invio dell'intero batch. Durante questo lasso di tempo, il mercato può cambiare significativamente! Per evitare questo ritardo, abbiamo introdotto la funzione OrderSendAsync(). Dovreste capirlo chiaramente.

Se non hai bisogno di inviare ordini in batch, allora non ha senso usare la funzione OrderSendAsync().

Il modo più affidabile per determinare se un ordine, un ordine, ecc. è stato attivato, è monitorare il tuo ambiente di trading. - è il tracciamento del vostro ambiente di trading, non l'attivazione di qualsiasi funzione o evento. Una funzione o un evento può funzionare, ma questo non cambia necessariamente il vostro ambiente di trading. Perché? Perché un errore può semplicemente verificarsi durante l'esecuzione della funzione.

Così, la logica del vostro algoritmo deve essere basata sulla VARIABILE CHANGE, ma non sull'elaborazione di alcuna funzione o evento.

3. la frequenza di controllo dell'ambiente di trading (su un tick, su una barra, per timer, ecc.) deve adattarsi alla logica del vostro TS. Cioè, quanto velocemente devono essere elaborati i cambiamenti dell'ambiente di trading? Se la logica del vostro TS richiede di elaborare un cambiamento il più rapidamente possibile, allora non potete evitare di controllarlo ad ogni spunta.

Alexander, grazie per il tuo feedback.

Lo capisco solo per capire che finora non ne ho bisogno. Per ora la funzione OrderSend mi basta.

2. Sì, sono d'accordo che lo stato più accurato può essere determinato solo monitorando l'intero ambiente ad ogni tick. Ma avere un tale gestore di eventi per ignorarlo... Beh, sto solo sperimentando. Capisco perfettamente il tuo desiderio di aiutarmi a renderlo in qualche modo più affidabile, ma il mio obiettivo è diverso. Non ho bisogno urgentemente di questo Expert Advisor e non lo scrivo su ordinazione.

3. Forse nella versione finale dell'EA tornerò a testare su ogni tick, ma per ora...

La domanda era se potevamo fidarci del gestore dell'evento OnTradeTransaction se la documentazione ci mette in guardia contro di esso

Inoltre, le transazioni possono perdersi nella consegna dal server al terminale.

E in quali casi è meglio non fidarsi, e in quali casi è necessario sostenerlo con qualcosa.

Sono molto grato a tutti, Vasiliy, Michael e tu Alexander. Sarò molto felice e vi ringrazio di nuovo se condividete altri pensieri.

 
papaklass:

Questa è esattamente la domanda a cui sia Vasily che io abbiamo risposto.

Pensateci, se il lavoro della funzione OnTradeTransaction() deve essere controllato lo stesso, potrebbe essere meglio controllare l'ambiente di trading subito piuttosto che dopo che OnTradeTransaction() è stato elaborato. Tuttavia, è una questione di gusti.

E nel prossimo thread Renat ha promesso di lavorare con la funzione e forse nelle prossime build avremo un miglioramento di questa funzione.

Ma ancora, siamo concentrati sul collocamento asincrono degli ordini. In questo caso, non abbiamo motivo di perdere un ordine su centinaia. Eppure Michael dice che in sei mesi con un numero incredibilmente grande di ordini non ha perso una sola transazione. E qual è la probabilità di perdere una transazione se l'ordine viene piazzato usando la funzione OrderSend()?

E se il miglioramento è imminente, è una ragione in più per essere preoccupati. O mi sbaglio di nuovo?

 
denkir:
А если советник мультивалютный?


cartapesta:

Non è chiaro cosa vuoi che ti dica.

Un argomento contro il modello degli eventi...
Motivazione: