Помогите немного поправить индикатор

У Вас есть идея, под которую нужен торговый робот? А, быть может, требуется создание нового индикатора или адаптация старого к МТ5? Бесплатно советники и индикаторы под Ваше техническое задание!

Помогите немного поправить индикатор

Сообщение lisa » 14 май 2015, 14:12

Помогите немного поправить индикатор, чтобы стрелки появлялись и исчезали (в зависимости от выполненных условий), на 0 баре.

Сейчас стрелки при выполненном условии появляются нормально.
Но если условие пропадает, стрелка все равно остается :ne_vi_del:

Требуется чтобы, если пропало условие, чтобы сразу пропала и стрелка.

Индикатор простейший, самодельный, учусь :smu:sche_nie:
Наверное просто не правильно прописана функция int start

Помогите разобраться.
Вложения
тест.mq4
(827 байт) Скачиваний: 31
Аватар пользователя
lisa
 
Сообщений: 77
Зарегистрирован: 05 ноя 2014, 09:37
Средств на руках: 4.50 Доллар
Группа: Базовая
Благодарил (а): 54 раз.
Поблагодарили: 3 раз.

Помогите немного поправить индикатор

Сообщение Haos » 14 май 2015, 19:20

Вообще-то стрелка и т.п. не должны появляться пока бар не закроется. Это азы сигналов. Какой смысл сначала войти по стрелке, а потом увидеть, что это был ложный сигнал?
А чтобы не появлялось ничего пока бар не закроется в строчке:
Код: выделить все
for(int i = Bars - ExtCountedBars - 1; i >= 0; i--)

убери "=":
Код: выделить все
for(int i = Bars - ExtCountedBars - 1; i > 0; i--)
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Помогите немного поправить индикатор

Сообщение lisa » 14 май 2015, 20:01

Haos писал(а):Вообще-то стрелка и т.п. не должны появляться пока бар не закроется. Это азы сигналов. Какой смысл сначала войти по стрелке, а потом увидеть, что это был ложный сигнал?
А чтобы не появлялось ничего пока бар не закроется в строчке:
Код: выделить все
for(int i = Bars - ExtCountedBars - 1; i >= 0; i--)

убери "=":
Код: выделить все
for(int i = Bars - ExtCountedBars - 1; i > 0; i--)


Такой вариант не подходит, хотелось бы чтобы индикатор работал в реальном времени.
Аватар пользователя
lisa
 
Сообщений: 77
Зарегистрирован: 05 ноя 2014, 09:37
Средств на руках: 4.50 Доллар
Группа: Базовая
Благодарил (а): 54 раз.
Поблагодарили: 3 раз.

Помогите немного поправить индикатор

Сообщение mfcoder » 14 май 2015, 20:27

lisa писал(а):
Haos писал(а):Вообще-то стрелка и т.п. не должны появляться пока бар не закроется. Это азы сигналов. Какой смысл сначала войти по стрелке, а потом увидеть, что это был ложный сигнал?
А чтобы не появлялось ничего пока бар не закроется в строчке:
Код: выделить все
for(int i = Bars - ExtCountedBars - 1; i >= 0; i--)

убери "=":
Код: выделить все
for(int i = Bars - ExtCountedBars - 1; i > 0; i--)


Такой вариант не подходит, хотелось бы чтобы индикатор работал в реальном времени.


перед if'ами добавить пару строк
Код: выделить все
Buffer2[i] = 0;
Buffer1[i] = 0;


и на будущее всегда сравнивай значения одного типа, иначе привыкнешь в некорректному коду и будешь думать, что запись нормальная, а она будет неправильно сравнивать..
у тебя Rs это тип double, а в сравнении используются 90 и 10, а это тип int..
тут два варианта, вместо
Код: выделить все
if (Rs > 90)

написать так
Код: выделить все
if (Rs > 90.0)

или так
Код: выделить все
if (Rs - 90 > 0)


в последнем случае при выполнении арифметического действия 90 будет приведено автоматически к типу double..

ну и так для справки
в случае, если ты сравниваешь не просто double значения, а ценовые значения типа Ask/Bid, Close[i], High[i] и т.п. или значения индикаторов типа iMa(), которые выдают именно ценовые значения, то нужно сравнивать нормализуя значения к какому-то знаку после запятой, вот с такими значения очень часто бывает некорректное сравнения, если сравнивать без нормализации, для этого есть специальная функция
например, если Ask больше цены закрытия предыдущего бара
Код: выделить все
if (NormalizeDouble(Ask - Close[1], Digits) > 0)
Аватар пользователя
mfcoder
 
Сообщений: 1531
Зарегистрирован: 29 июл 2013, 11:55
Средств на руках: 26.85 Доллар
Группа: Базовая
Благодарил (а): 78 раз.
Поблагодарили: 423 раз.

