Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1883
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
Eu queria contornar a necessidade de redimensionar manualmente a matriz dinâmica simplesmente atribuindo-a como um buffer indicador. Mas não posso me livrar do ArrayResize() como se fosse um conjunto dinâmico de buffer indicador cujo tamanho deveria ser monitorado pelo próprio terminal e que não deveria ser redimensionado manualmente:
https://www.mql5.com/ru/docs/series/bufferdirection:
Индикаторный буфер представляет из себя динамический массив типа double, размером которого управляет клиентский терминал с тем, чтобы он всегда соответствовал количеству баров, на которых индикатор рассчитывается. Обычный динамический массив типа double назначается в качестве индикаторного буфера с помощью функции SetIndexBuffer(). Для индикаторных буферов не требуется задавать размер с помощью функции ArrayResize(), исполняющая система терминала сама позаботится об этом.
Vamos a https://www.mql5.com/ru/docs/array/arrayisdynamic, corremos o código e de repente descobrimos isso:
2022.01.24 21:25:27.543 t (NZDUSD,D1) 3. Verificação do buffer indicador:
2022.01.24 21:25:27.543 t (NZDUSD,D1) Tamanho antes do lançamento da memória = 7278
2022.01.24 21:25:27.543 t (NZDUSD,D1) Esta é uma matriz dinâmica = Nenhuma
2022.01.24 21:25:27.543 t (NZDUSD,D1) Tamanho após o lançamento da memória = 0
ao mesmo tempo:
Eu olho no livro - eu vejo um figo. Ou fomos enganados durante todo este tempo?
Ou talvez seja dinâmico uma vez (na primeira inicialização) e depois é só isso?
Não consigo me livrar do ArrayResize(), que é supostamente um conjunto dinâmico de buffer indicador cujo tamanho deve ser monitorado pelo próprio terminal e que supostamente não precisa ser redimensionado manualmente:
https://www.mql5.com/ru/docs/series/bufferdirection:
Vamos a https://www.mql5.com/ru/docs/array/arrayisdynamic, corremos o código e de repente descobrimos isso:
Ao mesmo tempo:
Eu olho no livro - eu vejo um figo. Ou fomos enganados durante todo este tempo?
Ou talvez seja dinâmico uma vez (na primeira inicialização) e depois é só isso?
22:23:17.002 EURCAD dinâmico,H1: + +
0 22:23:17.002 EURCAD dinâmico,H1: 1. Verificação de uma matriz dinâmica:
0 22:23:17.002 EURCAD,H1 dinâmico: Tamanho antes do lançamento da memória = 100
0 22:23:17.002 EURCAD,H1 Dinâmico: Este é o Dynamic Array = Sim
0 22:23:17.002 EURCAD,H1 dinâmico: Tamanho após memória livre = 0
0 22:23:17.002 EURCAD dinâmico,H1: 2. Verificação da matriz estática:
0 22:23:17.002 EURCAD,H1 dinâmico: Tamanho antes da memória livre = 100
0 22:23:17.002 EURCAD dinâmico,H1: Esta é uma matriz dinâmica = Nenhuma
0 22:23:17.002 EURCAD,H1 dinâmico: Tamanho após memória livre = 0
0 22:23:17.002 EURCAD dinâmico,H1: 3. Verificar o buffer indicador:
0 22:23:17.002 EURCAD,H1 dinâmico: Tamanho antes da memória livre = 2725
0 22:23:17.002 EURCAD dinâmico,H1: Esta é uma matriz dinâmica = Sim
0 22:23:17.002 EURCAD,H1 dinâmico: Tamanho após o lançamento da memória = 0
0 22:23:24.754 EURCAD,H1 dinâmico: razão uninit 1
0 22:23:24.758 Indicador personalizado EURCAD,H1 dinâmico: removido
Esta é a 4.
Eu queria contornar a necessidade de redimensionar manualmente a matriz dinâmica simplesmente atribuindo-a como um buffer indicador. Mas não posso me livrar do ArrayResize() como se fosse um conjunto dinâmico de buffer indicador cujo tamanho deveria ser monitorado pelo próprio terminal e que não deveria ser redimensionado manualmente:
https://www.mql5.com/ru/docs/series/bufferdirection:
Vamos a https://www.mql5.com/ru/docs/array/arrayisdynamic, corremos o código e de repente descobrimos isso:
Ao mesmo tempo:
Eu olho no livro - eu vejo um figo. Ou fomos enganados todo esse tempo?
Ou talvez seja uma vez dinâmico (na primeira inicialização) e depois é só isso?
sim, então é isso :-)
...após SetIndexBuffer é impossível usar o ArrayResize e do ponto de vista do programa, o array é estático, com um tamanho pré-definido (controlado externamente)
22:23:17.002 EURCAD dinâmico,H1: + +
0 22:23:17.002 EURCAD dinâmico,H1: 1. Verificação de uma matriz dinâmica:
0 22:23:17.002 EURCAD,H1 dinâmico: Tamanho antes do lançamento da memória = 100
0 22:23:17.002 EURCAD,H1 Dinâmico: Este é o Dynamic Array = Sim
0 22:23:17.002 EURCAD,H1 dinâmico: Tamanho após memória livre = 0
0 22:23:17.002 EURCAD dinâmico,H1: 2. Verificação da matriz estática:
0 22:23:17.002 EURCAD,H1 dinâmico: Tamanho antes da memória livre = 100
0 22:23:17.002 EURCAD dinâmico,H1: Esta é uma matriz dinâmica = Nenhuma
0 22:23:17.002 EURCAD,H1 dinâmico: Tamanho após memória livre = 0
0 22:23:17.002 EURCAD dinâmico,H1: 3. Verificar o buffer indicador:
0 22:23:17.002 EURCAD,H1 dinâmico: Tamanho antes da memória livre = 2725
0 22:23:17.002 EURCAD dinâmico,H1: Esta é uma matriz dinâmica = Sim
0 22:23:17.002 EURCAD,H1 dinâmico: Tamanho após o lançamento da memória = 0
0 22:23:24.754 EURCAD,H1 dinâmico: razão uninit 1
0 22:23:24.758 Indicador personalizado EURCAD,H1 dinâmico: removido
Esta é a 4.
Fantástico! O que é esta magia? Acabei de verificar o EURCAD,H1 - novamente não.
E o que é 4? Há apenas três pontos no exemplo.
Fantástico! Qual é a magia? Acabei de verificar no EURCAD,H1 - "Não" novamente.
E o que é 4? Há apenas três pontos no exemplo.
Terminal MT4
Fantástico! O que é esta magia? Acabei de verificar no EURCAD,H1 - "Não" novamente.
E o que é 4? Há apenas três pontos no exemplo.
0 23:33:06.088 teste (EURUSD,D1) +============================+
0 23:33:06.088 teste (EURUSD,D1) 1. Verificação da matriz dinâmica:
0 23:33:06.088 teste (EURUSD,D1) Tamanho antes do lançamento da memória = 100
0 23:33:06.088 teste (EURUSD,D1) Esta é uma matriz dinâmica = Sim
0 23:33:06.088 teste (EURUSD,D1) Tamanho após o lançamento da memória = 0
0 23:33:06.088 teste (EURUSD,D1) 2. Teste estático da matriz:
0 23:33:06.088 teste (EURUSD,D1) Tamanho antes da memória livre = 100
0 23:33:06.088 test (EURUSD,D1) Esta é uma matriz dinâmica = Nenhuma
0 23:33:06.088 teste (EURUSD,D1) Tamanho após o lançamento da memória = 100
0 23:33:06.088 teste (EURUSD,D1) 3. Verificar buffer indicador:
0 23:33:06.088 teste (EURUSD,D1) Tamanho antes da memória livre = 1054
0 23:33:06.088 test (EURUSD,D1) Esta é uma matriz dinâmica = Nenhuma
0 23:33:06.088 teste (EURUSD,D1) Tamanho após o lançamento da memória = 0
Terminal MT5, sem pensamentos.
Eu queria contornar a necessidade de redimensionar manualmente a matriz dinâmica simplesmente atribuindo-a como um buffer indicador. Mas não posso me livrar do ArrayResize() como se fosse um conjunto dinâmico de buffer indicador cujo tamanho deveria ser monitorado pelo próprio terminal e que não deveria ser redimensionado manualmente:
https://www.mql5.com/ru/docs/series/bufferdirection:
Vamos a https://www.mql5.com/ru/docs/array/arrayisdynamic, corremos o código e de repente descobrimos isso:
Ao mesmo tempo:
Eu olho no livro - eu vejo um figo. Ou fomos enganados durante todo este tempo?
Ou talvez seja dinâmico uma vez (na primeira inicialização) e depois é só isso?
A matriz tampão é dinâmica. Na MQL, as matrizes dinâmicas têm sinais de objetos, tanto quanto eu entendi enquanto trabalhava com eles (como em idiomas de nível ultra-alto). Mas se você declarar uma matriz dinâmica como um buffer (usando SetIndexBuffer), esta área de memória se tornará reservada. É por isso que a maioria das funções padrão não pode mudar seu tamanho. Eu às vezes uso conjuntos de objetos como amortecedores indicadores. E se o fizer, a memória de tais arrays é liberada no destruidor do objeto. Assim, é permitida a liberação de memória tampão indicador pela própria aplicação(ou objeto). Mas isso não significa que a matriz possa ser liberada durante a operação do indicador. Tudo deve ser feito com sabedoria.
Tarde
Você pode me aconselhar, estou tentando escrever um Consultor Especialista, e quando eu testo acontece uma coisa estranha...
Eu tenho uma função
Qual é a situação, eu corro uma instância da EA em um gráfico, e corro a segunda no modo de depuração no mesmo gráfico com o MT4
Os dados de entrada para a função são os mesmos, mas os dados de saída são diferentes!!!? Eu simplesmente não entendo algo, parece que...(
me aconselhe qual o caminho a ser seguido para obter informações!!!
PS: calculou a diferença de exatamente 2,5 vezes a produçãoEu tenho uma função
Qual é a situação, eu corro uma instância da EA em um gráfico, e corro a segunda no modo de depuração no mesmo gráfico com o MT4
Os dados de entrada para a função são os mesmos, mas os dados de saída são diferentes!!!? Eu simplesmente não entendo algo, parece que...(
você pode me dizer qual o caminho a ser percorrido para obter informações?!
PS: calculou a diferença de exatamente 2,5 vezes a produçãoÉ tudo uma questão de fórmula para calcular o ângulo. No código pode ser visto que para seu cálculo utilizou apenas uma coordenada e algum coeficiente, cuja finalidade não é clara. O que é isto? Por favor, elabore os dados que você está utilizando para calcular o ângulo.