объявляешь ВНЕ ф-ций init, deinit и start свою ф-цию, туда переносишь расчёты, результат возвращаешь =)
Примерно так (не проверял):
Примерно так (не проверял):
int start() { int cbi,i; cbi=Bars-IndicatorCounted()-1; //------------------------------ for(i=cbi; i>=0; i--) { yx[i]=MyFunc(i); } //--------------------------------------------------- return(0); } double MyFunc( int i ) { sx=0.0; sy=0.0; sxy=0.0; sx2=0.0; for (int n=i; n<=i+p-1; n++) { sx+=n; sy+=Close[n]; sxy+=(n)*Close[n]; sx2+=MathPow(n,2); } a=(sx*sy-p*sxy)/(MathPow(sx,2)-p*sx2); b=(sy-a*sx)/p; return(b+a*i); }
объявляешь ВНЕ ф-ций init, deinit и start свою ф-цию, туда переносишь расчёты, результат возвращаешь =)
Примерно так (не проверял):
Примерно так (не проверял):
Спасибо! А как теперь сделать MyFunc - библиолечной функцией и как ее вызвать в индикатор?
Заранее благодарю - Александр.
В сказке о Рыбаке и рыбке тоже начиналось все с корыта.
В сказке о Рыбаке и рыбке тоже начиналось все с корыта.
Подобрее пожалуйста, и если можете,- поменьше умничайте.
В Helpe я нашел, что можно использовать #include и #import, и очень сложный пример с stdlib.mq4
Насколько я понял МyFunc нужно поместить в какую-то папку, а потом вызвать.
Никак не могу разобраться, очень нало информации насчет этого.
Помогите пожалуйста разобраться. Если можно поподробней.
Я думаю это полезно не только мне, но и многим другим начинающим пользователям.
С уважением Александр.
объявляешь ВНЕ ф-ций init, deinit и start свою ф-цию, туда переносишь расчёты, результат возвращаешь =)
Примерно так (не проверял):
Примерно так (не проверял):
Спасибо за помощь, кажется разобрался.
Сделал так:
indicator
#property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Blue //----------------------------- extern int p=21; //------------------ double yx[]; //******************************************************************** int init() { SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0, p); SetIndexBuffer(0,yx); return(0); } //******************************************************************** int start() { int cbi,i; cbi=Bars-IndicatorCounted()-1; //------------------------------ for(i=cbi; i>=0; i--) { yx[i]=f_LR(i,p); } //--------------------------------------------------- return(0); } //------------------------ #import "f_LR.ex4" double f_LR(int i,int p);
И пользовательская функция, которую положил в папку libraries:
#property library //--------------------------------- double f_LR( int i,int p) { double sx,sy,sxy,sx2,a,b; sx=0.0; sy=0.0; sxy=0.0; sx2=0.0; for (int n=i; n<=i+p-1; n++) { sx+=n; sy+=Close[n]; sxy+=(n)*Close[n]; sx2+=MathPow(n,2); } a=(sx*sy-p*sxy)/(MathPow(sx,2)-p*sx2); b=(sy-a*sx)/p; return(b+a*i); } //---------------------------------
Все ли правильно сделал или можно было как-то лучше?
С уважением - Александр.
Я думаю это полезно не только мне, но и многим другим начинающим пользователям.
Никому это не полезно =) Потому что если бы было полезно, ты бы не спрашивал сейчас об этом - не раз уже обсуждалось...
По поводу ф-ции - лучше использовать include - он быстрее работает.
Единственное, чем может быть удобен import - это тем, что код там закрыт и можно типа продавать.
В остальном же инклуд - то же самое, только проще и удобнее.
Думаю, разберёшься.. Только не забудь #property library убрать ;)
Подскажите пожалуйта, как правильно сделать. А то совсем замучался.
Скажи, что ты пытался сделать (и почему), а я скажу что неправильно ;)
Только так можно чему-то научиться. По крайней мере, я так считаю...
Стираю # property library, сохраняю в папке include,
вместо #import в индикаторе ставлю #include. Вроде все.
вместо #import в индикаторе ставлю #include. Вроде все.
а справку по include почитать?)
во-первых, #include <f_LR.mq4>
во-вторых, в начале файла логичнее )
в-третьих, убрать из индикатора "double f_LR(int i,int p);"
во-первых, #include <f_LR.mq4>
во-вторых, в начале файла логичнее )
в-третьих, убрать из индикатора "double f_LR(int i,int p);"
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Прошу помощи, никак не могу разобраться.
Как постоить индикатор с пользовательской функцией?
Допустим на примере Линейной регрессии, хотя мне это нужно для другой цели.
Нужно, чтобы задавая параметры Price=Close[i]; и допустим Period=21;
постоить индикатор, где все расчеты Линейной регрессии происходили бы в пользовательской функции.
Для примера привожу код постоения индикатора без пользовательской функции.
То есть нужно, чтобы участок после for(i=cbi; i>=0; i--) {
ситался бы в пользовательской функции, а результаты возвращались бы обратно в цикл.
Заранее благодарю - Александр.