Discussão do artigo "Desenvolvendo um sistema de Replay — Simulação de mercado (Parte 01): Primeiros experimentos (I)"
Qual é o objetivo do código a seguir?
17 struct st00 18 { 19 datetime dt; 20 int milisec; 21 double Bid, 22 Ask, 23 Last; 24 long Vol; 25 uchar flag; 26 }st00 m_ArrayInfoTicks[];
53 m_ArrayInfoTicks[m_ArrayCount].dt = macroRemoveSec ( StringToTime ( StringSubstr (szInfo, 0 , 19 ))); 54 m_ArrayInfoTicks[m_ArrayCount].milisec = ( int ) StringToInteger ( StringSubstr (szInfo, 20 , 3 ));Se os segundos foram removidos na linha 53, então os milissegundos e seu uso perdem todo o significado na linha 54.
No entanto, você os adiciona à estrutura.
Os eventos de cronômetro são gerados independentemente. E cada tique vem de acordo com um cronômetro, e não em milissegundos e segundos (que são excluídos).
Os milissegundos agora pesam no ar, como espaço extra na memória. E operações desnecessárias de preenchimento.
Além disso, você não resolveu outro problema que lhe permite reduzir a construção de uma barra de minutos.
Por exemplo, os horários destacados em vermelho e azul são os mesmos, sendo que o último preço pode ou não ser o mesmo.
Esses ticks podem ser comprimidos e reduzir bastante o tempo necessário para construir uma barra de minutos.
Isso impossibilita que você realize essa compressão com precisão. Não há vinculação de milissegundos a segundos - ela foi removida.
É claro que há uma baixa probabilidade de que o valor de milissegundos passe para o próximo segundo, e até mesmo continue nos próximos ticks. Mas ele está lá.
Há uma garantia de 100% de precisão somente ao passar de uma barra de minutos para a próxima - há uma vinculação de milissegundos a minutos.
Por exemplo, os horários destacados em vermelho e azul são os mesmos, sendo que o último preço pode ou não ser o mesmo.
Esses ticks podem ser comprimidos e reduzir bastante o tempo necessário para construir uma barra de minutos.
449 2021.10 . 22 09 : 00 : 38.649 107900 107905 6 450 2021.10 . 22 09 : 00 : 38.651 107900 1.00000000 88 451 2021.10 . 22 09 : 00 : 38.651 107895 5.00000000 88 452 2021.10 . 22 09 : 00 : 38.651 107890 5.00000000 88 453 2021.10 . 22 09 : 00 : 38.651 107885 3.00000000 88 454 2021.10 . 22 09 : 00 : 38.651 107880 15.00000000 88 455 2021.10 . 22 09 : 00 : 38.651 107880 3.00000000 88 456 2021.10 . 22 09 : 00 : 38.651 107875 16.00000000 88 457 2021.10 . 22 09 : 00 : 38.651 107870 2.00000000 88 458 2021.10 . 22 09 : 00 : 38.654 107875 1.00000000 88 459 2021.10 . 22 09 : 00 : 38.654 107875 1.00000000 88 460 2021.10 . 22 09 : 00 : 38.654 107880 1.00000000 88 461 2021.10 . 22 09 : 00 : 38.659 107880 2.00000000 88 462 2021.10 . 22 09 : 00 : 38.659 107885 2.00000000 88 463 2021.10 . 22 09 : 00 : 38.660 107885 1.00000000 88 464 2021.10 . 22 09 : 00 : 38.660 107890 3.00000000 88 465 2021.10 . 22 09 : 00 : 38.662 107885 3.00000000 88 466 2021.10 . 22 09 : 00 : 38.662 107880 3.00000000 88 467 2021.10 . 22 09 : 00 : 38.662 107875 2.00000000 88 468 2021.10 . 22 09 : 00 : 38.662 107895 3.00000000 88 469 2021.10 . 22 09 : 00 : 38.662 107900 1.00000000 88 470 2021.10 . 22 09 : 00 : 38.664 107880 1.00000000 88Porém, você removeu os segundos na linha 53.
53 m_ArrayInfoTicks[m_ArrayCount].dt = macroRemoveSec ( StringToTime ( StringSubstr (szInfo, 0 , 19 )));
54 m_ArrayInfoTicks[m_ArrayCount].milisec = ( int ) StringToInteger ( StringSubstr (szInfo, 20 , 3 ));
E deixou os milissegundos na linha 54. Isso impossibilita que você realize essa compressão com precisão. Não há vinculação de milissegundos a segundos - ela foi removida.
É claro que há uma baixa probabilidade de que o valor de milissegundos passe para o próximo segundo, e até mesmo continue nos próximos ticks. Mas ele está lá.
Há uma garantia de 100% de precisão somente ao passar de uma barra de minutos para a próxima - há uma vinculação de milissegundos a minutos.
Você precisa de milissegundos para compactar os ticks no futuro? Eu entendi corretamente?
Bem, "no futuro" - para mim - eu ainda não li mais nada. Para você, suponho, isso já está "no passado"...)))
Se for assim, concordo que os segundos podem ser removidos - a probabilidade de uma coincidência é extremamente baixa)))
Bem, "no futuro" - para mim - eu ainda não li mais nada. Para você, suponho, isso já está "no passado"...)))
Se for assim, concordo que os segundos podem ser removidos - a probabilidade de uma coincidência é extremamente baixa)))
Oh, um milagre! Se você comprimir os milissegundos, o tempo de formação da vela de minuto será 00:01:06. Contra 00:01:52 - sem compressão. Ganhamos 46 segundos!)))
Como resultado, com todas as edições.
Foram criadas 1153.809 posições de movimentação.
Ticks excluídos = 1066231
Verificação da velocidade de execução . 2023.12.02 01:52:21 ---- 2023.12.02 01:53:17
Hora de construir a primeira vela: 00:00:56 segundos.)))
Ganhamos 56 segundos!
Obrigado por seu excelente trabalho!
Tenho uma pergunta. É possível adicionar a opção de retrocesso ao replay? Quero dizer, voltar para as velas anteriores e reproduzir novamente.
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Novo artigo Desenvolvendo um sistema de Replay — Simulação de mercado (Parte 01): Primeiros experimentos (I) foi publicado:
Que tal criar um sistema para estudar o mercado quando ele está fechado, ou mesmo simular situações de mercado. Aqui vamos iniciar uma nova sequencia de artigos, a fim de tratar deste tema.
Este código, irá de fato criar as barras com um período de 1 minuto, que é o mínimo, que a plataforma exige, para poder gerar qualquer outro tempo gráfico. As partes em destaque, de fato não fazem parte o código, mas são uteis, para nos permitir analisar quanto a barra de 1 minuto. Esta de fato sendo criado dentro deste prazo, pois se ela demorar muito mais que 1 minuto para ser criada, teremos que fazer algo a respeito. Mas se ela estiver sendo criada, em menos de 1 minuto, pode ser que o sistema já será viável logo de cara.
Ao fazer este sistema executar, teremos o resultado, que e visto no video abaixo:
Autor: Daniel Jose