Errori, bug, domande - pagina 1669

 

Il programma MQ5 esegue sempre automaticamente IndicatorRelease di tutti gli handle che ha creato al termine dell'esecuzione?

O è possibile eseguire l'indicatore tramite IndicatorCreate da uno script, poi passare il suo handle attraverso le variabili globali per lavorare ulteriormente con l'indicatore?

 

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

Costante

Tipo

Descrizione

indicatore del tester

stringa

Nome dell'indicatore personalizzato nel formato "nome_indicatore.ex5". Gliindicatori necessari per i test sono determinati automaticamente dalla chiamata della funzioneiCustom(), se il parametro corrispondente è specificato come una stringa costante. Per gli altri casi (uso della funzioneIndicatorCreate() o uso di una stringa non costante nel parametro che specifica il nome dell'indicatore) questa proprietà dovrebbe essere

IndicatorCreate - quasi (nessuna restrizione sul numero di parametri di input) rudimento?

Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
  • www.mql5.com
Основы языка / Препроцессор / Свойства программ (#property) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
IndicatrorRelease restituisce erroneamente true se chiamato dopo iCustom+ChartIndicatorAdd. Corretto.
 
fxsaber:
Qual è il contatore?
Ne abbiamo parlato ieri, pagina 1687. :) Ma è meglio leggere da questo post a pagina 1686: https://www.mql5.com/ru/forum/1111/page1686#comment_2790746 A proposito, l'uomo stava rispondendo alla tua stessa domanda. Si scopre solo che lo schema è così. La richiesta di chiamare l'indicatore va al terminale. Cioè l'Expert Advisor o lo script non chiama direttamente l'indicatore, il terminale fa da intermediario. Il terminale controlla se questo indicatore esiste già con i parametri specificati. Se è così, restituisce al programma che ha chiamato l'indicatore un handle (link) all'indicatore già esistente. E nel suo sottosuolo terminale segna nel contatore che c'era un'altra chiamata di questo indicatore. Cioè, registra quanti handle sono stati restituiti per questo indicatore. Quando qualcuno fa l'IndicatorRelease, non significa che gli altri che hanno chiamato lo stesso indicatore con gli stessi parametri non hanno più bisogno di questo indicatore. Pertanto, il Terminale diminuisce il contatore di uno, ma lascia l'indicatore attivo, perché qualcun altro lo usa. Questo continuerà fino a quando il contatore non sarà azzerato. Quando il contatore viene azzerato, il terminale cancella definitivamente l'indicatore dalla RAM.
Se provate a creare un codice che conterrà IndicatorRelease, ma non chiamerà l'indicatore stesso, non lo compilerete, perché dovete passare un handle a IndicatorRelease, ma se non chiamate l'indicatore dal programma, non avrete l'handle.
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • recensioni: 8
  • www.mql5.com
Форум трейдеров MQL5.community
 

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

Grazie! Questo risulta essere un grande risparmio.

Se provate a creare del codice, che conterrà IndicatorRelease, ma non conterrà la chiamata dell'indicatore stesso, penso che non lo compilerete, perché dovrete passare un handle a IndicatorRelease, e se l'indicatore non è stato chiamato dal programma, non avrete l'handle.

L'handle può essere passato attraverso variabili globali. Pertanto, è possibile utilizzarlo.
 
fxsaber:


Posso passare l'handle attraverso le variabili globali. Pertanto, è abbastanza possibile utilizzarlo.
Non c'è bisogno di passarlo. :) O almeno non chiamare IndicatorRelease() per l'handle ottenuto in questo modo. Se lo fate, sarà un vostro errore, non un bug della lingua, non siete d'accordo?
 
Sergei Vladimirov:
E voi non lo fate. :) O almeno non chiamate IndicatorRelease() per un handle ottenuto in questo modo. Se lo fai, sarà un tuo errore, ma non un bug della lingua, sei d'accordo?

E scriverò una scheda cattiva per il mercato libero, che a un certo punto passerà semplicemente attraverso l'intera gamma di int positivi e proverà IndicatorRelease per ognuno.

Un tale script coprirà tutti gli Expert Advisors e gli indicatori del terminale che ha usato iCustom senza ChartIndicatorAdd.

 

Di nuovo, questa sarebbe una vostra azione deliberata, non un bug della lingua. Perché l'hai scritto?

A proposito, questa conversazione è iniziata con la tua domanda su come controllare la maniglia dell'indicatore prima di usarla. Beh, non si può controllare, ma ad un tentativo di usare un handle di un indicatore chiuso, si otterrà l'errore 4807 - basta rintracciarlo dopo ogni chiamata di CopyBuffer(), se restituisce -1.

 
fxsaber:
Posso passare l'handle attraverso le variabili globali. Quindi è abbastanza possibile usarlo.
Ehm... Variabili globali per cosa? Terminale o EA? Non ho mai lavorato con le variabili di Terminal, quindi non ho intenzione di discuterne. E per quanto riguarda le variabili globali di EA, è il modo principale per farlo. Se gli indicatori sono inizializzati in OnInit, ma IndicatorRelease avviene in OnDeinit, allora solo con le variabili globali (EA) passeremo gli handle.
 
A100:
Errore di esecuzione: 'accesso al puntatore non valido' (*)
A cosa punta A::a qui?
Motivazione: