объявляешь ВНЕ ф-ций 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);"
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Прошу помощи, никак не могу разобраться.
Как постоить индикатор с пользовательской функцией?
Допустим на примере Линейной регрессии, хотя мне это нужно для другой цели.
Нужно, чтобы задавая параметры Price=Close[i]; и допустим Period=21;
постоить индикатор, где все расчеты Линейной регрессии происходили бы в пользовательской функции.
Для примера привожу код постоения индикатора без пользовательской функции.
#property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Blue //----------------------------- extern int p=21; //------------------ double yx[]; double sx,sy,sxy,sx2,a,b; //******************************************************************** int init() { SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0, p); SetIndexBuffer(0,yx); return(0); } //******************************************************************** int start() { int cbi,i,n; cbi=Bars-IndicatorCounted()-1; //------------------------------ for(i=cbi; i>=0; i--) { sx=0.0; sy=0.0; sxy=0.0; sx2=0.0; for (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; yx[i]=b+a*i; } //--------------------------------------------------- return(0); }То есть нужно, чтобы участок после for(i=cbi; i>=0; i--) {
ситался бы в пользовательской функции, а результаты возвращались бы обратно в цикл.
Заранее благодарю - Александр.