Sviluppatori! Testate anche quello che create? - pagina 11

 

cartapesta, c-4

Il modello di risposta del server esistente tramite OnTradeTransaction

mi sta bene e funziona nel mio EA, MA

il mio primo messaggio è stato che nessun messaggio è stato restituito (per niente) dal server,

che l'affare è stato fatto (l'ordine è stato riempito da 1) e il secondo errore è stato

Il secondo errore è stato che invece di una risposta che l'ordine è stato piazzato una risposta che è stato eseguito parzialmente (duplicato).

Il problema non era con il gestore (non ho reclami contro di esso) ma con la risposta del server (una risposta non arrivava affatto e l'altra era sbagliata).

Il modello di lavoro con le risposte del server nel mio EA NON è basato sulla sequenza delle risposte del server, MA la risposta deve essere ed essere corretta.

Ecco cosa è successo (foto del primo post):

L'Expert Advisor ha piazzato un ordine con un volume di 3.

L'ordine è stato eseguito da uno - le risposte del server sono corrette.

Poi l'Expert Advisor ha modificato l'ordine - la risposta del server è ORDER_STATE_PARTIAL - e la risposta avrebbe dovuto essere ORDER_STATE_PLACED.

Poi l'ordine è stato eseguito per un'altra volta senza alcun messaggio dal server.

Un paio di giorni dopo (foto sotto) ho ripetuto questa sequenza - il risultato è cambiato (probabilmente gli sviluppatori hanno corretto qualcosa),

Ho ricevuto un messaggio che la transazione è avvenuta (secondo 21:15:02.232), ma il messaggio sulla modifica non era ancora corretto.

È anche molto allarmante che tre risposte dal server siano arrivate nello stesso momento (21:14:53.049)!

È chiaro che tutto funziona nello stesso thread e che i messaggi si accumulano, ma ancora.... Sto interrompendo l'esecuzione dell'EA,

per ricevere messaggi.

 

papaklass!

Il punto è che i programmi *.ex5 vengono eseguiti in un singolo thread, se

ci saranno molti gestori, sarà ancora peggio.

 
papaklass:

Ora ho controllato specificamente le operazioni OnTrade e OnTradeTransaction.

Tre gestori OnTrade o quattro gestori OnTradeTransaction si attivano su un ordine di compravendita per aprire una posizione di mercato (un ordine di mercato). Ho bisogno di un solo gestore OnPositionOpened per attivare.

Per chiudere una posizione con uno stop loss/stake profit, ci sono 3 gestori OnTrade o 3 gestori OnTradeTransaction attivati invece di un OnPositionClosed. La ridondanza è evidente!

Queste risposte multiple dei gestori di eventi esistenti (OnTrade/OnTradeTransaction) non danno una risposta chiara alla domanda: "Quale evento commerciale è accaduto e qual è il risultato di un'operazione commerciale? Questo fa sorgere la domanda: "Perché tutti questi problemi?"

Con tale elaborazione ridondante degli eventi di trading, possono facilmente verificarsi collisioni di diversi tipi, che porteranno a errori, soprattutto durante l'invio di massa di ordini di trading da parte dei clienti.

Pertanto, ciò che è successo nel tuo caso o nel caso di komposter (timeout) non è sorprendente per me personalmente.

Il modo in cui gli eventi OnTrade e OnTradeTransaction sono implementati mi ha ricordato un episodio accaduto 20 anni fa... Ricordo di aver letto recensioni di nuovi giochi per Spectrum, specialmente quella memorabile, dove era scritto: "... il suono nel gioco è buono in quanto si può spegnere...". Ho quasi lo stesso atteggiamento verso gli eventi OnTrade e OnTradeTransaction, sono buoni solo perché non si possono usare.
 
SWA:
Il modo in cui gli eventi OnTrade e OnTradeTransaction sono implementati mi ha ricordato un episodio di 20 anni fa... Ricordo di aver letto le recensioni di nuovi giochi per Spectrum, particolarmente memorabile era la recensione di un gioco, dove era scritto così: "... il suono nel gioco è buono in quanto è possibile disattivarlo...". Ho più o meno lo stesso atteggiamento nei confronti degli eventi OnTrade e OnTradeTransaction: sono buoni solo se non li si usa.

Io, invece, uso (con successo) questi due gestori!

Se, per qualche motivo, OnTradeTransaction non funziona, controllo

in OnTrade - molto conveniente perché OnTradeTransaction,

e poi OnTrade.

 
Mikalas:

Io, invece, uso (con successo) questi due gestori!

Se, per qualche motivo, OnTradeTransaction non funziona, controllo

in OnTrade - molto conveniente perché OnTradeTransaction,

e poi OnTrade.

Personalmente trovo questa comodità discutibile: perdita di tempo e sovraccarico del canale client-server con richieste di informazioni esatte su ciò che è successo sul server. Può essere una situazione in cui l'informazione duramente conquistata dal server non è più aggiornata e affidabile nel momento in cui la si ottiene.
Sarebbe davvero comodo usare questi eventi (almeno per me) se l'Expert Advisor generasse una richiesta al server con la frequenza necessaria per l'algoritmo di trading come questo
bool TradeTransaction(TIME_REQUEST);
bool Trade(TIME_REQUEST);
// где временная метка может принимать значение к примеру TIME_REQUEST=TimeTradeServer или TIME_REQUEST=TimeGMT

E il server risponderebbe immediatamente a tale richiesta con informazioni complete...

Tuttavia, supponendo che ci siano "ragioni oggettive insormontabili" che rendono impossibile implementare una tale comodità, mi accontento di quello che ho:)

 

Chi può farlo...:)

A proposito, scaricate l'API di Plaza II dal server di scambio e capirete da dove crescono le "gambe".

 
Mikalas:

Per favore, non essere scortese! A proposito, sono già le 10!

E lei ha il diritto di non leggere affatto ciò che è scritto qui!

A cosa serve allora l'argomento? Solo per gridare?

Se pensate che ci sia un errore, confermatelo con log e codice (nessuno decifrerà le vostre foto).
Se volete trovare una soluzione affidabile, ascoltate quello che dicono (abbandonate il modello degli eventi e analizzate lo stato attuale).

Io userei OnTradeTransaction oOnTrade solo per una reazione immediata al cambiamento della situazione commerciale. Ma l'intera elaborazione sarebbe collocata in un gestore, come suggerito da Vasiliy(OnRefresh()).

Buona fortuna!

 
komposter:

A cosa serve allora l'argomento? Solo per gridare?

Se pensate che ci sia un errore, confermatelo con log e codice (nessuno decodificherà le vostre immagini).
Se volete trovare una soluzione affidabile, ascoltate quello che dicono (abbandonate il modello degli eventi e analizzate lo stato attuale).

Io userei OnTradeTransaction oOnTrade solo per una reazione immediata al cambiamento della situazione commerciale. Ma tutta l'elaborazione verrebbe messa in un gestore, come suggerito da Vasiliy(OnRefresh()).

Buona fortuna!

komposter!

O leggi tutto quello che hai scritto o...

2.Qualsiasi cosa io scriva su queste pagine è un MIO diritto come partecipante al forum,

e il maleducato QUALSIASI cosa non è affatto appropriato!

3. Ovunque si gestisca l'errore, se la risposta del server non è quella che dovrebbe essere - il risultato sarà lo stesso - ERROR!

4. Probabilmente non stai commerciando te stesso.

 
Mikalas:
BURNING REMOTE è la risposta a un attacco plateale! Qualunque sia la domanda, questa è la risposta. Avresti potuto essere un eroe... ))
 

pronych e ....

1.>> LUCKY REMOTE è la risposta ad un attacco plateale! Qualunque sia la domanda, questa è la risposta. >> Poteva essere un eroe... ))

Probabilmente hai la giusta percezione del mondo che ti circonda...

2. Siete PROGRAMMATORI o siete "SCRITTORI"?

3. Qualcuno risponda a una semplice domanda: cosa dovrebbe rispondere il server al comando "Modify Order"?

4. Perché la documentazione allora? Articoli? Chiudete gli occhi e sparate quanto volete! Il CLIENTE PAGA comunque (ed è anche quello da prosciugare)!

bool CheckMoney()
{
  return(ВАСЯ_ПУПКИН);
}
Motivazione: