Нужна помошь: советник с кастомным индикатором не торгует по сигналам индикатора! - страница 2

 
Red.Line писал (а):

:) Мужики, iClose[0] на тесторе - это всегда клозе текущей свечи, даже, если его еще не было. А в реале-то вы не знаете, как нас ждет клозе. Это называется смотрим в будущее. Не построишь туто советника. Пробывал не раз, в реале слив будет.

Проверьте и докажите свою реплику. Прежде чем говорить, лучше предварительно удостовериться.
Close[0] и iClose(,,0) никогда не заглядвывают в будущее при тестировании.

Именно с целью прекратить всякие домыслы на тему тестирования и была написана статья Тестер в терминале MetaTrader 4: Это необходимо знать
 
granit77:
Ясно, что в советник из буферов индикатора вместо нуля прет 2147483647 ...
Если не хотите трогать индикатор, то есть вставить в инит
SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);

то получайте сигнал другим путем:

если iCustom>100000, считаем, что сигнала (стрелки) нет
если iCustom<100000, считаем, что сигнал есть (стрелка появилась)

Туповато, но я иногда применяю, чтоб не лазить в индикатор. Работает 100%.


2147483647 ... и есть значение EMPTY_VALUE.
попробуй вывести его через коммент или принт.

А повтор инициализации буфера не критичен, он ни на что не влияет.
 
Rosh:
Red.Line писал (а):

:) Мужики, iClose[0] на тесторе - это всегда клозе текущей свечи, даже, если его еще не было. А в реале-то вы не знаете, как нас ждет клозе. Это называется смотрим в будущее. Не построишь туто советника. Пробывал не раз, в реале слив будет.

Проверьте и докажите свою реплику. Прежде чем говорить, лучше предварительно удостовериться.
Close[0] и iClose(,,0) никогда не заглядвывают в будущее при тестировании.

Именно с целью прекратить всякие домыслы на тему тестирования и была написана статья Тестер в терминале MetaTrader 4: Это необходимо знать


Проверять не буду. Вашего замечания вполне достаточно, извиняюсь за дезинформацию.

За статью спасибо, пропустил её. Прочту.

 
Figar0 писал (а):
granit77 писал (а): Ну и что, что не указан, будет работать со значением из extern double
nPips индикатора, менять только из советника нельзя.

Мне не нравится код советника. Критиковать не берусь, но желательно
распечатать iCustom, если данные нормальные,

то упростить советник до тупого открытия позиции, а уж потом
прикрутить переворот. По ходу стук наружу выйдет.

Как возможная причина - в индикаторе не заданы нулевые значения
буферов.






Точно, посмотрел повнимательнее, значение индикатора никогда
не равно 0. А так что где-то 2147483647 ...



З.Ы. Спасибо за замечание по поводу необязательности параметров
iCustom, как-то всегда проставляю, даже и не знал... Проверил - работает)




   А как тогда определить сигнал индикатора на покупку и на продажу? У фракталов всё просто: фрактал есть - не нудевое значение, нет фрактала - ноль. А как тут тогда, если значение индикатора 2147483647. ..?
 
А как тогда определить сигнал индикатора на покупку и на продажу? У фракталов всё просто: фрактал есть - не нудевое значение, нет фрактала - ноль. А как тут тогда, если значение индикатора 2147483647. ..?

EMPTY_VALUE 0x7FFFFFFF Значение по умолчанию, указатель пустого значения. Используется в пользовательских индикаторах
meta-trader2007  это и есть 214748....
 
Moriart:
meta-trader2007 писал (а):



Тестировал индикатор на визуальном тестере, он не перерисовывает.


Похоже это действительно один и тот же индикатор.

нПипс добавил. Но всё же советник не работает... Также просто
открывает СЕЛЛ и необращает внимание на индикатор...
И чё, EMPTY_VALUE не помогает ???






Сделал так и результат совсем не такой какой нужен. Советник стал совершать только БАЙ и при этом странно: открывает позу вверх, потом закрывает её и начинается серия: бай,(новый бар) закрыть бай,бай...
Скрин визуализатора вот:
 
Prival:
   А как тогда определить сигнал индикатора на покупку и на продажу? У фракталов всё просто: фрактал есть - не нудевое значение, нет фрактала - ноль. А как тут тогда, если значение индикатора 2147483647. ..?
EMPTY_VALUE0x7FFFFFFFЗначение по умолчанию, указатель пустого значения. Используется в пользовательских индикаторах
meta-trader2007  это и есть 214748....
Для полной ясности:
Если значение индикатора 2147483647...(EMPTY_VALUE0x7FFFFFFF), считаем, что в буфере ноль (сигнала нет)
Если значение индикатора имеет другой порядок (близко к Close[0]  и явно меньше миллиардов) - сигнал есть
Что-нибудь вроде:
if (iCustom(NULL,0,"Stop_reversal",0,r)>100000 ) int Signal=0;
if (iCustom(NULL,0,"Stop_reversal",0,r)<100000 ) Signal=1;

А вообще, код надо выбросить, взять за основу нормальный реверсный советник и прикрутить к нему индикатор.
Как вариант - использовать "Универсальный эксперт для работы с любым Custom индикатором рисующем стрелки на покупку/продажу"
Integer'а из Code Base.
 
Reshetov писал (а):


Не тестировал, но заметил, что в функции инициализации 0-й буфер
SetIndexBuffer(0, ExtHistoBuffer) устанавливается дважды


Спасибо за найденную ошибку. Редактор её не видел. Но её удаление из кода не помогает.



granit77 писал (а):


Ясно, что в советник из буферов индикатора вместо нуля прет 2147483647 ...

Если не хотите трогать индикатор, то есть вставить в инит
SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);

то получайте сигнал другим путем:

если iCustom>100000, считаем, что сигнала (стрелки) нет
если iCustom<100000, считаем, что сигнал есть (стрелка появилась)

Туповато, но я иногда применяю, чтоб не лазить в индикатор. Работает 100%.
У этого советника две стрелки - вниз и вверх. Хотя они вызываются разними буферами значимт должно помочь но хочется чтобы было не кое-как.

Что, куда вставить в индикатор?
Если вставить в инит:
SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);

это поможет и ничего больше не нужно делать ( в индикаторах ничего не понимаю, я в советниках тока разбираюсь) :)
Как я понял это устанавливает принудительно эээ "пустые" буфера,  когда нет стрелки, на нуль. Верно?
 
meta-trader2007 писал (а):
Как я понял это устанавливает принудительно эээ "пустые" буфера,  когда нет стрелки, на нуль. Верно?
Да.
 

Мне просто кажеться вот так проще. Хотя я могу и ошибаться. Тут мастера есть намного круче меня (если неправ, я думаю поправят).

int Signal=0;
if (iCustom(NULL,0,"Stop_reversal",0,r)!=EMPTY_VALUE) Signal=1;
Причина обращения: