- Any questions from newcomers on MQL4 and MQL5, help and discussion on algorithms and codes
- Strategy Tester keeps reloading my custom indicator
- Need some help with indicators
When using the same indicator parameters, the previous handle is used.
Not sure if this is best practice. The documentation recommends @whroeder1's approach.
I too face the same situation where my EA trades 28 pairs, but only 2 at the same time. In my mind it is overkill to use indicator for 28 pairs all the time, when only 2 are actively used at a time.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Последовательность выполнение Init() и DeInit()
fxsaber, 2017.04.17 09:03
int GetShortNames( string &ShortNames[], const long Chart_ID = 0, const int SubWindow = 0 ) { const int Total = ChartIndicatorsTotal(Chart_ID, SubWindow); ArrayResize(ShortNames, Total); for (int i = 0; i < Total; i++) ShortNames[i] = ChartIndicatorName(Chart_ID, SubWindow, i); return(Total); } // Возвращает свое "Короткое имя" - ShortName string GetMyShortName( void ) { string Res = ""; const int SubWindow = ChartWindowFind(); string ShortNames[]; GetShortNames(ShortNames, 0, SubWindow); const string TmpShortName = __FUNCSIG__ + (string)MathRand(); IndicatorSetString(INDICATOR_SHORTNAME, TmpShortName); string NewShortNames[]; const int Total = GetShortNames(NewShortNames, 0, SubWindow); for (int i = 0; i < Total; i++) if (NewShortNames[i] == TmpShortName) { Res = ShortNames[i]; IndicatorSetString(INDICATOR_SHORTNAME, Res); break; } return(Res); } // Возвращает свой хэндл int GetMyHandle( void ) { const string ShortName = GetMyShortName(); const string TmpShortName = __FUNCSIG__ + (string)MathRand(); IndicatorSetString(INDICATOR_SHORTNAME, TmpShortName); const int Res = ChartIndicatorGet(0, ChartWindowFind(), TmpShortName); IndicatorSetString(INDICATOR_SHORTNAME, ShortName); return(Res); }
It is very important to make the IndicatorRelease of your handle before OnDeinit.
Example
int GetMyParameters( MqlParam &Params[] ) { const int handle = GetMyHandle(); ENUM_INDICATOR Type; const int Res = ::IndicatorParameters(handle, Type, Params); IndicatorRelease(handle); return(Res); }
When using the same indicator parameters, the previous handle is used.
Not sure if this is best practice. The documentation recommends @whroeder1's approach.
I too face the same situation where my EA trades 28 pairs, but only 2 at the same time. In my mind it is overkill to use indicator for 28 pairs all the time, when only 2 are actively used at a time.
How is this related to IndicatorRelease() usage ? Could you be more precise please.
The topic is interesting but covers a lot of different things.
Alain ";-)"
Can you provide the link to this documentation ?
Note. Repeated call of the indicator function with the same parameters within one mql5-program does not lead to a multiple increase of the reference counter; the counter will be increased only once by 1. However, it's recommended to get the indicators handles in function OnInit() or in the class constructor, and further use these handles in other functions.
https://www.mql5.com/en/docs/indicators
How is this related to IndicatorRelease() usage ? Could you be more precise please.
The topic is interesting but covers a lot of different things.
I use the eventsspy indicator, which is does not really indicate anything but allows to pass events, i am interested in tick's only. So my first method was to create the indicator handle only when entering a trade, because no trade, no ticks needed. Similar to Andreas approach.
Now considering my EA loads 28 charts without doing anything it is a relative memory hog per definition. IndicatorRelease() does not work in tester, so it can not be tested. The continues creation and releasing was giving me the same worries as Andreas.
?
Nice to read u again.
When using the same indicator parameters, the previous handle is used.
Are you shure - where to read this??
Nice to read u again.
When using the same indicator parameters, the previous handle is used.
Are you shure - where to read this??
See link and or quote from my previous posts.
Now, when the documentation states something, it does not mean it also works like described. We are dealing with MQ here.
Yes it said to get the handle OnInit(), and to use it in OnTick(), OnTimer(), etc...
It doesn't say to use IndicatorRelease(), and certainly not in OnDeinit() which is useless.
so :
Get the handle in OnInit. Use it in OnCalculate. Release it in OnDeinit.
In general, no need to use this function in IndicatorRelease().
The function has to be use when an handle is not needed anymore, to realease resource. Not needed in OnDeinit() as either it's a "close" of the program, so it's done automatically, or it's a unload/load sequence and you don't need to release the handle at all.
Of course they are exception as always (as in your case about eventsspy).
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use