Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 777

 

Не, не будет постоянно сигналить, вылетает "array out of range" при >=. Почему?

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<2) return(0);
     {
      int limit=rates_total-prev_calculated;
      if(limit>1) 
        {
         ArrayInitialize(BufferUP,EMPTY_VALUE);
         ArrayInitialize(BufferDN,EMPTY_VALUE);
        }
      for(int i=limit; i>=0; i--) 
        {
         if(TimeCurrent()>=Input1 || TimeCurrent()>=Input2 || TimeCurrent()>=Input3)
           {
            BufferUP[i]=low[i]-10*Point;// в этой строке array out of range in 'a1.mq4' (75,28)

            Alert("__",TimeCurrent());
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
volyal:
Cпасибо. Просто>= нельзя, будет постоянно сигнал, после наступления первой даты, нужно задать диапазон времени. Как задать?

это уже вторая часть вопроса и она же вторая часть ответа

после срабатывания сигнала (Алерта) Вам нужно зафиксировать, что сигнал уже был подан, нужно дополнительное условие, можно так Ваш код написать:

 {
//---
   static bool alerton=true;
   A=1;B=2;
   if(rates_total<2) return(0);
     {
      int limit=rates_total-prev_calculated;
      if(limit>1)
        {
         ArrayInitialize(BufferUP,EMPTY_VALUE);
         ArrayInitialize(BufferDN,EMPTY_VALUE);
        }
      for(int i=limit; i>=0; i--)
        {
         if(alerton)
           {
            if(A>B)
              {
               if((TimeCurrent()>=Input1 || TimeCurrent()>=Input2 || TimeCurrent()>=Input3))
                 {
                  BufferUP[i]=low[i]-10*Point;
                  Alert("__",TimeCurrent());
                  alerton = false;
                 }
              }
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }

у Вас в коде четкие условия срабатывания Алерта, обычно в индикаторах просят сделать один сигнал на бар, тогда нужно "привязать" время бара к переменной которая будет хранить время сработки Алерта, т.е. я веду речь о том, что будет

static datetime alerton=0;

поищите готовые примеры, думаю теперь разберетесь

 
Aleksey Vyazmikin:

Если сигналов много одинаковых сразу приходит, то сгруппируйте их и воспроизводите как один. Или собирайте их время в массивы по типу сигнала и исполняйте потихоньку :)

Собрать в массив и проигмать в отдельном скрипте - это, в общем, понятно, соответствует вашему первому совету.

А сгруппировать и проиграть как один, не совсем понял. Как один звуковой файл?

Как, например, сгруппировать

if(Sobitie_1)

{
       PlaySound("Symbol.wav");
       PlaySound("Sobitie1.wav");
       PlaySound("Period.wav");
       }                                      ?


Как  PlaySound("Symbol Sobitie1 Period.wav");? В этом случае количество файлов   Symbol * Sobitie * Period=3*10*7=210. Многовато...):

Кроме того, сигналы на проигрывание поступают от индикаторов с разных ТФ. Как учесть это пока не знаю.

 
Algus:

Собрать в массив и проигмать в отдельном скрипте - это, в общем, понятно, соответствует вашему первому совету.

А сгруппировать и проиграть как один, не совсем понял. Как один звуковой файл?

Как, например, сгруппировать

if(Sobitie_1)

{
       PlaySound("Symbol.wav");
       PlaySound("Sobitie1.wav");
       PlaySound("Period.wav");
       }                                      ?


Как  PlaySound("Symbol Sobitie1 Period.wav");? В этом случае количество файлов   Symbol * Sobitie * Period=3*10*7=210. Многовато...):

Кроме того, сигналы на проигрывание поступают от индикаторов с разных ТФ. Как учесть это пока не знаю.

Я говорил о частоте с которой поступает сигнал, т.е. как я понимаю у Вас есть одинаковые и не одинаковые звуки, пока проигрывается звук происходит накопление в буфере (можно в графическом накапливать) очереди на проигрывание, после проигрывания анализируем очередь и выкидываем те звуки, которые пришли в момент проигрывания файла и имеют тот же звук, т.е. не несут в себе новой информации. Я же не знаю детали, что у вас там за мелофон :)

 

Добрый день!

Помогите пожалуйста с непоняткой: 

Задаю условие для открытия позиции:

if(MathAbs(WPR1)<20.0)
        {
         if(MathAbs(WPR14)>44.0 && MathAbs(WPR14)<60.0 && op0<cl1) 
{ps2=true;ps1=false;ps3=false;ps4=false;ps5=false;ps6=false;ps7=false;ps8=false;Alert("условие ps2"); OpenSell();}
        }

И вместо одной позиции с флагом ps2 открывается две, с флагами ps2 и ps3. И что только ни делал, ничего не меняется. Проверял алертами всякие ситуации, и ничего. В чём дело???? Страшного вроде ничего нет, флаги задают разные уровни ТП. Но всё же лишняя позиция ни к чему.

Спасибо.

 
novichok2018:

Добрый день!

Помогите пожалуйста с непоняткой: 

Задаю условие для открытия позиции:

И вместо одной позиции с флагом ps2 открывается две, с флагами ps2 и ps3. И что только ни делал, ничего не меняется. Проверял алертами всякие ситуации, и ничего. В чём дело???? Страшного вроде ничего нет, флаги задают разные уровни ТП. Но всё же лишняя позиция ни к чему.

Спасибо.

Вдобавок в журнале пишет, что сначала открывает ps3, потом  ps2.

 
novichok2018:

Добрый день!

Помогите пожалуйста с непоняткой: 

Задаю условие для открытия позиции:

И вместо одной позиции с флагом ps2 открывается две, с флагами ps2 и ps3. И что только ни делал, ничего не меняется. Проверял алертами всякие ситуации, и ничего. В чём дело???? Страшного вроде ничего нет, флаги задают разные уровни ТП. Но всё же лишняя позиция ни к чему.

Спасибо.

Возвращается Вовочка из школы. Папа спрашивает:

- Ну какую оценку сегодня получил?

- Двойку по природоведению.

- Почему?

- Училка показывает хвост какой-то птицы и велела угадать что это за птица...

Этот папаша идёт в школу, открывает дверь класса и показывает туда зад.

- Это кто там такой...

Грозно спрашивает училка...

- А ты сама угадай.


Это в точности про твой код...))))

 
Alexey Viktorov:

Возвращается Вовочка из школы. Папа спрашивает:

- Ну какую оценку сегодня получил?

- Двойку по природоведению.

- Почему?

- Училка показывает хвост какой-то птицы и велела угадать что это за птица...

Этот папаша идёт в школу, открывает дверь класса и показывает туда зад.

- Это кто там такой...

Грозно спрашивает училка...

- А ты сама угадай.


Это в точности про твой код...))))

Пятиклассник Лёшенька заходит в первые классы не для того, чтобы помочь, а для того, чтобы перья распушить.

Это в точности про твой ответ.

 
novichok2018:

Вдобавок в журнале пишет, что сначала открывает ps3, потом  ps2.

Всё, разобрался. Оказалось всё просто: В алерте с условием ps8 вместо 8 стояла 3. А условие 8 шире условия 2 и стоит выше по строкам. Устранил и сузил, всё ОК.

А распушать хвост всё же не стоит, ветка ведь для новичков. Реальный специалист и без подробностей должен понять, где приблизительно ошибка, или хотя бы задать наводящие вопросы, иначе ему не стоит вообще отвечать, а не красоваться псевдокрутизной.

 
Aleksey Vyazmikin:

Я говорил о частоте с которой поступает сигнал, т.е. как я понимаю у Вас есть одинаковые и не одинаковые звуки, пока проигрывается звук происходит накопление в буфере (можно в графическом накапливать) очереди на проигрывание, после проигрывания анализируем очередь и выкидываем те звуки, которые пришли в момент проигрывания файла и имеют тот же звук, т.е. не несут в себе новой информации. Я же не знаю детали, что у вас там за мелофон :)

Есть индикатор, который стоит на и всех рабочих ТФ и валютах. Может фиксировать десятка полтора различных сигналов. Работаю в интрадей, почти скальпинг, на 2-3 инструментах. Чтобы не пропустить события и к концу дня не выпадали глаза, использую звуковое оповещение.

Фактически в активность к Windows обращается 10-14 индикаторов. Получается, что очередь необходимо выстроить от различных, независимо работающих индикаторов. Задача для терминала, да и программирования, не простая.

Вот такая «музыка» получается.):

Причина обращения: