Erros, bugs, perguntas - página 1669

 

O programa MQ5 executa sempre automaticamente o IndicatorRelease de todas as pegas que criou após a execução estar concluída?

Ou é possível executar o indicador através do IndicatorCreate por um guião, depois passar a sua manipulação através de variáveis globais para continuar a trabalhar com o indicador?

 

https://www.mql5.com/ru/docs/basis/preprosessor/compilation

Constante

Tipo

Descrição

testador_indicador

corda

Nome do indicador personalizado no formato "indicator_name.ex5".Os indicadores necessários para os testes são determinados automaticamente a partir da chamada de funçãoiCustom(), se o parâmetro correspondente for especificado como uma string constante. Para outros casos (utilização da funçãoIndicatorCreate() ou utilização de uma cadeia não constante no parâmetro especificando o nome do indicador) esta propriedade deve ser

IndicatorCreate - quase (sem restrições no número de parâmetros de entrada) rudimento?

Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
  • www.mql5.com
Основы языка / Препроцессор / Свойства программ (#property) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
IndicatrorRelease retorna erroneamente verdadeiro se chamado após iCustom+ChartIndicatorAdd. Correcto.
 
fxsaber:
O que é o contador?
Discutimo-lo ontem, página 1687. :) Mas é melhor ler a partir deste post na página 1686: https://www.mql5.com/ru/forum/1111/page1686#comment_2790746 A propósito, o homem estava a responder à sua mesma pergunta. Acontece apenas que o esquema é assim. O pedido para chamar o indicador vai para o Terminal. Isto é, o Expert Advisor ou o guião não chama directamente o indicador, os intermediários do terminal. O terminal irá verificar se este indicador já existe com os parâmetros especificados. Se assim for, devolve o programa, que chamou o indicador, um cabo (link) para o indicador já existente. E no seu subsolo terminal marca no balcão que houve outra chamada deste indicador. Isto é, regista quantas pegas foram devolvidas para este indicador. Quando alguém faz o IndicatorRelease, isso não significa que outros que chamavam o mesmo indicador com os mesmos parâmetros já não precisem deste indicador. Portanto, o Terminal diminui o contador em um, mas deixa o indicador activo, porque outra pessoa o utiliza. Isto continuará até que o contador seja zerado. Quando o contador é zerado, o Terminal irá apagar permanentemente o indicador da RAM.
Se tentar criar um código que contenha IndicatorRelease, mas não chama o indicador em si, não o compila, porque tem de passar uma maçaneta ao IndicatorRelease, mas se não chamar o indicador a partir do programa, não vai receber maçaneta.
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • comentários: 8
  • www.mql5.com
Форум трейдеров MQL5.community
 

BlackTomcat:
Вчера обсуждали, страница 1687. :) Но читать лучше вот с этого сообщения на 1686-й странице: https://www.mql5.com/ru/forum/1111/page1686#comment_2790746 Кстати, человек на Ваш же вопрос отвечал. Просто получается, что схема такая. Запрос на вызов индикатора попадает в Терминал. Т.е. советник или скрипт не вызывают индикатор напрямую, терминал выступает посредником. В терминале происходит проверка, существует ли уже такой индикатор с указанными параметрами. Если да, то он возвращает программе, вызвавшей индикатор, хэндл (ссылку) на уже существующий индикатор. А в своих терминальных недрах помечает в счётчике, что был ещё один вызов на данный индикатор. Т.е. он ведёт учёт, сколько хэндлов на данный индикатор вернул. Когда кто-то делает IndicatorRelease, это не значит, что остальным, кто вызвал этот же индикатор с такими же параметрами, этот индикатор больше не нужен. Поэтому Терминал уменьшает счётчик на единицу, но оставляет индикатор активным, потому-что им ещё кто-то пользуется.

Obrigado! Isto acaba por ser uma grande poupança.

Se tentar criar código, que conterá IndicatorRelease, mas não conterá a chamada do próprio indicador, penso eu, não o compilará, porque terá de passar o cabo para IndicatorRelease, e se o indicador não tiver sido chamado pelo programa, não obterá o cabo.

O cabo pode ser passado através de variáveis globais. Por conseguinte, é possível utilizá-lo.
 
fxsaber:


Posso passar o cabo através de variáveis globais. Por conseguinte, é bastante possível utilizá-lo.
Não é preciso passá-lo. :) Ou pelo menos não chame IndicatorRelease() para o manuseamento obtido desta forma. Se o fizer, o erro será seu, e não um erro de linguagem, não concorda?
 
Sergei Vladimirov:
E não o faz. :) Ou pelo menos não chame IndicatorRelease() para um cabo obtido desta forma. Se o fizer, será um erro seu, mas não um bug da língua, concorda?

E vou escrever um mau separador para o mercado livre, que a certa altura irá apenas passar por toda a gama de int positivo e tentar o IndicatorRelease para cada um.

Tal guião cobrirá todos os Expert Advisors e indicadores do terminal que utilizou iCustom sem ChartIndicatorAdd.

 

Mais uma vez, essa seria a sua acção deliberada, e não um bug linguístico. Porque é que escreveu isso?

A propósito, esta conversa começou com a sua pergunta sobre como verificar o manípulo indicador antes de o utilizar. Bem, não se pode verificar, mas numa tentativa de usar um manípulo de um indicador fechado, obterá o erro 4807 - basta localizá-lo após cada chamada de CopyBuffer(), se ele regressar -1.

 
fxsaber:
Posso passar o cabo através de variáveis globais. Portanto, é bastante possível utilizá-lo.
Um... Variáveis globais para quê? Terminal ou EA? Nunca trabalhei com as variáveis do Terminal, por isso não vou discutir o assunto. E quanto às variáveis globais da EA, esta é a principal forma de o fazer. Se os indicadores são inicializados no OnInit, mas o IndicatorRelease acontece no OnDeinit, então apenas com variáveis globais (EA) passaremos as pegas.
 
A100:
Erro de execução: 'acesso ao ponteiro inválido' (*)
O que tem A:::um apontamento para aqui?
Razão: