price differences

 

CIAO

Sto eseguendo un algoritmo di trading, in esecuzione su 3 asset forex.

Funziona così: lo apro su 3 grafici, uno per ogni simbolo che voglio scambiare, e ogni algoritmo su ogni grafico prende i dati dei prezzi di tutti e 3 gli asset.

Vedo che nello stesso momento dà prezzi diversi per lo stesso bene e mi chiedo come sia possibile?

<Translated automatically by moderator's intervention>

 
Fabio.Andreoli:

Hi

I am running an algorithm of trading, running on 3 forex asset.

It works like this: I open it on 3 graphs, one for each symbol I want to trade, and every algo on each graphs takes the datas of the prices of all 3 assets.

I see that at the same moment he gives different prices for the same asset and I am wonder how is it possible?

Se posti il codice possiamo capire il perché. 
 
Michele Catanzaro #:
Se posti il codice possiamo capire il perché. 

Ho provato a fargli prendere i dati in 2 modi:

1:

void OnTick()

{


Ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK);

Bid = SymbolInfoDouble(Symbol(), SYMBOL_BID);


double sym1Bid = SymbolInfoDouble(symbol1, SYMBOL_BID);

double sym2Bid = SymbolInfoDouble(symbol2, SYMBOL_BID);

double sym3Bid = SymbolInfoDouble(symbol3, SYMBOL_BID);


double sym1Ask = SymbolInfoDouble(symbol1, SYMBOL_ASK);

double sym2Ask = SymbolInfoDouble(symbol2, SYMBOL_ASK);

double sym3Ask = SymbolInfoDouble(symbol3, SYMBOL_ASK);


2:

