Come dovrebbe essere il prezzo del vetro? - pagina 13

 
Реter Konow:

1. Il programma è scritto in due lingue. Il linguaggio di base è MQL5, e sopra questo, il mio linguaggio di markup.

2. Distribuito nello stesso modo in cui è stato inviato. Intendo nelle celle giuste. È difficile da spiegare a parole. Vi manderò il codice più tardi. Naturalmente, ho dovuto sudare per mettere i dati nelle celle giuste, ma questo problema è stato risolto.

3. Aggiungerò tutto ciò che sarà richiesto e che ha senso e importanza.

mql5 è buono perché non ci saranno problemi di compatibilità e leggibilità del codice.
E come vengono inviati, non sappiamo che tipo di dati avete preso come base.
Stream, cast, Json.
Se il tiering è fatto in un ciclo for, rinuncerei ai loop.
Tutti i cicli hanno un tempo di elaborazione, e questa è la latenza.
Ci sono solo circa 40 livelli di prezzo nel tumbler, su e giù.
Quindi, per ogni livello scriverei la propria variabile con il valore desiderato, eliminando il ciclo.

 
Roman:

mql5 è buono, non ci saranno problemi di compatibilità e leggibilità del codice.
E come vengono inviati, non sappiamo che tipo di dati avete preso come base.
Stream, cast, Json.
Se il tiering è fatto in un ciclo for, rinuncerei ai loop.
Tutti i cicli hanno un tempo di elaborazione, e questa è la latenza.
Ci sono solo circa 40 livelli di prezzo nel tumbler, su e giù.
Quindi, per ogni livello scriverei la propria variabile con il valore desiderato, eliminando il ciclo.

Guardate il codice nella pagina precedente.

Centralizzo i dati in arrivo rispetto alla cella centrale della tazza. Il prezzo più vicino all'ask viene messo nella cella al centro e poi verso l'alto il resto dei prezzi in ordine crescente. Lo stesso per i prezzi delle offerte e le loro offerte.

 
Roman:

mql5 è buono, non ci saranno problemi di compatibilità e leggibilità del codice.
E come sono mappati, non sappiamo che tipo di dati avete.
Stream, cast, Json.
Se il tiering è fatto in un ciclo for, rinuncerei ai loop.
Tutti i cicli hanno un tempo di elaborazione, e questa è la latenza.
Ci sono solo circa 40 livelli di prezzo nel tumbler, su e giù.
Quindi, per ogni livello scriverei la propria variabile con il valore desiderato, eliminando il ciclo.

Non so come risolvere il problema della distribuzione dei dati in entrata senza un ciclo. Puoi darmi un suggerimento?

A volte ci sono più di 40 livelli di prezzo in arrivo. Alcuni non entrano nella tazza. Così, ho fatto un array di ricevitori di 100 celle. È impossibile visualizzarli tutti nella finestra di selezione, ma è possibile ottenerli dal motore.

 
Roman:

...
Per questo motivo prescriverei per ogni livello una variabile con il valore necessario, escludendo il ciclo.

I dati arrivano in un array in ordine dal prezzo più alto al più basso. Non c'è limite alla quantità di dati. Ci possono essere 60 prezzi con offerte, 30 per ogni lato, o ci possono essere 30 prezzi, tutti con prezzi superiori alla domanda o inferiori all'offerta. Quindi, senza un ciclo non c'è modo di risolvere il problema.

 
Реter Konow:

I dati arrivano in un array in ordine dal prezzo più alto al più basso. Non c'è limite alla quantità di dati. Ci possono essere 60 prezzi con offerte, 30 per ogni lato, o ci possono essere 30 prezzi, tutti con prezzi superiori alla domanda o inferiori all'offerta. Quindi, non è possibile risolvere il problema senza un ciclo.

Se l'indicizzazione degli elementi in entrata nell'array non è interrotta, possiamo prendere ogni elemento dall'array senza il ciclo e assegnarlo alla nostra variabile.
E già assegnare ogni variabile contenente il valore al proprio livello di cella.
Oppure, potete assegnare ogni elemento dell'array a un livello in una volta sola.
Allora escludiamo anche le variabili, ma i dati non inizializzati non sono una buona pratica di codifica.

 

Un'altra idea è venuta fuori.
Per dividere l'array ricevuto in due array Bid e Ask
E pensate a come usare la funzione CopyArray().

Dopo aver implementato entrambi i metodi, possiamo misurare la velocità di elaborazione.
E quale darà il miglior risultato, e lasciarlo.
 
Roman:

Se l'indicizzazione degli elementi in entrata nell'array non è interrotta, possiamo prendere ogni elemento dall'array senza il ciclo e assegnarlo nella nostra variabile.
E già ogni variabile che contiene il valore è assegnata al livello della cella.
Oppure, potete assegnare ogni elemento dell'array a un livello in una volta sola.
Allora escludiamo anche le variabili, ma i dati non inizializzati non sono una buona pratica di codifica.

Ahimè, non ci sono prezzi ordinati nell'array e la sua indicizzazione non punta a celle specifiche nel tumbler. I dati vengono da un prezzo più alto a un prezzo più basso, ma è lì che finisce l'ordine. Ci può essere un punto tra i prezzi, o possono essere 10 o 153. Il cursore mostra gli ultimi volumi d'ordine modificati nell'intero intervallo in cui si trovano. Se un prezzo superiore a 150 pip dall'asc ha cambiato il numero di ordini limite, apparirà nell'array. Pertanto, non c'è ordine nell'array se non dal più grande al più piccolo e i dati non possono essere riordinati altrimenti che in un ciclo.

 
Реter Konow:

Ahimè, non c'è indicizzazione nell'array. I dati passano da un prezzo più alto a uno più basso, ma è lì che finisce l'ordine. Ci può essere un punto tra i prezzi, o ce ne possono essere 10 o 153. La pila mostra gli ultimi volumi d'ordine modificati per l'intera gamma in cui si trovano. Se un prezzo superiore a 150 pip dall'asc ha cambiato il numero di ordini limite, apparirà nell'array. Pertanto, non c'è alcun ordine nell'array se non da più a meno, e i dati non possono essere ordinati se non in un ciclo.

C'è l'indicizzazione per elementi dell'array nella matrice ricevente.
I dati vengono dal prezzo più alto a quello più basso, sono sempre ordinati in modo sequenziale, vero?
Quindi, scegliete qualsiasi elemento necessario dall'array per indice, ma senza il ciclo.
E se è impossibile catturare meglio Bid/Ask a causa delle dimensioni variabili dei dati in arrivo,
allora forse dovremmo pensare a CopyArray()

 
Roman:

C'è l'indicizzazione per elementi dell'array nella matrice ricevente.
I dati vengono da un prezzo più alto a uno più basso, sono sempre ordinati in modo sequenziale, no?
Quindi selezionate qualsiasi elemento desiderato dall'array ricevente per indice, ma senza il ciclo.

Organizzato in modo sequenziale. Ma:

  1. Possono arrivare più dati di quante siano le celle delle tazze.
  2. Non c'è un ordine chiaro tra i prezzi. Ci può essere un prezzo sopra la domanda e 7 prezzi sotto l'offerta.
  3. Ci può essere una spaziatura irregolare tra i prezzi. Ci può essere 1 punto tra il primo e il secondo, e 18 punti o 1008 punti tra il secondo e il terzo.
Ecco perché non saprai quale prezzo è il più vicino all'Ask e quale è il più vicino al Bid, quindi non saprai quale prezzo dovrebbe essere in mezzo al gruppo senza fare il ciclo.
 
Реter Konow:

Organizzato in modo sequenziale. Ma:

  1. Possono arrivare più dati di quante siano le celle delle tazze.
  2. Non c'è un ordine chiaro tra i prezzi. Ci può essere un prezzo sopra la domanda e 7 prezzi sotto l'offerta.
  3. Ci può essere una spaziatura irregolare tra i prezzi. Ci può essere 1 pip tra il primo e il secondo, e 18 pip o 1008 pip tra il secondo e il terzo.
Quindi, senza fare un ciclo, è impossibile sapere quale prezzo è più vicino alla domanda e quale all'offerta e quindi quale prezzo dovrebbe essere al centro della tazza.

Da dove prendete questi dati distorti? ))

1) Definire un chiaro intervallo di selezione dei dati, per esempio 20 su, 20 giù.
e selezionare solo questa gamma, tutto il resto non è importante per noi.

2. Lei dice che i prezzi vanno dal più alto al più basso e sono ordinati in ordine decrescente.
Quindi cosa può venire più in alto o più in basso, non importa, non guardate i prezzi ma gli indici nella matrice.

2. Se intendi l'ordine per distanza tra i livelli di prezzo, non importa affatto, abbiamo l'indicizzazione nell'array ricevente.