Spread tra due futures

 

Buon pomeriggio a tutti!

Hoscritto un indicatore che disegna lo spread tra due futures. Ho due problemi:

1) l'indicatore è selvaggiamente glitch, a volte viene visualizzato, a volte non viene visualizzato, poi mostra qualche sciocchezza (devo premere refresh, e poi sembra cadere a posto);

2) L'algoritmo dell'autore per sincronizzare i prezzi di due futures: poiché i futures possono spesso mancare di alcune o altre barre (a causa della bassa liquidità), allora c'era un problema di sincronizzare le loro barre per ottenere uno spread reale tra loro. Ho cercato sul forum e non ho trovato nulla su questo argomento. Infine, ho pensato al seguente metodo: prendiamo 4 serie temporali - tempo della barra dello strumento #1, prezzi di chiusura della barra dello strumento #1, tempo della barra dello strumento #2, prezzi di chiusura della barra dello strumento #2. Se specifichiamo lo stesso numero di barre nella serie temporale, esse saranno identiche per uno strumento e identiche per un altro (legame di tempo e prezzi di chiusura). Resta solo da sincronizzare il tempo di uno strumento rispetto all'altro. Di seguito un esempio di formazione dello spread basato sui dati dello strumento #1: prendiamo l'i-esimo prezzo di chiusura dello strumento #1 e sottraiamo da esso il prezzo dello strumento #2 il cui indice è uguale all'indice dell'array temporale dello strumento #2 il cui valore temporale coincide con l'array dello strumento #1.

   if(Flag==SincForIn1)									// Синхронизируем по первому инструменту.
      {
       while(i>=0)                                                			// Цикл перебора для расчета спреда для всех непосчитанных баров, от самого последнего i до нулевого.
         {
          SpreadBuffer[i]=closeIn1[i]-closeIn2[ArrayBsearch(timeIn2,timeIn1[i])]; 	// Расчет спреда (существуют различия в количесве баров двух инструментов, за основу берутся бары Инструмента №1)
          i--;                                                    			// Снижение индекса бара для перехода расчетов к следующему бару и так до нулевого включительно.
         }

Non riesco a pensare a niente di meglio. Vorrei ascoltare i vostri suggerimenti, forse c'è un modo molto più semplice, chiaro ed efficace per costruire un grafico di spreads sincronizzato di due futures. Forse allora smetterà di fare glitch, o forse scriverò indicatori "cool"...

Ho allegato l'indicatore al post.

Grazie in anticipo.

File:
Spread.mq5  24 kb
 
iiivasyaiii:

Buon pomeriggio a tutti!

Hoscritto un indicatore che disegna lo spread tra due futures. Ho due problemi:

1) l'indicatore è selvaggiamente glitch, a volte viene visualizzato, a volte non viene visualizzato, poi mostra qualche sciocchezza (devo premere refresh, e poi sembra cadere a posto);

2) L'algoritmo dell'autore per sincronizzare i prezzi di due futures: poiché i futures possono spesso mancare di alcune o altre barre (a causa della bassa liquidità), allora c'era un problema di sincronizzare le loro barre per ottenere uno spread reale tra loro. Ho cercato sul forum e non ho trovato nulla su questo argomento. Alla fine, ho trovato il seguente metodo: prendiamo 4 serie temporali - tempo della barra dello strumento #1, prezzi di chiusura della barra dello strumento #1, tempo della barra dello strumento #2, prezzo di chiusura della barra dello strumento #2. Se specifichiamo lo stesso numero di barre nella serie temporale, saranno identiche per uno strumento e identiche per un altro (tempo vincolante e prezzi di chiusura). Resta solo da sincronizzare il tempo di uno strumento rispetto all'altro. Di seguito un esempio di costruzione dello spread sulla base dei dati dello strumento #1: prendiamo l'i-esimo prezzo di chiusura dello strumento #1 e sottraiamo da esso il prezzo dello strumento #2 il cui indice è uguale all'indice dell'array temporale dello strumento #2 il cui valore temporale coincide con l'array dello strumento #1.

Non riesco a pensare a niente di meglio. Vorrei ascoltare i vostri suggerimenti, forse c'è un modo molto più semplice, chiaro ed efficace per costruire un grafico di spreads sincronizzato di due futures. Forse allora smetterà di fare glitch, o forse scriverò indicatori "cool"...

Ho allegato l'indicatore al post.

Grazie in anticipo.

Devi prendere i prezzi di domanda e offerta per tracciare lo spread. Il grafico è disegnato da flipper e non sarebbe corretto.
 
Maxim Romanov:
Ho bisogno di prendere i prezzi bid e ask per costruire lo spread. Il grafico è disegnato da flipper e questo non sarà corretto.

Maxim, grazie per la tua attenzione al mio problema.

Ho un paio di commenti alla sua risposta:

1) I prezzi delle transazioni che si sono verificati (ultimo) non sono disegnati, questo non è forex. Se intendevi qualcos'altro, per favore spiega in modo più dettagliato.

2) Bid and ask è certamente buono, ma è un ordine di grandezza più complicato. Ho provato a scrivere due linee aggiuntive per lo spread principale, come buy spread e sell spread. Ho provato una volta (tra l'altro è stato disegnato così per molto tempo), ma poi ho cambiato qualcosa nel codice ed è scomparso e non è più riapparso)), se ne ho bisogno, posso mandarti il suo codice. E lo svantaggio principale di bid e ax: se mi ricordo, i dati bid e ax sono memorizzati per gli ultimi 2000 tick, quindi una lunga storia su di esso non può essere analizzata.

Quindi,per favore, iniziamo a costruire lo spread tra i due strumenti sui prezzi di chiusura. Il mio approccio per sincronizzare i prezzi di due strumenti usando ArrayBsearch() è corretto o esiste un metodo più semplice?

 
iiivasyaiii:

Maxim, grazie per la tua attenzione al mio problema.

Ho un paio di commenti alla sua risposta:

1) I prezzi delle transazioni che si sono verificati (ultimo) non sono disegnati, questo non è forex.

Con tali conoscenze è troppo presto per voi per scrivere tali indicatori.

 
iiivasyaiii:

Buon pomeriggio a tutti!

Hoscritto un indicatore che disegna lo spread tra due futures. Ho due problemi:

1) l'indicatore è selvaggiamente glitch, a volte viene visualizzato, a volte non viene visualizzato, poi mostra qualche sciocchezza (devo premere refresh, e poi sembra cadere a posto);

2) L'algoritmo dell'autore per sincronizzare i prezzi di due futures: poiché i futures possono spesso mancare di alcune o altre barre (a causa della bassa liquidità), allora c'era un problema di sincronizzare le loro barre per ottenere uno spread reale tra loro. Ho cercato sul forum e non ho trovato nulla su questo argomento. Infine, ho pensato al seguente metodo: prendiamo 4 serie temporali - tempo della barra dello strumento #1, prezzi di chiusura della barra dello strumento #1, tempo della barra dello strumento #2, prezzi di chiusura della barra dello strumento #2. Se specifichiamo lo stesso numero di barre nella serie temporale, saranno identiche per uno strumento e identiche per un altro (tempo vincolante e prezzi di chiusura). Resta solo da sincronizzare il tempo di uno strumento rispetto all'altro. Di seguito un esempio di formazione dello spread basato sui dati dello strumento #1: prendiamo l'i-esimo prezzo di chiusura dello strumento #1 e sottraiamo da esso il prezzo dello strumento #2 il cui indice è uguale all'indice dell'array temporale dello strumento #2 il cui valore temporale coincide con l'array dello strumento #1.

Non riesco a pensare a niente di meglio. Vorrei ascoltare i vostri suggerimenti, forse c'è un modo molto più semplice, chiaro ed efficace per costruire un grafico di spreads sincronizzato di due futures. Forse allora smetterà di fare glitch, o forse scriverò indicatori "cool"...

Ho allegato l'indicatore al post.

L'ho allegato al post, grazie in anticipo.

Buona giornata!

1. Devi scrivere nella sezione "Stock Trading".

2. Non è possibile sincronizzare 2 futures per barre.

Si dovrebbe prendere come base le barre di uno dei futures (il più liquido SBRF 9.20 è meglio).

3. Per un quadro completo dello spread, si dovrebbe prendere non la chiusura, ma i tick e sincronizzarli con le barre di uno selezionato come futures principale.

4. Per ricalcolare rapidamente, si dovrebbe memorizzare l'ultima posizione calcolata.

Esempio di codice di ricalcolo dello spread con sincronizzazione temporale a barre

int pr_pos = 0;
            int sec_pos = 0;
            bool is_found;
            int pr_mem = 0;
            int sec_mem = 0;
            for(int i = 0; i < a_bars; i++)
            {
              is_found = false;
              while(pr_pos < pr_cnt) 
              {
                if((ulong(data_time[i].time) <= ulong(pr_ticks[pr_pos].time)) &&
                   (ulong(data_time[i].time) + 60 > ulong(pr_ticks[pr_pos].time)))
                {
                  pr_mem = pr_pos;
                  while(sec_pos < sec_cnt) 
                  {
                    if((ulong(data_time[i].time) <= ulong(sec_ticks[sec_pos].time)) &&
                       (ulong(data_time[i].time) + 60 > ulong(sec_ticks[sec_pos].time)))
                    {
                      is_found = true;
                      sec_mem = sec_pos;
                      if((sec_ticks[sec_pos].bid > 0.0) && (pr_ticks[pr_pos].ask > 0.0) &&
                         (sec_ticks[sec_pos].ask > 0.0) && (pr_ticks[pr_pos].bid > 0.0))
                      {
                        data_time[i].hi_value = sec_ticks[sec_pos].bid - pr_ticks[pr_pos].ask;
                        data_time[i].low_value = sec_ticks[sec_pos].ask - pr_ticks[pr_pos].bid;
                      }
                      break;
                    }
                    sec_pos++;
                  }
                  break;
                }
                pr_pos++;
              }
              if(is_found == false)
              {
                pr_pos = pr_mem;
                sec_pos = sec_mem;
              }
            }
 
Alexey Viktorov:

Con queste conoscenze, è troppo presto per scrivere tali indicatori.

Visto che sei così intelligente, forse puoi dirmi come sincronizzare due serie di prezzi con i prezzi di chiusura;)

 
prostotrader:

Buon pomeriggio!

1. Devi scrivere nella sezione "Exchange Trading".

2. Non è possibile sincronizzare 2 futures per barre.

Si dovrebbe prendere come base le barre di uno dei futures (il più liquido SBRF 9.20 è meglio).

3. Per un quadro completo dello spread, si dovrebbe prendere non la chiusura, ma i tick e sincronizzarli con le barre di uno selezionato come futures principale.

4. Per ricalcolare rapidamente, si dovrebbe memorizzare l'ultima posizione calcolata.

Un esempio di codice di ricalcolo dello spread con sincronizzazione dell'ora della barra

Prostotrader, grazie mille per il consiglio! Soluzione interessante, la proverò ora e riferirò più tardi.

 
iiivasyaiii:

Visto che sei così intelligente, forse puoi dirmi come sincronizzare due serie di prezzi con i prezzi di chiusura;)

Vi è già stata detta l'essenza della domanda. Non puoi costruire uno spread in base ai prezzi delle transazioni (per non parlare dei prezzi di chiusura!), perché potrebbero non esserci transazioni nella gamba lenta per molto tempo, e anche se ci sono, non saranno sincronizzate con i prezzi delle transazioni della gamba veloce. Cioè il valore di tale informazione è zero. Ci sono sempre (o quasi sempre) prezzi correnti di domanda e offerta nel mercato, e sono questi che devono essere analizzati.

 
iiivasyaiii:

Maxim, grazie per la tua attenzione al mio problema.

Ho un paio di commenti alla sua risposta:

1) I prezzi delle transazioni che si sono verificati (ultimo) non sono disegnati, questo non è forex. Se intendevi qualcos'altro, per favore spiega in modo più dettagliato.

2) Bid and ask è certamente buono, ma è un ordine di grandezza più complicato. Ho provato a scrivere due linee aggiuntive per lo spread principale, come buy spread e sell spread. Ho provato una volta (tra l'altro è stato disegnato così per molto tempo), ma poi ho cambiato qualcosa nel codice ed è scomparso e non è più riapparso)), se ne ho bisogno, posso mandarti il suo codice. E lo svantaggio principale di bid e ax: se mi ricordo, i dati bid e ax sono memorizzati per gli ultimi 2000 tick, quindi una lunga storia su di esso non può essere analizzata.

Quindi,per favore, iniziamo a costruire lo spread tra i due strumenti sui prezzi di chiusura. Il mio approccio per sincronizzare i prezzi di due strumenti usando ArrayBsearch() è corretto o esiste un metodo più semplice?

Non sono un programmatore, non ho bisogno del codice, non posso aiutare con i codici. Ma vi darò un consiglio in sostanza. Quindi, gli strumenti di scambio sono costruiti dal prezzo nel terminale e, come ha scritto prostotrader, non è corretto sincronizzarli con i prezzi di chiusura. Per le zecche, sì, sarà corretto. Cerca subito la strada giusta, perché sbagliare).
 
prostotrader:

Buon pomeriggio!

1. Devi scrivere nella sezione "Exchange Trading".

2. Non è possibile sincronizzare 2 futures per barre.

Si dovrebbe prendere come base le barre di uno dei futures (il più liquido SBRF 9.20 è meglio).

3. Per un quadro completo dello spread, si dovrebbe prendere non la chiusura, ma i tick e sincronizzarli con le barre di uno selezionato come futures principale.

4. Per ricalcolare rapidamente, si dovrebbe memorizzare l'ultima posizione calcolata.

Un esempio di codice di ricalcolo dello spread con sincronizzazione dell'ora della barra

Prostotrader, buongiorno! Per favore consigliatemi, non ho capito bene il vostro codice:

1) Hai usato la funzione CopyTicksRange o CopyTicks?

2) La descrizione di queste funzioni dice che non possono copiare più di 2000 tick, significa che questo indicatore non può analizzare la storia più lunga?

 
Dmi3:

Vi è già stata detta l'essenza della domanda. Lo spread non può essere basato sui prezzi delle transazioni (per non parlare dei prezzi di chiusura!), perché potrebbero non esserci transazioni nella gamba lenta per molto tempo e, anche se ci sono, saranno fuori sincrono con i prezzi delle transazioni della gamba veloce. Cioè il valore di tale informazione è zero. Ci sono sempre (o quasi sempre) prezzi reali di domanda e offerta sul mercato, ed è su di essi che dobbiamo analizzare.

Non sto contestando che le offerte sono più accurate (anche se quando avevo un indicatore di breve durata che mostrava tre spread: flipper, ask-bead e bid-ask, il flipper la maggior parte delle volte andava tra gli ultimi due, il che dimostra che in generale lo spread flipper su strumenti liquidi è adeguato).

Cerchiamo quindi di capire come fare la sincronizzazione asc/bid nel modo meno intensivo possibile di risorse e preferibilmente con una storia profonda.

Per esempio, Prostatrader offre un'opzione interessante (sopra).