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
.. Acho que não é necessário recalcular esses valores de referência para cada par no próprio Expert Advisor. Você pode simplesmente criar um script que seja executado por alguns dias e pronto - aqui estão os valores de referência em um arquivo e deixar que os robôs leiam o arquivo. Um ano depois, recalcule. É improvável que essas distribuições mudem mesmo em um período de tempo tão longo. Mesmo que mudem, não mudarão muito....
Os dados matemáticos simples não mudarão em nada. Sugiro que armazenemos esses cálculos em um cache. Anexei um arquivo com cálculos desses mesmos fatoriais, probabilidades, somas de probabilidades, amplitude média calculada, com armazenamento em cache de tudo isso para o tempo de trabalho. Suponho que mais alguém além de mim possa achar isso útil também. Portanto, calcular esses valores, mesmo em cada barra, não é mais estressante.
Mas construir blocos no passado, em cada nova barra, e para vários tamanhos de blocos, é.... Quanto maior o tamanho, mais barras devem ser processadas para obter o número de blocos desse tamanho necessários para a análise.
Usei OHLC para construir o bloco, não apenas C. Em minha opinião, assumir que o preço passa por (O->H->L->L->C) para barras de baixa e (O->L->H->H->C) para barras de alta é um pouco mais útil do que assumir apenas o fechamento. Dessa forma, é claro, o número de cálculos não aumenta muito (em tempo absoluto), mas há vantagens. Por exemplo, o número necessário de blocos de retrocesso é digitado mais rapidamente. E ao mudar de M1 para M5, a imagem da digitação muda de forma insignificante. E ao mudar para M15 e superior, as alterações são inexistentes ou ainda mais insignificantes em comparação com M5. Isso também oferece perspectivas de aprimoramento do desempenho. Ao criar blocos progressivos, não é tão divertido, porque "em movimento" você pode criar uma imagem (por exemplo, imediatamente por ticks) e, ao recalcular, outra. Novamente, se os blocos futuros devem ser desenhados no fechamento da próxima barra, o OHLC também pode ser usado."Certamente não sou um mestre", como o Panda costumava dizer, mas o que construí de joelhos com base no artigo, depois de várias otimizações (em que a primeira é o cache de cálculos estatísticos), dá aproximadamente esses resultados:
- Moeda USDJPY M1, a preços de abertura, conjunto de blocos de 24 a 40, tamanho do bloco de 90 pips e mais +10% do anterior (máximo de 256p), 12 tamanhos no total.
- Em um período de um mês, uma execução simples leva, em média, 2,5 minutos, em que a parcela de processamento da negociação é de apenas 10%. Quanto mais rigorosos forem os requisitos para a detecção de tendências, menor será a frequência com que o sinal de abertura é encontrado e maior será a ultrapassagem na direção do aumento do tamanho do bloco e do tempo de busca. Quanto mais frequente for o sinal, mais frequente será a fixação de back-blocks e o cálculo apenas de fwd, o que é muito rápido.
Com o resultado de uma execução de 2,5 minutos para um mês de cálculo, é difícil identificar nuances ou otimizar alguns parâmetros de operação, mas é possível :)
A ideia do artigo é interessante e parece ser simples e clara. Mas, como disse uma garota, "eu não percebi se entendi...". Tudo o que foi dito acima não se refere à ideia em si ou à sua avaliação, mas apenas à sua realização concreta (é claro, incompleta e devido ao meu próprio entendimento).
P.S. E tudo começou com a dúvida de que, em 24 blocos, a média de perambulação será de 3,8 :)
A matemática básica não mudará em nada. Sugiro armazenar esses cálculos em cache. Anexei um arquivo com cálculos desses mesmos fatoriais, probabilidades, somas de probabilidades, amplitude média calculada, com armazenamento em cache de tudo isso para o tempo de trabalho. Suponho que mais alguém além de mim possa achar isso útil também. Portanto, calcular esses valores, mesmo em cada barra, não é mais estressante.
Mas construir blocos no passado, em cada nova barra, e para vários tamanhos de blocos, é.... Quanto maior o tamanho, mais barras devem ser processadas para obter o número de blocos desse tamanho necessários para a análise.
Usei OHLC para construir o bloco, não apenas C. Na minha opinião, assumir que o preço passa por (O->H->L->L->C) para barras de baixa e (O->L->H->H->C) para barras de alta é um pouco mais útil do que assumir apenas o fechamento. Dessa forma, é claro, o número de cálculos não aumenta muito (em tempo absoluto), mas há vantagens. Por exemplo, o número necessário de blocos de retrocesso é digitado mais rapidamente. E ao mudar de M1 para M5, a imagem da digitação muda de forma insignificante. E ao mudar para M15 e superior, as alterações são inexistentes ou ainda mais insignificantes em comparação com M5. Isso também oferece perspectivas de aprimoramento do desempenho. Ao criar blocos progressivos, não é tão divertido, porque "em movimento" você pode criar uma imagem (por exemplo, imediatamente por ticks) e, ao recalcular, outra. Novamente, se os blocos futuros devem ser desenhados no fechamento da próxima barra, o OHLC também pode ser usado."Certamente não sou um mestre", como o Panda costumava dizer, mas o que construí de joelhos com base no artigo, depois de várias otimizações (em que a primeira é o cache de cálculos estatísticos), dá aproximadamente esses resultados:
- Moeda USDJPY M1, a preços de abertura, conjunto de blocos de 24 a 40, tamanho do bloco de 90 pips e mais +10% do anterior (máximo de 256p), 12 tamanhos no total.
- Em um período de um mês, uma execução simples leva, em média, 2,5 minutos, em que a parcela de processamento da negociação é de apenas 10%. Quanto mais rigorosos forem os requisitos para a detecção de tendências, menor será a frequência com que o sinal de abertura é encontrado e maior será a ultrapassagem na direção do aumento do tamanho do bloco e do tempo de busca. Quanto mais frequente for o sinal, mais frequente será a fixação de back-blocks e o cálculo apenas de fwd, o que é muito rápido.
Com o resultado de uma execução de 2,5 minutos para um mês de cálculo, é difícil identificar nuances ou otimizar alguns parâmetros de operação, mas é possível :)
A ideia do artigo é interessante e parece ser simples e clara. Mas, como disse uma garota, "eu não percebi se entendi...". Tudo o que foi dito acima não se refere à ideia em si ou à sua avaliação, mas apenas à sua realização concreta (é claro, incompleta e devido ao meu próprio entendimento).
P.S. E tudo começou com a dúvida de que, em 24 blocos, a média de perambulação será de 3,8 :)
Sim, minha matemática é armazenada em cache no tempo de execução. Os testes são muito longos... Eu estava preparando testes para o próximo artigo e, antes do ano novo, coloquei os testes em teste. O testador é single-threaded, então dividi os testes em seções de 2 anos (28 pares de moedas) e carreguei 5 terminais. Tudo isso foi testado por 14 dias e, em seguida, meu roteador quebrou, comecei a conectar a Internet por cabo diretamente e recebi o erro send error 10054 em todos os testadores.... Portanto, o próximo artigo não será publicado em breve... A propósito, quem sabe que tipo de erro de envio é o erro 10054 e como evitá-lo no futuro?
Nem tudo está descrito no artigo ainda, quase tudo está descrito nos ToR, mas nem tudo está descrito lá também)). Agora estou fazendo uma versão muito melhor.
A propósito, como desapareceram as dúvidas sobre a figura 3.8)?
Por enquanto, vou apresentar os resultados de 1,5 ano, de 2010/06/25 a 2012/02/27, sem otimização para 28 instrumentos ao mesmo tempo. Os parâmetros de todos os instrumentos são os mesmos
A propósito, quem sabe que tipo de erro é o erro de envio 10054 e como evitá-lo no futuro?
A propósito, como as dúvidas sobre o número 3,8 desapareceram?)As dúvidas desapareceram, matemática.
e 10054 é supostamente um erro de protocolo de rede, devido à perda de conexão de rede. O fato de ter sido conectado novamente não teve importância. O problema geralmente aparece em muitos programas quando você retira o link da placa de rede (ou desconecta o roteador). Nesse caso (especialmente se o ip por dhcp for recebido), o Windows começa a pensar que não tem mais um dispositivo de rede em funcionamento e, portanto, os serviços de rede são interrompidos. Ao mesmo tempo, os programas executados localmente em conexões de rede, por exemplo, para o endereço local 127.0.0.1, também são interrompidos.
O seguinte me ajudou: criei um dispositivo de rede virtual (loopback, você pode pesquisar no Google), atribuí um endereço IP como 127.0.1.1 a ele, escrevi o nome do meu PC e esse endereço em hosts. Acontece que sempre há um dispositivo de rede ativo no sistema, o PC está disponível para si mesmo pelo nome e por esse endereço, os serviços de rede são iniciados, os programas que se comunicam consigo mesmos via tcp/ip - também.
Bem, eu sempre desabilito o ipv6 também.
Novamente, não percebo isso há muito tempo, ou estou sempre conectado ou algo mudou em algum lugar...As dúvidas desapareceram, matemática.
e 10054 é, presumivelmente, um erro de protocolo de rede devido à perda de conexão de rede. O fato de ter sido conectado novamente não teve importância. O problema geralmente aparece em muitos programas quando você retira o link da placa de rede (ou desconecta o roteador). Nesse caso (especialmente se o ip por dhcp for recebido), o Windows começa a pensar que não tem mais um dispositivo de rede em funcionamento e, portanto, os serviços de rede são interrompidos. Ao mesmo tempo, os programas executados localmente em conexões de rede, por exemplo, para o endereço local 127.0.0.1, também são interrompidos.
O seguinte me ajudou: criei um dispositivo de rede virtual (loopback, você pode pesquisar no Google), atribuí um endereço IP como 127.0.1.1 a ele, escrevi o nome do meu PC e esse endereço em hosts. Acontece que sempre há um dispositivo de rede ativo no sistema, o PC está disponível para si mesmo pelo nome e por esse endereço, os serviços de rede são iniciados, os programas que se comunicam consigo mesmos via tcp/ip - também.
Bem, eu sempre desabilito o ipv6 também.
Novamente, não percebo isso há muito tempo, ou estou sempre conectado ou algo mudou em algum lugar...ah, obrigado... Acho que consegui, desconectei acidentalmente a placa de rede, acho que foi aí que o windup entrou em pânico e o testador parou. Obrigado!
Anexe a amostra do MT5 EA para que possamos seguir suas ideias e testar sua teoria.
Anexe a amostra do MT5 EA para que possamos seguir suas ideias e testar sua teoria.
O algoritmo não é distribuído em domínio público, mas no próximo artigo mostrarei como ele funciona usando o exemplo de backtests.
Saudações.
Algumas reflexões e seus resultados. Um pouco longo.
Há duas abordagens para analisar os desvios de bloco: o gráfico é um passeio aleatório - usamos funções estatísticas (em fatoriais, etc.) ou o gráfico é um movimento não aleatório - usamos dados estatísticos sobre movimentos passados. Se você acompanha a formação do gráfico de blocos há muito tempo, provavelmente já percebeu que o gráfico depende do ponto inicial de construção. Se construirmos o gráfico a cada abertura de candle, obteremos um gráfico ligeiramente diferente no candle N do que no N+1. Portanto, há duas opções para gerar dados estatísticos sobre blocos passados: também a cada abertura de candle ou periodicamente, por exemplo, uma vez por (hora/dia/semana), mas, ao mesmo tempo, o gráfico de blocos deve ser plotado a partir do mesmo ponto zero. A abordagem com recálculo de tudo a cada barra é possível, mas é muito lenta.
Eu me desesperei com essa opção de escolher/testar algo no testador e testei todas as suposições ou parâmetros ideais na demonstração, on-line, controlando os resultados pelo gráfico de patrimônio/balanço on-line também. Devo dizer que, nesses períodos curtos (o último, de 21/01 até a hora atual), o algoritmo (bem, como eu o entendi e implementei) é bastante estável. A propósito, eu abro não em cada barra em um sinal, mas em um novo sinal (ou seja, houve um sinal de compra no bloco H 150p, eu comprei, o próximo foi aberto em Buy H=165, e isso se ele entrar em negativo. Uma vez que, com o desenvolvimento positivo, o desequilíbrio na oscilação diminui, respectivamente, e o sinal desaparece). Apenas uma conta de demonstração de 8, com configurações muito agressivas, com um saldo de US$ 1.000 e alavancagem de 1:1.000, usou 48 pares de moedas, metais, 2 petróleos, sem controle de hedge em moedas ("hedge"), foi para o stopout - quando você compra USDJPY, você não pode comprar USDCAD, mas você pode comprar EURUSD, etc. em todo o conjunto de símbolos, o artigo tem), na transação alocada $10, lote adaptativo, depende do tamanho do bloco, saída apenas no lucro acumulado na soma das transações no símbolo ou na soma do lucro em todos os símbolos abertos.
Estável, sim, mas os rebaixamentos são significativos. Quando fomos "na direção errada" e continuamos a construir a posição, estando no negativo, isso é compreensível. Mas as configurações menos agressivas não mataram as outras contas, sim.
Voltando à maneira de calcular os bloqueios. Agora uso a seguinte variante. Tomamos um ponto de referência - o fechamento da sexta-feira anterior. A partir dele, construímos (uma vez!) conjuntos de blocos anteriores com alturas como no artigo (*1.1). Tomei (iATR(sy, PERIOD_M1, 1440) X 5) do ponto inicial como a altura inicial. Imediatamente, criamos conjuntos com o comprimento StepMax+MAX_STAT (por exemplo, 48+1000) e calculamos a distribuição das frequências de execução etc. para cada comprimento em blocos (que seja de 24 a 48). Em seguida, a cada nova barra, completamos os conjuntos avançados, procuramos um sinal para cada H no intervalo de comprimentos (por exemplo, blocos [24;48]), guiados pelas estatísticas calculadas anteriormente, escolhemos um sinal adequado, tomamos a decisão de abrir um novo, fechar/atualizar um antigo etc. .... Essa abordagem proporciona um aumento significativo na velocidade de cálculo e, acredito, não difere muito da proposta no artigo (cálculo "do zero" em cada barra). Ao mesmo tempo, surgem algumas possibilidades adicionais. Em particular, se os níveis não mudarem durante a semana, então, se houver um sinal para H=180p (por exemplo), você pode colocar uma grade de ordens na direção esperada do movimento....
Além disso. Essa abordagem permitiu não usar estatísticas puras, mas medir distribuições e expectativas específicas em um símbolo e tamanho de bloco específicos. Isso melhorou um pouco os resultados em comparação com a "errância pura". Ao mesmo tempo, coletamos dados sobre o módulo de duração da perambulação (também nas funções de estatística usei o módulo de duração do movimento, e é compreensível que a caminhada aleatória, em geral, seja simétrica em relação a zero). Devo observar separadamente que o tamanho da amostra de 1.000 unidades pode ser chamado de "estatisticamente confiável" de forma bastante condicional, mas esse não é o ponto.
Bem, então tentei coletar a distribuição dos comprimentos de milhagem em blocos levando em conta seu sinal (para cima ou para baixo). E os resultados pioraram. De forma inesperada.
Verifiquei o conjunto de símbolos "28 majors" e os conjuntos para cada major (*AUD*, etc.). Isso já está no MT5. Verifiquei diferentes períodos, parâmetros de construção de blocos, várias nuances de entrada-saída....
A conclusão geral (de acordo com os resultados disponíveis) é que, ao levar em conta a direção da duração dos movimentos nos blocos, a eficiência do sistema diminui. Se alguém puder explicar isso, ficarei feliz em saber o que e como. Além disso, se alguém tiver uma experiência semelhante, mas com resultado oposto, terei prazer em discutir e comparar.
Saudações.
Algumas reflexões e seus resultados. É um pouco longo.
Há duas abordagens para analisar os desvios de bloco: o gráfico é um passeio aleatório - usamos funções estatísticas (em fatoriais, etc.) ou o gráfico é um movimento não aleatório - usamos dados estatísticos sobre movimentos passados. Se você acompanha a formação do gráfico de blocos há muito tempo, provavelmente já percebeu que o gráfico depende do ponto inicial de construção. Se construirmos o gráfico a cada abertura de candle, obteremos um gráfico ligeiramente diferente no candle N do que no N+1. Portanto, há duas opções para gerar dados estatísticos sobre blocos passados: também a cada abertura de candle ou periodicamente, por exemplo, uma vez por (hora/dia/semana), mas, ao mesmo tempo, o gráfico de blocos deve ser plotado a partir do mesmo ponto zero. A abordagem com recálculo de tudo e de tudo novamente a cada barra é possível, mas é muito lenta.
Eu me desesperei com essa opção de pegar/testar algo no testador e testei todas as suposições ou parâmetros ideais na demonstração, on-line, controlando os resultados pelo gráfico de patrimônio/balanço on-line também. Devo dizer que, nesses períodos curtos (o último, de 21/01 até a hora atual), o algoritmo (bem, como eu o entendi e implementei) é bastante estável. A propósito, eu abro não em cada barra em um sinal, mas em um novo sinal (ou seja, houve um sinal de compra no bloco H 150p, eu comprei, o próximo foi aberto em Buy H=165, e isso se ele entrar em negativo. Uma vez que, com o desenvolvimento positivo, o desequilíbrio na oscilação diminui, respectivamente, e o sinal desaparece). Apenas uma conta de demonstração de 8, com configurações muito agressivas, com um saldo de US$ 1.000 e alavancagem de 1:1.000, usou 48 pares de moedas, metais, 2 petróleos, sem controle de hedge em moedas ("hedge"), foi para o stopout - quando você compra USDJPY, você não pode comprar USDCAD, mas você pode comprar EURUSD, etc. em todo o conjunto de símbolos, o artigo tem), no negócio alocado $10, lote adaptativo, depende do tamanho do bloco, saia apenas do lucro acumulado na soma das transações no símbolo ou na soma do lucro em todos os símbolos abertos.
Estável, sim, mas os rebaixamentos são significativos. Quando fomos "na direção errada" e continuamos a construir a posição, estando no negativo, isso é compreensível. Mas as configurações menos agressivas não mataram as outras contas, sim.
Voltando à maneira de calcular os bloqueios. Agora uso a seguinte variante. Tomamos um ponto de referência - o fechamento da sexta-feira anterior. A partir dele, construímos (uma vez!) conjuntos de blocos anteriores com alturas como no artigo (*1.1). Tomei (iATR(sy, PERIOD_M1, 1440) X 5) do ponto inicial como a altura inicial. Imediatamente, criamos conjuntos com o comprimento StepMax+MAX_STAT (por exemplo, 48+1000) e calculamos a distribuição das frequências de execução etc. para cada comprimento em blocos (que seja de 24 a 48). Em seguida, a cada nova barra, completamos os conjuntos avançados, procuramos um sinal para cada H no intervalo de comprimentos (por exemplo, blocos [24;48]), guiados pelas estatísticas calculadas anteriormente, escolhemos um sinal adequado, tomamos a decisão de abrir um novo, fechar/atualizar um antigo etc. .... Essa abordagem proporciona um aumento significativo na velocidade de cálculo e, acredito, não difere muito da proposta no artigo (cálculo "do zero" em cada barra). Ao mesmo tempo, surgem algumas possibilidades adicionais. Em particular, se os níveis não mudarem durante a semana, então, se houver um sinal para H=180p (por exemplo), você pode colocar uma grade de ordens na direção esperada do movimento....
Além disso. Essa abordagem permitiu não usar estatísticas puras, mas medir distribuições e expectativas específicas em um símbolo e tamanho de bloco específicos. Isso melhorou um pouco os resultados em comparação com a "errância pura". Ao mesmo tempo, coletamos dados sobre o módulo de duração da perambulação (também nas funções de estatísticas usei o módulo de duração do movimento, e é compreensível que a caminhada aleatória, em geral, seja simétrica em relação a zero). Eu gostaria de observar separadamente que o tamanho da amostra de 1.000 unidades pode ser chamado de "estatisticamente confiável" de forma bastante condicional, mas esse não é o ponto.
Bem, então tentei coletar a distribuição dos comprimentos de milhagem em blocos levando em conta seu sinal (para cima ou para baixo). E os resultados pioraram. De forma inesperada.
Verifiquei o conjunto de símbolos "28 majors" e os conjuntos para cada major (*AUD*, etc.). Isso já está no MT5. Verifiquei diferentes períodos, parâmetros de construção de blocos, várias nuances de entrada-saída.....
A conclusão geral (de acordo com os resultados disponíveis) é que, ao levar em conta a direção do comprimento dos movimentos nos blocos, a eficiência do sistema diminui. Se alguém puder explicar isso, ficarei feliz em saber o que e como. Além disso, se alguém tiver uma experiência semelhante, mas com resultado oposto, terei prazer em discutir e comparar.
Sim, o gráfico depende do ponto inicial de construção. Isso é feito propositalmente por dois motivos: para que o algoritmo, apesar dos erros de arredondamento de preços com a ajuda de blocos, encontre melhor a escala máxima e, pelo segundo motivo, para evitar o ajuste ao histórico. Quando o gráfico muda dependendo do ponto de partida, é possível avaliar com mais precisão a qualidade do próprio algoritmo.
No testador, testei e mostrarei no próximo artigo muitos testes de como ele funciona. A demonstração é longa e não informativa. Um teste de 1 ano em 28 pares de moedas leva 15 dias (Ryzen 3700). Da forma como foi descrito, os retornos não são grandes, mas ele passa nos backtests de forma muito estável. Estou aprimorando o algoritmo agora.
Há uma peculiaridade nas características estatísticas da ferramenta. Elas podem ser obtidas e a porcentagem de desempenho superior pode ser ajustada com base nelas, mas é necessário usar grandes valores de amostra para avaliar o caráter do instrumento como um todo. Os desvios locais podem ser capturados, mas para outros fins. Quando testei, parâmetros de sobreponderação separados para posições longas e curtas funcionam bem em ações, ou seja, quando a assimetria é levada em conta, ela se torna melhor.
O tamanho do bloco inicial também deve ser ajustado à situação atual do mercado. Inicialmente, fiz isso por meio da volatilidade, mas agora estou reformulando-o para levar em conta as peculiaridades do mercado.
Mas a ideia é criar um algoritmo básico primeiro e depois cobri-lo com estatísticas. As estatísticas não podem ser medidas sem mais nem menos, precisamos levar em conta que medimos as características estatísticas em uma janela grande e, se elas se desviarem do passeio aleatório, tenderão a isso no futuro, precisamos usar parâmetros abaixo do ideal com antecedência. E as estatísticas não devem ser simples, mas levar em conta a teoria, mas não escrevi sobre a teoria porque não a provei, e não gosto de escrever o que não foi provado.
Em geral, o algoritmo é um boleto e, nesse estágio, sua tarefa não é drenar e ganhar algo.
Excelente trabalho,
Muito obrigado!