Лучше почитайте про функцию iCustom(). Вы можете использовать свой индикатор из эксперта без дополнительных телодвижений. Не самый быстрый способ, но для вас, пожалуй, самый надежный.
double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
где номер бара от которого нужно значение индикатора, это последняя переменная в фунции iCustom, int shift???
И хочеться все-таки ещё помимо этого про второй вопрос выяснить. Про то как генерировать сигналы только в начале формирования нового бара, это наверно надо какой-то фильтр воткнуть в самое начало кода, где проходят проверки введенных параметров для индикатора и т.д. Только как это изобразить в коде mql4 ?
int start() { static datetime prevBarTime = 0; if( prevBarTime == Time[ 0 ] ) return( 0 ); prevBarTime = Time[ 0 ]; .... }
Тело функции start(), отмеченное в коде как "...." будет выполняться только на каждом новом баре, а не на каждом тике.
Вопрос вдогонку) ошибка TestGenerator: unmatched data error не кретическая, то есть и сней работать должен?
Предположим я выкинул код самого иникатора. Скомпилировал индикатор, положил его где надо, привязал его к коду эксперта функцией iCustom. А как будут браться значения этого индикатора? Для текущего тика? Хотелось бы чтобы рассматривалось значение для последних трех. Или можно самому указать в функции:
double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
где номер бара от которого нужно значение индикатора, это последняя переменная в фунции iCustom, int shift???
И хочеться все-таки ещё помимо этого про второй вопрос выяснить. Про то как генерировать сигналы только в начале формирования нового бара, это наверно надо какой-то фильтр воткнуть в самое начало кода, где проходят проверки введенных параметров для индикатора и т.д. Только как это изобразить в коде mql4 ?
Попробуйте почитать Учебник последовательно, без пропусков с самого начала. Там есть ответы на все Ваши вопросы.
Например, про использование в эксперте значений пользовательских индикаторов - Совместное использование программ.
Про то, как генерировать сигналы в начале нового бара посмотрите Массивы , Задача 27.
//---------------------торговые критерии-------------------------------// indi0 = iCustom (NULL,0,"Average_Direct",2,0); indi1 = iCustom (NULL,0,"Average_Direct",2,1); if (indi1<indi0 && indi1<0 && indi0>0) //покупаем--// { Opn_B=true; Cls_S=true; } if (indi1>indi0 && indi1>0 && indi0<0) //продаем---// { Opn_S=true; Cls_B=true; }Результаты на некорректных данных это плохо, но сейчас хотя бы одну сделку совершенную увидеть.
Вот измененный код, ни одной сделки, все равно....
Предположим я выкинул код самого иникатора. Скомпилировал индикатор, положил его где надо, привязал его к коду эксперта функцией iCustom. А как будут браться значения этого индикатора? Для текущего тика? Хотелось бы чтобы рассматривалось значение для последних трех. Или можно самому указать в функции:
double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
где номер бара от которого нужно значение индикатора, это последняя переменная в фунции iCustom, int shift???
И хочеться все-таки ещё помимо этого про второй вопрос выяснить. Про то как генерировать сигналы только в начале формирования нового бара, это наверно надо какой-то фильтр воткнуть в самое начало кода, где проходят проверки введенных параметров для индикатора и т.д. Только как это изобразить в коде mql4 ?
Попробуйте почитать Учебник последовательно, без пропусков с самого начала. Там есть ответы на все Ваши вопросы.
Например, про использование в эксперте значений пользовательских индикаторов - Совместное использование программ.
Про то, как генерировать сигналы в начале нового бара посмотрите Массивы , Задача 27.
Сегодня уже точно не почитаю, хватит. МоЗГ ЛОпнеТ у меня скоро, просто охота увидеть рабочий эксперт, пусть каряво но рабочий. Я посмотрел в учебник, я про массивы уже читал с утра, только забыл к ночи) ups
Сегодня уже точно не почитаю, хватит. МоЗГ ЛОпнеТ у меня скоро, просто охота увидеть рабочий эксперт, пусть каряво но рабочий. Я посмотрел в учебник, я про массивы уже читал с утра, только забыл к ночи) ups
Попробуйте взять за основу пример из учебника. И пусть он выдаст хоть одну сделку. А потом вносите в него изменения.
Но лучше неторопясь разобраться.
int start() { static datetime prevBarTime = 0; if( prevBarTime == Time[ 0 ] ) return( 0 ); prevBarTime = Time[ 0 ]; .... }Потом я в сделал так, чтобы эксперт писал в журнал значения обрабатываемого индикатора. Как оказалось предпоследнее значение это значение индикатора на предпоследнем баре, а текущее это значение следующего тика открывающего новый бар, следующий за предыдущим, следовательно сделки не могли совершаться так как не было необходимых условий, в силу малого различия в значениях индикатора на текущем и предыдущем тике. Поэтому я сделал так, чтобы iCustom выдавала значения предпоследнего и последнего бара (то есть поменял последние цифры в iCustom 0 на 1, 1 на 2)
double indi0=iCustom(NULL,0,"Average_Direct",2,1); double indi1=iCustom(NULL,0,"Average_Direct",2,2); //-------------------------------------------------------------- 5b -- if (indi1<indi0 && indi1<=0.0 && indi0>0.0) //покупаем--// { Opn_B=true; Cls_S=true; } if (indi1>indi0 && indi1>=0.0 && indi0<0.0) //продаем---// { Opn_S=true; Cls_B=true; }Теперь в журнале я начел находить подходящие условия для открытия позиции, но она все равно не открывается.
В журнал я начал выводить значения следующих переменных чтобы посмотреть может ошибка где-то в коде дальше, но обнаружил что проходит изменение сигналов Opn_B,Cls_S,Opn_S,Cls_B. Не выполняется if, и я не могу разобраться где я допустил ошибку при задании условия.
Предположим что
indi1=6
indi0=50
Хе-хе-хе, вот излагал свои мысли и понял, что все относительно 25 надо, а не 0 рассматривать и пошли сделочки)))
Спасибо, и мне и Вам.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
может работать не корректно, либо вообще не работать....
Вот какой код условий и одна строка из индикатора у меня в эксперте, все остальное точно как в эксперте из учебника, разве что функцию "int New_Stop(int Parametr)" я не использовал. Код эксперта в уебнике (https://book.mql4.com/ru/samples/expert)
Заранее спасибо...