![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Sim...é tudo o mesmo em princípio...
A nova construção deixou de copiar estruturas simples no laço. Aqui está um guião de teste:
Resultado:
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Violação de acesso lido para 0x00000000209FFFAC em 'E:\Program Files\Championship_2011\MQL5\Scripts\Test_Copy_Struct.ex5'.
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) i=0
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=3000.00 MAPeriod=100 MA_use=1 Lots=0.10 takeprofit=1000
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Setting reopened=110 overpos=130 TrailingStop=200 WithoutlossLevel=1300 WithoutlossProfit=1500
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=1000.00 MAPeriod=85 MA_use=0 Lots=0.15 takeprofit=1700
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD, M15) Setting reopened=110 overpos=140 TrailingStop=200 WithoutlossLevel=600 WithoutlossProfit=800
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=2000.00 MAPeriod=105 MA_use=1 Lots=0.13 takeprofit=2700
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Setting reopened=60 overpos=90 TrailingStop=1000 WithoutlossLevel=100 WithoutlossProfit=900
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=0.00 MAPeriod=0 MA_use=0 Lots=0.00 takeprofit=0
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Setting reopened=0 overpos=0 TrailingStop=0 WithoutlossLevel=0 WithoutlossProfit=0
https://www.mql5.com/ru/docs/basis/function/events diz no final:"Para uma melhor compreensão, será útil executar o indicador cujo código está anexado abaixo. "
Executar o código. Durante o fim-de-semana. Não houve melhor compreensão - penso que foi bom como foi, mas as piores impressões foram acrescentadas. Não há carraças no fim-de-semana, pelo que prev_calculado = 0 neste momento sempre, quando se passa de um período de tempo para um período de tempo:
Contudo, a dada altura, este valor aparece (sem reconexões, honestamente nobre!):
e linhas engraçadas na tabela:
Ou metade de tanta diversão, como esta:
Havia até linhas no início da história sob a forma de um ZigZag (infelizmente, esqueci-me de tirar uma imagem e não a consegui reproduzir).
As linhas também aparecem em outras TF, mas mais esparsamente. Pode vê-lo facilmente por si próprio.
Era exactamente isso que os autores queriam dizer?
Porque é que o resultado de um cálculo prévio é pelo menos desigual na ausência de carraças, se não estranho? Algo está a funcionar mal quando se salta de TF para TF?
Deveriam estas (ou quaisquer outras) linhas ter aparecido fora das carraças?
Em casos raros, os saltos relativamente frequentes de TF para TF podem gerar algum tipo de pseudotick que inicia o cálculo dos valores das barras na história, etc.?
Devo esperar que o comportamento errático do terminal seja eliminado? Ou devo aprender a matemática?
Talvez eu esteja a tentar fazer algo que não deveria querer fazer? Nesse caso, justifique o seu ponto de vista.
Tenho muitas perguntas... mas isto é apenas o começo...
Continua...
Na mesma ligação há uma frase:"Nota: se a função OnCalculate devolver valor nulo, nenhum valor indicador é mostrado na Janela de Dados do terminal do cliente. "
Eis o que se passa... Se necessário, aceitarei de bom grado qualquer crescimento de braço e correrei imediatamente para o endireitar, se necessário. Mas... Em indicadores de complexidade simples e média, pode de alguma forma sair de algumas situações de tropeço. Mas à medida que o código se torna mais complexo, qualquer função de Copiar... () (tanto tomando como argumento a manipulação de outro indicador, como sem ele) começa a complicar a situação, como penso pessoalmente, lidando com a programação MQL há uma semana atrás. Então chega um momento limite quando não se sabe o que mais pode ser alterado no código, porque tudo o que pode ser alterado foi alterado, e o resto, como me parece, não deve ser alterado, porque não tem nada a ver com o problema. Ou ocorre um pensamento absolutamente desarmante: mudar todo o algoritmo, porque as peculiaridades e os caprichos do terminal não foram tidos em conta. Afinal de contas, enquanto estuda MQL para documentação, tem de lidar com as nuances, que os criadores têm mantido em silêncio, muito provavelmente inadvertidamente. E o programador MQL nunca aprende muitas coisas depois de estudar completamente a documentação... E o que é mais decepcionante, usando MQL, ou não consegue corrigir muitos dos caprichos do terminal, ou pode usar muletas duvidosas e um dia cair dolorosamente...
Bem... Hoje fiquei um pouco louco. É o fim-de-semana.
E eis o que queria dizer-vos esta manhã...
https://www.mql5.com/ru/forum/1111/page570#comment_117425 - Resolvi completamente o problema principal de como o indicador não é apresentado no início do terminal inicial (espero que ninguém argumente que nada deve impedir um indicador fractal de apresentar correctamente todo o historial, mesmo que não haja carraças?)
Foi:
substituído por:
Admito a minha falta de atenção e o consequente formalismo pernicioso.
Mas... Ajudou no caso mais simples (simplifiquei propositadamente o indicador inicial). Num indicador mais complexo estas operações não foram úteis - num determinado momento as alterações não mostraram qualquer diferença, especialmente agora que existem muitas funções de cópia. E eu gostaria muito de receber uma instrução sensata sobre como e para onde ir a seguir. Afinal, tanto tempo é gasto em algo que funciona fora da caixa. Até agora, nem sequer sei se a culpa é minha ou do terminal. E não tenho a certeza se é apenas uma falta de "se" e deretorno. Parece suspeito aqui e ali, tal como noutros lugares, por exemplo.
Enviarei o código aos programadores no meu pessoal se necessário; posso também anexar um código semelhante, mas implementado de uma forma diferente e funciona sem problemas (embora, não se ajuste bem às tarefas e objectivos que estou a explorar).
Há uma forte suspeita de que o terminal esteja a mexer com a cache (estou quase fora do circuito, por isso...). Pior - mesmo o MetaEditor afecta de alguma forma o tratamento do que se passa no terminal na altura.
Mais de uma vez encontrei um problema, quando modifiquei o código do programa MQL (que imprime os dados de depuração no registo do separador Expert Advisor), recompilei-o, fui à janela Terminal e vi os resultados anteriores a repetir-se, embora possa definitivamente dizer que não se trata de uma espécie de retrabalho atrasado da execução anterior do programa não concluído. Assim, parece que estou a compilar o código actualizado no MetaEditor com F7 e a enviá-lo para correr, e entretanto o terminal está a ser comandado para reproduzir novamente o código antigo (a partir do cache, ou algo como "fudging" páginas de memória por SO). Curiosamente, é possível desfazer/descarregar "preso nos dentes" a versão anterior do código .ex5 não só através do processo de descarga completa do terminal.exe, mas em alguns casos raros - apenas fechando o MetaEditor. Compreenda-o como quiser, acabei de contar o que observei pessoalmente.
Recentemente, houve uma situação em que o desenho:
O gráfico mostra apenas o valor da primeira impressão, mas foi inútil esperar pela saída dos elementos da matriz. Após a remoção da primeira impressão e recompilação, a produção cíclica dos itens da matriz começou imediatamente. É uma conspiração secreta de impressões contra a MQL5-Comunidade ou serei eu o único a ter tanta má sorte?Além disso, quero salientar que estes estranhos casos de comportamento do terminal foram observados não numa instância MT5 sobrecarregada com janelas de gráficos, objectos gráficos e programas MQL, mas com uma única janela de gráficos limpa (sem contar com o contorno de um indicador em execução).
1. O código ArrayInitialize não está a funcionar, se o laço for descomentado, tudo está bem.
E ao declarar variáveis na classe e indicador a nível global com o mesmo nome - surge um aviso.
1. O PlotIndexSetDouble(z,EMPTY_VALUE) é utilizado para amortecedores indicadores no inite.
2. Surge. Então algo deve ser feito a respeito, recomenda-se marcar os membros da classe com o prefixo "m_".