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

 

Добрый день, форумчане.

Помогите корректно организовать звук в индикаторе. Стандартные средства МТ4 работают плохо.

Как я понимаю, в момент начала бара от различных графиков возникает поток сигналов на воспроизведение в Windows. В очередь они не ставятся, а проигрываются последние, остальные теряются. Из двух стоящих рядом функций PlaySound() воспроизводится только одна. Это создаёт кашу в сообщениях, да и организация сообщений грузит терминал.

Видится решение в использовании средств waveOut API или Winampa. Формирование в индикаторе чего-то вроде плейлиста и передачу воспроизведения внешнему устройству. Это ещё должно и разгрузить терминал. В общем, проблема в организации очереди.
Гуглил. Подробного описания для чайников не нашел, а сам разобраться в вопросе не смог.
Если кто решал эту задачу, или знает подробное описание,подскажите. Думаю, это будет интересно многим.

 

Кто-нибудь, помогите пожалуйста!!!!

Подскажите, как в MT4 сделать так, чтоб справа на ценовом графике, на уровнях стопа, была выделена цена так же как на линиях ask и bid????

Файлы:
27c3ncf5hf2.jpg  355 kb
 
zctac:

Кто-нибудь, помогите пожалуйста!!!!

Подскажите, как в MT4 сделать так, чтоб справа на ценовом графике, на уровнях стопа, была выделена цена так же как на линиях ask и bid????

Выводить свою горизонтальную линию (OBJ_HLINE) по цене стоп-приказа.

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
  • www.mql5.com
//| Создает горизонтальную линию                                     |                 price=0,                         width=1,            //| Перемещение горизонтальной линии                                 | //| Удаляет горизонтальную линию                                     |...
 
Algus:

Добрый день, форумчане.

Помогите корректно организовать звук в индикаторе. Стандартные средства МТ4 работают плохо.

Как я понимаю, в момент начала бара от различных графиков возникает поток сигналов на воспроизведение в Windows. В очередь они не ставятся, а проигрываются последние, остальные теряются. Из двух стоящих рядом функций PlaySound() воспроизводится только одна. Это создаёт кашу в сообщениях, да и организация сообщений грузит терминал.

Видится решение в использовании средств waveOut API или Winampa. Формирование в индикаторе чего-то вроде плейлиста и передачу воспроизведения внешнему устройству. Это ещё должно и разгрузить терминал. В общем, проблема в организации очереди.
Гуглил. Подробного описания для чайников не нашел, а сам разобраться в вопросе не смог.
Если кто решал эту задачу, или знает подробное описание,подскажите. Думаю, это будет интересно многим.

Легче это сделать во вспомогательном советнике или зациклинном скрипте, там работает Sleep() в отличии от индикатора и можно между проигрыванием мелодий ставить этот слип для ожидания, пока не закончится музыка.

А индикатор вызывать из скрипта или советника.
 
Aleksey Vyazmikin:

Легче это сделать во вспомогательном советнике или зациклинном скрипте, там работает Sleep() в отличии от индикатора и можно между проигрыванием мелодий ставить этот слип для ожидания, пока не закончится музыка.

А индикатор вызывать из скрипта или советника.

Спасибо, обдумаю, может, как вариант выкрутиться.

Проблема не в длительности а в очереди. Сообщения короткие, но много и одновременно. Опять же, нагружает терминал. Хотелось бы отдать это системе. Там эта задача, похоже, решена штатными средствами Windows.

Хотя,... может быть.

 
Algus:

Спасибо, обдумаю, может, как вариант выкрутиться.

Проблема не в длительности а в очереди. Сообщения короткие, но много и одновременно. Опять же, нагружает терминал. Хотелось бы отдать это системе. Там эта задача, похоже, решена штатными средствами Windows.

Хотя,... может быть.

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

 

В определённую дату и врем нужно проверять сигнал. Что неправильно?

input datetime Input1=D'23.02.2019 08:00:27';
input datetime Input2=D'08.03.2019 09:30:20';
input datetime Input3=D'01.04.2019 12:30:27';
______________________________________________

{
//---
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(A>B&&(TimeCurrent()==Input1 || TimeCurrent()==Input2 || TimeCurrent()==Input3))
           {
            BufferUP[i]=low[i]-10*Point;
            Alert("__",TimeCurrent());
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
Artyom Trishkin:

Выводить свою горизонтальную линию (OBJ_HLINE) по цене стоп-приказа.

Благодарю за ответ!
 
volyal:

В определённую дату и врем нужно проверять сигнал. Что неправильно?

if( (A>B) && (TimeCurrent()==Input1 || TimeCurrent()==Input2 || TimeCurrent()==Input3) )

у Вас "жесткие" условия, вот скорее всего Вы и не попадаете в истинное значение всего выражения

индикаторы и эксперты работаю по приходу тика, но тик может прийти позже на секунду выполнения Вашего условия 

такие условия нужно стараться писать на >=

ЗЫ: ну и в целом, я обычно когда пишу сложные логические условия, то стараюсь не потерять логику следования условиям, потом могу сократить в более компактный вид, мне так проще искать логические ошибки если они будут на этапе отлажки

if(A>B)
{
   if(TimeCurrent()==Input1 || TimeCurrent()==Input2 || TimeCurrent()==Input3))
        {
            BufferUP[i]=low[i]-10*Point;
            Alert("__",TimeCurrent());
        }
}

но это уже дело вкуса

 
Igor Makanu:

у Вас "жесткие" условия, вот скорее всего Вы и не попадаете в истинное значение всего выражения

индикаторы и эксперты работаю по приходу тика, но тик может прийти позже на секунду выполнения Вашего условия 

такие условия нужно стараться писать на >=

ЗЫ: ну и в целом, я обычно когда пишу сложные логические условия, то стараюсь не потерять логику следования условиям, потом могу сократить в более компактный вид, мне так проще искать логические ошибки если они будут на этапе отлажки

но это уже дело вкуса

Cпасибо. Просто>= нельзя, будет постоянно сигнал, после наступления первой даты, нужно задать диапазон времени. Как задать?
Причина обращения: