Espalhamento entre dois futuros

 

Boa tarde a todos!

Eu escrevi um indicador que traça o spread entre dois futuros. Eu tenho dois problemas:

1) o indicador é extremamente defeituoso, às vezes é exibido, às vezes não é exibido, depois mostra alguns disparates (tenho que pressionar para atualizar, e depois parece cair no lugar);

2) O algoritmo do autor para sincronizar os preços de dois futuros: como os futuros podem frequentemente carecer de algumas ou outras barras (devido à baixa liquidez), então havia um problema para sincronizar suas barras para obter um spread real entre elas. Procurei no fórum e não encontrei nada sobre este assunto. Finalmente, cheguei ao seguinte método: tomamos 4 séries temporais - tempo de barra para o instrumento nº 1, preços de barra para o instrumento nº 1, tempo de barra para o instrumento nº 2, preços de barra para o instrumento nº 2. Se especificarmos o mesmo número de barras nas séries de tempo, elas serão idênticas para um instrumento e idênticas para outro (ligação de tempo e preços fechados). Resta apenas sincronizar o tempo de um instrumento em relação ao outro. Abaixo está um exemplo de construção de spread com base nos dados do instrumento nº 1: pegamos o i-ésimo preço de fechamento do instrumento nº 1 e subtraímos dele o preço do instrumento nº 2 cujo índice é igual ao índice da matriz temporal do instrumento nº 2 cujo valor temporal coincidiu com a matriz do instrumento nº 1.

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

Não consigo pensar em nada melhor. Gostaria de ouvir suas sugestões, talvez haja uma maneira muito mais simples, clara e eficaz de construir uma tabela de spreads sincronizados de dois futuros. Talvez pare com as falhas então, ou talvez eu escreva indicadores "legais".

Anexei o indicador ao posto.

Obrigado de antemão.

Arquivos anexados:
Spread.mq5  24 kb
 
iiivasyaiii:

Boa tarde a todos!

Eu escrevi um indicador que traça o spread entre dois futuros. Eu tenho dois problemas:

1) o indicador é extremamente defeituoso, às vezes é exibido, às vezes não é exibido, depois mostra alguns disparates (tenho que pressionar para atualizar, e depois parece cair no lugar);

2) O algoritmo do autor para sincronizar os preços de dois futuros: como os futuros podem frequentemente carecer de algumas ou outras barras (devido à baixa liquidez), então havia um problema para sincronizar suas barras para obter um spread real entre elas. Procurei no fórum e não encontrei nada sobre este assunto. Finalmente, cheguei ao seguinte método: tomamos 4 séries temporais - tempo de barra para o instrumento nº 1, preço de fechamento da barra do instrumento nº 1, tempo de barra do instrumento nº 2, preço de fechamento da barra do instrumento nº 2. Se especificarmos o mesmo número de barras nas séries de tempo, elas serão idênticas para um instrumento e idênticas para outro (tempo de encadernação e preços de fechamento). Resta apenas sincronizar o tempo de um instrumento em relação ao outro. Abaixo está um exemplo de construção de spread com base nos dados do instrumento nº 1: pegamos o i-ésimo preço de fechamento do instrumento nº 1 e subtraímos dele o preço do instrumento nº 2 cujo índice é igual ao índice da matriz temporal do instrumento nº 2 cujo valor temporal coincidiu com a matriz do instrumento nº 1.

Não consigo pensar em nada melhor. Gostaria de ouvir suas sugestões, talvez haja uma maneira muito mais simples, clara e eficaz de construir uma tabela de spreads sincronizados de dois futuros. Talvez pare com as falhas então, ou talvez eu escreva indicadores "legais".

Anexei o indicador ao posto.

Obrigado de antemão.

Você tem que fazer ofertas e pedir preços para traçar o spread. O gráfico é traçado por flipper e isso não seria correto.
 
Maxim Romanov:
Preciso aceitar a oferta e pedir preços para construir o spread. A tabela é desenhada por flipper e isto não será correto.

Maxim, obrigado por sua atenção ao meu problema.

Tenho alguns comentários a fazer em relação à sua resposta:

1) Os preços das transações que ocorreram (últimas) não são sacados, isto não é forex. Se você quis dizer algo mais, por favor, explique com mais detalhes.

2) Licite e peça é certamente bom, mas é uma ordem de grandeza mais complicada. Tentei escrever duas linhas adicionais para o spread principal, como comprar spread e vender spread. Eu tentei uma vez (pela maneira como foi desenhado por muito tempo), mas depois mudei algo no código e ele desapareceu e nunca mais reapareceu)))) Se você quiser, posso enviar-lhe seu código. E a principal desvantagem da licitação e do eixo: se bem me lembro, os dados da licitação e do eixo são armazenados para os últimos 2000 ticks, de modo que um longo histórico sobre ele não pode ser analisado.

Então, por favor,vamos começar com a construção do diferencial entre os dois instrumentos sobre os preços de fechamento. Minha abordagem para sincronizar os preços de dois instrumentos usando o ArrayBsearch() está correta ou existe um método mais simples?

 
iiivasyaiii:

Maxim, obrigado por sua atenção ao meu problema.

Tenho alguns comentários a fazer em relação à sua resposta:

1) Os preços das transações que ocorreram (últimas) não são sacados, isto não é forex.

Com tal conhecimento, é muito cedo para escrever tais indicadores.

 
iiivasyaiii:

Boa tarde a todos!

Eu escrevi um indicador que traça o spread entre dois futuros. Eu tenho dois problemas:

1) o indicador é extremamente defeituoso, às vezes é exibido, às vezes não é exibido, depois mostra alguns disparates (tenho que pressionar para atualizar, e depois parece cair no lugar);

2) O algoritmo do autor para sincronizar os preços de dois futuros: como os futuros podem frequentemente carecer de algumas ou outras barras (devido à baixa liquidez), então havia um problema para sincronizar suas barras para obter um spread real entre elas. Procurei no fórum e não encontrei nada sobre este assunto. Finalmente, cheguei ao seguinte método: tomamos 4 séries temporais - tempo de barra para o instrumento nº 1, preço de fechamento da barra do instrumento nº 1, tempo de barra do instrumento nº 2, preço de fechamento da barra do instrumento nº 2. Se especificarmos o mesmo número de barras nas séries de tempo, elas serão idênticas para um instrumento e idênticas para outro (tempo de encadernação e preços de fechamento). Resta apenas sincronizar o tempo de um instrumento em relação ao outro. Abaixo está um exemplo de construção de spread com base nos dados do instrumento nº 1: pegamos o i-ésimo preço de fechamento do instrumento nº 1 e subtraímos dele o preço do instrumento nº 2 cujo índice é igual ao índice da matriz temporal do instrumento nº 2 cujo valor temporal coincidiu com a matriz do instrumento nº 1.

Não consigo pensar em nada melhor. Gostaria de ouvir suas sugestões, talvez haja uma maneira muito mais simples, clara e eficaz de construir uma tabela de spreads sincronizados de dois futuros. Talvez pare com as falhas então, ou talvez eu escreva indicadores "legais".

Anexei o indicador ao posto.

Anexei-o ao correio. Obrigado de antemão.

Bom dia!

1. Você tem que escrever na seção "Negociação de Ações".

2. Não se pode sincronizar 2 futuros por barras.

Você deve tomar como base as barras de um dos futuros (a SBRF 9.20 mais líquida é melhor).

3. Para obter uma imagem completa do spread, não se deve fechar, mas fazer ticks e sincronizá-los com as barras de um selecionado como os principais futuros.

4. Para recalcular rapidamente, você deve memorizar a última posição calculada.

Exemplo de código de recálculo de spread com sincronização de tempo de barra

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:

Com esse tipo de conhecimento, é um pouco cedo para você estar escrevendo tais indicadores.

Como você é tão inteligente, talvez você possa me dizer como sincronizar duas séries de preços fechando os preços;)

 
prostotrader:

Boa tarde!

1. Você precisa escrever para a seção "Exchange Trading".

2. Não é possível sincronizar 2 futuros por barras.

Você deve tomar como base as barras de um dos futuros (a SBRF 9.20 mais líquida é melhor).

3. Para obter uma imagem completa do spread, não se deve fechar, mas fazer ticks e sincronizá-los com as barras de um selecionado como os principais futuros.

4. Para recalcular rapidamente, você deve memorizar a última posição calculada.

Um exemplo de código de recálculo de spread com sincronização de tempo de barra

Prostotrader, muito obrigado pela dica! Uma solução interessante, vou tentar agora e apresentarei um relatório mais tarde.

 
iiivasyaiii:

Como você é tão inteligente, talvez você possa me dizer como sincronizar duas séries de preços fechando os preços;)

A essência da pergunta já lhe foi dita. Você não pode construir um spread por preços de negócio (muito menos fechar preços!), porque pode não haver nenhum negócio na perna lenta por muito tempo, e mesmo que haja, eles serão dessincronizados com os preços dos negócios da perna rápida. Isto é, o valor de tais informações é zero. Há sempre (ou quase sempre) preços de compra e venda atuais no mercado, e são eles que devem ser analisados.

 
iiivasyaiii:

Maxim, obrigado por sua atenção ao meu problema.

Tenho alguns comentários a fazer em relação à sua resposta:

1) Os preços das transações que ocorreram (últimas) não são sacados, isto não é forex. Se você quis dizer algo mais, por favor, explique com mais detalhes.

2) Licite e peça é certamente bom, mas é uma ordem de grandeza mais complicada. Tentei escrever duas linhas adicionais para o spread principal, como comprar spread e vender spread. Eu tentei uma vez (pela maneira como foi desenhado por muito tempo), mas depois mudei algo no código e ele desapareceu e nunca mais reapareceu), se eu precisar dele, posso lhe enviar seu código. E a principal desvantagem da licitação e do eixo: se bem me lembro, os dados da licitação e do eixo são armazenados para os últimos 2000 ticks, de modo que um longo histórico sobre ele não pode ser analisado.

Então, por favor,vamos começar com a construção do diferencial entre os dois instrumentos sobre os preços de fechamento. Minha abordagem para sincronizar os preços de dois instrumentos usando o ArrayBsearch() está correta ou existe um método mais simples?

Não sou um programador, não preciso do código, não posso ajudar com os códigos. Mas eu lhe darei uma dica em essência. Portanto, os instrumentos de troca são construídos pelo preço no terminal e, como escreveu o prostotrader, não é correto sincronizá-los por preços próximos. Por carrapatos, sim, será correto. Procure o caminho certo de uma vez, por que cometer um erro).
 
prostotrader:

Boa tarde!

1. Você precisa escrever para a seção "Exchange Trading".

2. Não é possível sincronizar 2 futuros por barras.

Você deve tomar como base as barras de um dos futuros (a SBRF 9.20 mais líquida é melhor).

3. Para obter uma imagem completa do spread, não se deve fechar, mas fazer ticks e sincronizá-los com as barras de um selecionado como os principais futuros.

4. Para recalcular rapidamente, você deve memorizar a última posição calculada.

Um exemplo de código de recálculo de spread com sincronização de tempo de barra

Prostotrader, bom dia! Por favor, me avise, eu não entendi bem seu código:

1) Você usou a função CopyTicksRange ou CopyTicks?

2) A descrição destas funções diz que não podem copiar mais de 2000 ticks, o que significa que este indicador não pode analisar um histórico mais longo?

 
Dmi3:

A essência da pergunta já lhe foi dita. O spread não pode ser baseado em preços de transação (muito menos preços de fechamento!), porque pode não haver nenhuma transação na perna lenta por um longo tempo e, mesmo que haja, eles estarão fora de sincronia com os preços de transação da perna rápida. Isto é, o valor de tais informações é zero. Há sempre (ou quase sempre) preços reais de compra e venda no mercado, e é a eles que devemos analisar.

Não estou contestando que as ofertas são mais precisas (embora quando eu tinha um indicador de tempo curto mostrando três spreads: flipper, ask-bead e bid-ask, o flipper passou a maior parte do tempo entre os dois últimos, o que mostra que em geral o spread do flipper em instrumentos líquidos é adequado).

Vamos então descobrir como fazer a sincronização asc/bid da maneira menos intensiva de recursos possível e de preferência com um histórico profundo.

Por exemplo, a Prostatrader oferece uma opção interessante (acima).