Помогите немного поправить индикатор

Сообщение lisa » 14 май 2015, 20:57

mfcoder писал(а):перед if'ами добавить пару строк
Код: выделить все
Buffer2[i] = 0;
Buffer1[i] = 0;


Что то не могу понять куда именно вставить эти строки.
Аватар пользователя
lisa
 
Сообщений: 77
Зарегистрирован: 05 ноя 2014, 09:37
Средств на руках: 4.50 Доллар
Группа: Базовая
Благодарил (а): 54 раз.
Поблагодарили: 3 раз.

Помогите немного поправить индикатор

Сообщение lisa » 14 май 2015, 21:24

Вроде заработало. Спасибо :a_g_a:

Код: выделить все
int start()
 {
  int ExtCountedBars = IndicatorCounted();
  if (ExtCountedBars > 0) ExtCountedBars--;
  for (int i=Bars - ExtCountedBars-1;i>=0; i--)

 
   {
    double Rs = iRSI(NULL,0,4,PRICE_CLOSE,i);
    Buffer2[i] = 0;
    Buffer1[i] = 0;
   
    if (Rs > 90.0) Buffer2[i] = High[i] + 10 * Point;
   
    if (Rs < 10.0) Buffer1[i] = Low[i] - 10 * Point;
   }
 
  return (0);
 }
Аватар пользователя
lisa
 
Сообщений: 77
Зарегистрирован: 05 ноя 2014, 09:37
Средств на руках: 4.50 Доллар
Группа: Базовая
Благодарил (а): 54 раз.
Поблагодарили: 3 раз.

Помогите немного поправить индикатор

Сообщение lisa » 15 май 2015, 09:11

Подскажите почему алерт работает через раз? :nez-nayu:

Сейчас код такой:

Код: выделить все
if(i==0&&(alert!=Time[1]))
      {
      if(Sound){PlaySound("Alert.wav");Alert("Sell");}
      }
alert=Time[1];


Хотелось бы чтобы срабатывал 1 раз, при каждом появлении выполненных условий.
Возможно как то поправить?
Аватар пользователя
lisa
 
Сообщений: 77
Зарегистрирован: 05 ноя 2014, 09:37
Средств на руках: 4.50 Доллар
Группа: Базовая
Благодарил (а): 54 раз.
Поблагодарили: 3 раз.

Помогите немного поправить индикатор

Сообщение mfcoder » 15 май 2015, 09:52

из выше написанного кода следует, что сигнал будет при прикпеплении индикатора к графику и далее каждый раз при появлении нового бара..
а какого типа alert ?
Аватар пользователя
mfcoder
 
Сообщений: 1531
Зарегистрирован: 29 июл 2013, 11:55
Средств на руках: 26.85 Доллар
Группа: Базовая
Благодарил (а): 78 раз.
Поблагодарили: 423 раз.

Помогите немного поправить индикатор

Сообщение Haos » 15 май 2015, 10:15

mfcoder писал(а):из выше написанного кода следует, что сигнал будет при прикпеплении индикатора к графику и далее каждый раз при появлении нового бара..
а какого типа alert ?

Так в том-то и дело, что она хочет чтобы на каждом тике у ней сигнал менялся!
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Помогите немного поправить индикатор

Сообщение lisa » 15 май 2015, 10:35

mfcoder писал(а):из выше написанного кода следует, что сигнал будет при прикпеплении индикатора к графику и далее каждый раз при появлении нового бара..
а какого типа alert ?


Сам алерт прилеплен к сигналу-стрелке.
Вот весь код:

Код: выделить все
if (Rs > 90.0)
   {
   Buffer2[i] = High[i] + 10 * Point;
     if(i==0&&(alert!=Time[1]))
       {
       if(Sound){PlaySound("Alert.wav");Alert("Sell");}
       }
     alert=Time[1];
   }


Ну и для противоположного сигнала, тоже самое.

Сейчас алерт появляется на 0 баре, при выполнении условий сигнала-стрелки.
Но появляется почему то не всегда :nez-nayu:

Желательно, чтобы алерт так же был прилеплен с сигналу-стрелке.
При появлении стрелки чтобы сразу выскакивал алерт, 1 раз. Если стрелка пропадает и появляется снова, опять алерт.
Последний раз редактировалось lisa 15 май 2015, 10:58, всего редактировалось 1 раз.
Аватар пользователя
lisa
 
Сообщений: 77
Зарегистрирован: 05 ноя 2014, 09:37
Средств на руках: 4.50 Доллар
Группа: Базовая
Благодарил (а): 54 раз.
Поблагодарили: 3 раз.


Вернуться в Торговые советники на заказ

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 648

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron