Diferencia entre dos futuros

 

¡Buenas tardes a todos!

He escrito un indicador que dibuja el diferencial entre dos futuros. Tengo dos problemas:

1) el indicador tiene muchos fallos, a veces se muestra, a veces no se muestra, luego muestra alguna tontería (tengo que pulsar refrescar, y luego parece que se pone en su sitio);

2) El algoritmo del autor para sincronizar los precios de dos futuros: debido a que los futuros pueden carecer a menudo de unas u otras barras (debido a la baja liquidez), entonces había un problema para sincronizar sus barras para obtener un diferencial real entre ellas. He buscado en el foro y no he encontrado nada sobre este tema. Finalmente, se me ocurrió el siguiente método: tomamos 4 series de tiempo - tiempo de barra para el instrumento #1, precios de cierre de barra para el instrumento #1, tiempo de barra para el instrumento #2, precios de cierre de barra para el instrumento #2. Si especificamos el mismo número de barras en las series temporales, serán idénticas para un instrumento e idénticas para otro (vinculación de precios de tiempo y de cierre). Sólo queda sincronizar la hora de un instrumento con respecto al otro. A continuación se muestra un ejemplo de construcción de spreads en base a los datos del instrumento #1: tomamos el precio de cierre i-ésimo del instrumento #1 y le restamos el precio del instrumento #2 cuyo índice es igual al índice de la matriz de tiempo del instrumento #2 cuyo valor de tiempo coincidió con la matriz del instrumento #1.

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

No se me ocurre nada mejor. Me gustaría escuchar vuestras sugerencias, quizás haya una forma mucho más sencilla, clara y efectiva de construir un gráfico de spreads sincronizados de dos futuros. Tal vez entonces deje de fallar, o tal vez escriba indicadores "geniales"...

He adjuntado el indicador al post.

Gracias de antemano.

Archivos adjuntos:
Spread.mq5  24 kb
 
iiivasyaiii:

¡Buenas tardes a todos!

He escrito un indicador que dibuja el diferencial entre dos futuros. Tengo dos problemas:

1) el indicador tiene muchos fallos, a veces se muestra, a veces no se muestra, entonces muestra alguna tontería (tengo que pulsar refrescar, y entonces parece que se pone en su sitio);

2) El algoritmo del autor para sincronizar los precios de dos futuros: debido a que los futuros pueden carecer a menudo de unas u otras barras (debido a la baja liquidez), entonces había un problema para sincronizar sus barras para obtener un diferencial real entre ellas. He buscado en el foro y no he encontrado nada sobre este tema. Finalmente, he pensado en el siguiente método: tomamos 4 series temporales - tiempo de barra del instrumento #1, precios de cierre de barra del instrumento #1, tiempo de barra del instrumento #2, precios de cierre de barra del instrumento #2. Si especificamos el mismo número de barras en las series temporales, serán idénticas para un instrumento e idénticas para otro (tiempo de enlace y precios de cierre). Sólo queda sincronizar la hora de un instrumento con respecto al otro. A continuación se muestra un ejemplo de construcción de spreads en base a los datos del instrumento #1: tomamos el precio de cierre i-ésimo del instrumento #1 y le restamos el precio del instrumento #2 cuyo índice es igual al índice de la matriz de tiempo del instrumento #2 cuyo valor de tiempo coincidió con la matriz del instrumento #1.

No se me ocurre nada mejor. Me gustaría escuchar vuestras sugerencias, quizás haya una forma mucho más sencilla, clara y efectiva de construir un gráfico de spreads sincronizados de dos futuros. Tal vez entonces deje de fallar, o tal vez escriba indicadores "geniales"...

He adjuntado el indicador al post.

Gracias de antemano.

Hay que tomar los precios de compra y venta para trazar el spread. El gráfico está dibujado por flipper y eso no sería correcto.
 
Maxim Romanov:
Necesito tomar los precios de compra y venta para construir el spread. El gráfico está dibujado por flipper y esto no será correcto.

Maxim, gracias por tu atención a mi problema.

Tengo un par de comentarios a su respuesta:

1) Los precios de las transacciones que se han producido (últimas) no se dibujan, esto no es forex. Si se refería a otra cosa, por favor, explíquelo con más detalle.

2) La oferta y la demanda es ciertamente buena, pero es un orden de magnitud más complicado. Intenté escribir dos líneas adicionales en ellas para el spread principal, como spread de compra y spread de venta. Lo intenté una vez (por cierto se dibujó así durante mucho tiempo), pero luego cambié algo en el código y desapareció y no volvió a aparecer)), si lo necesito, puedo enviarte su código. Y el principal inconveniente del bid y el ax: si no recuerdo mal, los datos del bid y el ax se almacenan para los últimos 2000 ticks, por lo que no se puede analizar un largo historial en él.

Así que, por favor, empecemos por construir el diferencial entre los dos instrumentos sobre los precios de cierre. ¿Es correcto mi planteamiento de sincronizar los precios de dos instrumentos mediante ArrayBsearch() o existe un método más sencillo?

 
iiivasyaiii:

Maxim, gracias por tu atención a mi problema.

Tengo un par de comentarios a su respuesta:

1) Los precios de las transacciones ocurridas (últimas) no se dibujan, esto no es forex.

Con estos conocimientos es demasiado pronto para que escribas esos indicadores.

 
iiivasyaiii:

¡Buenas tardes a todos!

He escrito un indicador que dibuja el diferencial entre dos futuros. Tengo dos problemas:

1) el indicador tiene muchos fallos, a veces se muestra, a veces no se muestra, luego muestra alguna tontería (tengo que pulsar refrescar, y luego parece que se pone en su sitio);

2) El algoritmo del autor para sincronizar los precios de dos futuros: debido a que los futuros pueden carecer a menudo de unas u otras barras (debido a la baja liquidez), entonces había un problema para sincronizar sus barras para obtener un diferencial real entre ellas. He buscado en el foro y no he encontrado nada sobre este tema. Finalmente, he pensado en el siguiente método: tomamos 4 series temporales - tiempo de barra del instrumento #1, precios de cierre de barra del instrumento #1, tiempo de barra del instrumento #2, precios de cierre de barra del instrumento #2. Si especificamos el mismo número de barras en las series temporales, serán idénticas para un instrumento e idénticas para otro (tiempo de enlace y precios de cierre). Sólo queda sincronizar la hora de un instrumento con respecto al otro. A continuación se muestra un ejemplo de construcción de spreads en base a los datos del instrumento #1: tomamos el precio de cierre i-ésimo del instrumento #1 y le restamos el precio del instrumento #2 cuyo índice es igual al índice de la matriz de tiempo del instrumento #2 cuyo valor de tiempo coincidió con la matriz del instrumento #1.

No se me ocurre nada mejor. Me gustaría escuchar vuestras sugerencias, quizás haya una forma mucho más sencilla, clara y efectiva de construir un gráfico de spreads sincronizados de dos futuros. Tal vez entonces deje de fallar, o tal vez escriba indicadores "geniales"...

He adjuntado el indicador al post.

Lo he adjuntado al post, gracias de antemano.

¡Buenos días!

1. Tienes que escribir en la sección "Stock Trading".

2. No se pueden sincronizar 2 futuros por barras.

Debería tomar como base las barras de uno de los futuros (el más líquido SBRF 9,20 es mejor).

3. Para obtener una imagen completa del spread, debe tomar no los cierres, sino los ticks y sincronizarlos con las barras de uno seleccionado como futuro principal.

4. Para recalcular rápidamente, debes memorizar la última posición calculada.

Ejemplo de código para el recálculo de spreads con sincronización de tiempo de barras

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 esos conocimientos, es demasiado pronto para escribir esos indicadores.

Ya que eres tan inteligente, tal vez puedas decirme cómo sincronizar dos series de precios por medio de los precios de cierre;)

 
prostotrader:

¡Buenas tardes!

1. Tiene que escribir a la sección "Intercambio de divisas".

2. No es posible sincronizar 2 futuros por barras.

Debería tomar como base las barras de uno de los futuros (el más líquido SBRF 9,20 es mejor).

3. Para obtener una imagen completa del spread, debe tomar no los cierres, sino los ticks y sincronizarlos con las barras de uno seleccionado como futuro principal.

4. Para recalcular rápidamente, debes memorizar la última posición calculada.

Un ejemplo de código de recálculo de spreads con sincronización de tiempo de barras

Prostotrader, ¡muchas gracias por el consejo! Interesante solución, la probaré ahora e informaré más tarde.

 
iiivasyaiii:

Ya que eres tan inteligente, tal vez puedas decirme cómo sincronizar dos series de precios por medio de los precios de cierre;)

Ya se le ha explicado la esencia de la cuestión. No se puede construir un spread por los precios de las operaciones (¡y mucho menos por los precios de cierre!), porque puede que no haya operaciones en el tramo lento durante mucho tiempo, e incluso si las hay, no estarán sincronizadas con los precios de las operaciones del tramo rápido. Es decir, el valor de dicha información es cero. Siempre (o casi siempre) hay precios actuales de compra y venta en el mercado, y son ellos los que hay que analizar.

 
iiivasyaiii:

Maxim, gracias por tu atención a mi problema.

Tengo un par de comentarios a su respuesta:

1) Los precios de las transacciones que se han producido (últimas) no se dibujan, esto no es forex. Si se refería a otra cosa, por favor, explíquelo con más detalle.

2) La oferta y la demanda es ciertamente buena, pero es un orden de magnitud más complicado. Intenté escribir dos líneas adicionales en ellas para el spread principal, como spread de compra y spread de venta. Lo intenté una vez (por cierto se dibujó así durante mucho tiempo), pero luego cambié algo en el código y desapareció y no volvió a aparecer)), si lo necesito, puedo enviarte su código. Y el principal inconveniente de la oferta y la demanda: si no recuerdo mal, los datos de la oferta y la demanda se almacenan para los últimos 2000 ticks, por lo que un largo historial en él no puede ser analizado.

Así que, por favor, empecemos por construir el diferencial entre los dos instrumentos sobre los precios de cierre. ¿Es correcto mi planteamiento de sincronizar los precios de dos instrumentos mediante ArrayBsearch() o existe un método más sencillo?

No soy programador, no necesito el código, no puedo ayudar con los códigos. Pero te daré un consejo en esencia. Entonces, los instrumentos de intercambio se construyen por el precio en la terminal y, como escribió prostotrader, no es correcto sincronizarlos por precios cercanos. Por ticks, sí, será correcto. Busca el camino correcto de una vez, para qué equivocarse).
 
prostotrader:

¡Buenas tardes!

1. Tiene que escribir a la sección "Intercambio de divisas".

2. No es posible sincronizar 2 futuros por barras.

Debería tomar como base las barras de uno de los futuros (el más líquido SBRF 9,20 es mejor).

3. Para obtener una imagen completa del spread, debe tomar no los cierres, sino los ticks y sincronizarlos con las barras de uno seleccionado como futuro principal.

4. Para recalcular rápidamente, debes memorizar la última posición calculada.

Un ejemplo de código de recálculo de spreads con sincronización de tiempo de barras

Prostotrader, ¡buenos días! Por favor, aconséjeme, no he entendido bien su código:

1) ¿Ha utilizado la función CopyTicksRange o CopyTicks?

2) La descripción de estas funciones dice que no pueden copiar más de 2000 ticks, ¿significa que este indicador no puede analizar una historia más larga?

 
Dmi3:

Ya se le ha explicado la esencia de la cuestión. El diferencial no puede basarse en los precios de las operaciones (¡y mucho menos en los precios de cierre!), porque puede que no haya operaciones en el tramo lento durante mucho tiempo y, aunque las haya, no estarán sincronizadas con los precios de las operaciones del tramo rápido. Es decir, el valor de dicha información es cero. Siempre (o casi siempre) hay precios reales de compra y venta en el mercado, y son ellos los que debemos analizar.

No discuto que las ofertas sean más precisas (aunque cuando tuve un indicador de poco tiempo que mostraba tres spreads: flipper, ask-bead y bid-ask, el flipper la mayoría de las veces se situaba entre los dos últimos, lo que demuestra que en general el spread del flipper en instrumentos líquidos es adecuado).

Averigüemos entonces cómo hacer la sincronización asc/bid de la manera menos intensiva en recursos posible y preferiblemente con un historial profundo.

Por ejemplo, Prostatrader ofrece una opción interesante (arriba).