void OnTick()
{

MqlTick symbol1_tick, symbol2_tick, symbol3_tick;
SymbolInfoTick(symbol1, symbol1_tick);
SymbolInfoTick(symbol2, symbol2_tick);
SymbolInfoTick(symbol3, symbol3_tick);

double sym1Bid = symbol1_tick.bid;
double sym2Bid = symbol2_tick.bid;
double sym3Bid = symbol3_tick.bid;

double sym1Ask = symbol1_tick.ask;
double sym2Ask = symbol2_tick.ask;

double sym3Ask = symbol3_tick.ask;


purtroppo escono sempre prezzi diversi:

lo screen è stato fatto dal bot in funzione su conto demo, ma sul live è la stessa cosa

 
Fabio.Andreoli #:

Ho provato a fargli prendere i dati in 2 modi:

1:

void OnTick()

{


Ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK);

Bid = SymbolInfoDouble(Symbol(), SYMBOL_BID);


double sym1Bid = SymbolInfoDouble(symbol1, SYMBOL_BID);

double sym2Bid = SymbolInfoDouble(symbol2, SYMBOL_BID);

double sym3Bid = SymbolInfoDouble(symbol3, SYMBOL_BID);


double sym1Ask = SymbolInfoDouble(symbol1, SYMBOL_ASK);

double sym2Ask = SymbolInfoDouble(symbol2, SYMBOL_ASK);

double sym3Ask = SymbolInfoDouble(symbol3, SYMBOL_ASK);


2:

void OnTick()
{

MqlTick symbol1_tick, symbol2_tick, symbol3_tick;
SymbolInfoTick(symbol1, symbol1_tick);
SymbolInfoTick(symbol2, symbol2_tick);
SymbolInfoTick(symbol3, symbol3_tick);

double sym1Bid = symbol1_tick.bid;
double sym2Bid = symbol2_tick.bid;
double sym3Bid = symbol3_tick.bid;

double sym1Ask = symbol1_tick.ask;
double sym2Ask = symbol2_tick.ask;

double sym3Ask = symbol3_tick.ask;


purtroppo escono sempre prezzi diversi:

lo screen è stato fatto dal bot in funzione su conto demo, ma sul live è la stessa cosa

Premettendo che preferisco più la prima modalità, mi viene da pensare che la differenza di prezzo sia imputabile ad una questione di aggiornamento visto che il codice viene eseguito ad ogni tick, ma i tick non arrivano nello stesso momento per ogni coppia di valute, ma è una supposizione . 
 
Michele Catanzaro #:
Premettendo che preferisco più la prima modalità, mi viene da pensare che la differenza di prezzo sia imputabile ad una questione di aggiornamento visto che il codice viene eseguito ad ogni tick, ma i tick non arrivano nello stesso momento per ogni coppia di valute, ma è una supposizione . 

ok, in effetti è plausibile, anche perché non mi viene in mente nient'altro. 

Ma la domanda è: essendo lo stesso codice che gira e le coppie le stesse, perché i dati arrivano da una parte sì e dall'altra no?

Cioè capirei se stessimo prendendo prezzi di valute diverse...ma in effetti sono le stesse. Il metodo di cattura dei dati lo stesso, il modo in cui vengono processati anche lo stesso.

Non so se hai idee di come si può risolvere

 
Fabio.Andreoli #:

ok, in effetti è plausibile, anche perché non mi viene in mente nient'altro. 

Ma la domanda è: essendo lo stesso codice che gira e le coppie le stesse, perché i dati arrivano da una parte sì e dall'altra no?

Cioè capirei se stessimo prendendo prezzi di valute diverse...ma in effetti sono le stesse. Il metodo di cattura dei dati lo stesso, il modo in cui vengono processati anche lo stesso.

Non so se hai idee di come si può risolvere

Come ho già detto il problema credo risieda nella differente tempistica dei tick, perciò nell'aggiornamento visuale del prezzo. Se il prezzo della coppia sulla quale l'ea è attivo è giusto il problema è quello. 
 
Michele Catanzaro #:
Come ho già detto il problema credo risieda nella differente tempistica dei tick, perciò nell'aggiornamento visuale del prezzo. Se il prezzo della coppia sulla quale l'ea è attivo è giusto il problema è quello. 

No scusa non ti seguo.


I prezzi degli asset vengono presi tutti alla stessa maniera, a prescinder da quale sia il grafico sul quale stiamo operando.

Dato questo, se la fonte dei dati è la stessa e il metodo in cui vengono processati è lo stesso, dovrebbe apparire sempre lo stesso prezzo.

Se il problema fosse la tempistica dei tick, comunque dovrei vedere in ogni caso lo stesso prezzo (magari sbagliato e diverso dal reale, a causa del ritardo, ma comunque uguale su tutti e 3)

 
Fabio.Andreoli #:

No scusa non ti seguo.


I prezzi degli asset vengono presi tutti alla stessa maniera, a prescinder da quale sia il grafico sul quale stiamo operando.

Dato questo, se la fonte dei dati è la stessa e il metodo in cui vengono processati è lo stesso, dovrebbe apparire sempre lo stesso prezzo.

Se il problema fosse la tempistica dei tick, comunque dovrei vedere in ogni caso lo stesso prezzo (magari sbagliato e diverso dal reale, a causa del ritardo, ma comunque uguale su tutti e 3)

No, vedresti il prezzo giusto solo della coppia sulla quale l'ea gira. L'algoritmo viene eseguito ad ogni tick perciò anche l'aggiornamento del prezzo avviene in quel momento, nel frattempo può essere che le altre coppie di tick ne abbiano ricevuti 3. Perciò controlla che venga riportato il prezzo corretto della coppia sulla quale l'ea gira. 
 
Michele Catanzaro #:
No, vedresti il prezzo giusto solo della coppia sulla quale l'ea gira. L'algoritmo viene eseguito ad ogni tick perciò anche l'aggiornamento del prezzo avviene in quel momento, nel frattempo può essere che le altre coppie di tick ne abbiano ricevuti 3. Perciò controlla che venga riportato il prezzo corretto della coppia sulla quale l'ea gira. 

ho capito. penso proprio che sia come dici te, grazie.


Come posso risolvere secondo te?

 
Fabio.Andreoli #:

ho capito. penso proprio che sia come dici te, grazie.


Come posso risolvere secondo te?

Michele Catanzaro #:
No, vedresti il prezzo giusto solo della coppia sulla quale l'ea gira. L'algoritmo viene eseguito ad ogni tick perciò anche l'aggiornamento del prezzo avviene in quel momento, nel frattempo può essere che le altre coppie di tick ne abbiano ricevuti 3. Perciò controlla che venga riportato il prezzo corretto della coppia sulla quale l'ea gira. 

Ho risolto usando la funzione OnTimer al posto di OnTick. Grazie.

Ora sto incontrando un'altra difficoltà però. Testando in demo, in tempo reale, ho notato che apre e chiude le posizioni a distanza di pochi ms. Ci sono le condizioni di apertura ma non di chiusura. Praticamente appena apre riceve anche l'ordine di chiusura.

Back testando sullo stesso periodo il problema non si verifica.

L'unica differenza è che in demo faccio andare più bot insieme, ma su grafici differenti.

A cosa potrebbe essere dovuto il problema?

 
Fabio.Andreoli #:

Ho risolto usando la funzione OnTimer al posto di OnTick. Grazie.

Ora sto incontrando un'altra difficoltà però. Testando in demo, in tempo reale, ho notato che apre e chiude le posizioni a distanza di pochi ms. Ci sono le condizioni di apertura ma non di chiusura. Praticamente appena apre riceve anche l'ordine di chiusura.

Back testando sullo stesso periodo il problema non si verifica.

L'unica differenza è che in demo faccio andare più bot insieme, ma su grafici differenti.

A cosa potrebbe essere dovuto il problema?

Hai conto netting o hedge?