Ваши вопросы по языку MQL4

_SERG_

Активный участник
;)
Наприклад шоб взнати бід gbpusd MarketInfo("GBPUSD",MODE_BID) треба.
А це функція, її данні отримуються при виклику.

Альтернативный вызов: MarketInfo("GBPUSD", 9 );
Удобно в цикле перебирать.
Да и неувязочка, отрабатывает по тику текущего инструмента, а не запрашиваемого.
Усе так, тільки трошечки не так. :laugh:
Немного с темы съехали, про задержку выполнения команды.
 

ref2015

Интересующийся
кто нибудь может помочь советника доработать? дописать в нем эти функции, задержка при сигнале индикатора на покупку или продажу(в секундах ) с возможностью их корректировать, и повторная проверка сигнала, буду очень благодарен.
 

_SERG_

Активный участник
кто нибудь может помочь советника доработать? дописать в нем эти функции, задержка при сигнале индикатора на покупку или продажу(в секундах ) с возможностью их корректировать, и повторная проверка сигнала, буду очень благодарен.
Ты то сам пишешь?
Или чей то код дотягиваешь?
Про "дописывание", так функции не просто в советник надо дописывать, а в соответствви с твоей стратегией, тобышь, и к месту и ко времени.
Выдели события, которые происходят у тебя по стратегии, зафиксируй условно время сигнала, создай счётчик, задействованный при проверке, дождись когда Начальное время + счётчик будут больше времени ожидания, и выполни команду.
Всё.

На MQL4 писать, это вывих головного мозга делать.
А дальше даже не буду говорить.
 
Последнее редактирование:

ref2015

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

На MQL4 писать, это вывих головного мозга делать.
А дальше даже не буду говорить.

чей то дотягиваю под БО
 

_SERG_

Активный участник
А шо з ним?
Ну пару прикладів, бо мені дуже подобається і вивихом ВВАЖАЮ mql5.

Тебе какая версия больше нравится до 600 или выше?
4-й - процедурный, 5-й с претензией на ООП, но оба недоделанные.

Примеры, та не вопрос, отсортируй средствами языка, по убыванию, энный столбец, любой но не столбец 0-го измерения массива, ток не говори, что "Мне это не надо." или "Я этим не пользуюсь.", 4-х мерного массива.
Обычно в примерах заканчивается применением ArraySort(), но с ней тоже не все путем, символы не сортирует.
Или например создав переменную с динамическим именем, создай массив с динамическим именем. Напиши, что получилось.Это так на вскидку.
Вроде бы как есть, что то, но воспользоваться, в расчете на результат не всегда
возможно.
 

eevviill2

Местный знаток
Тебе какая версия больше нравится до 600 или выше?
4-й - процедурный, 5-й с претензией на ООП, но оба недоделанные.

Примеры, та не вопрос, отсортируй средствами языка, по убыванию, энный столбец, любой но не столбец 0-го измерения массива, ток не говори, что "Мне это не надо." или "Я этим не пользуюсь.", 4-х мерного массива.
Обычно в примерах заканчивается применением ArraySort(), но с ней тоже не все путем, символы не сортирует.
Или например создав переменную с динамическим именем, создай массив с динамическим именем. Напиши, что получилось.Это так на вскидку.
Вроде бы как есть, что то, но воспользоваться, в расчете на результат не всегда
возможно.
Емм. mql4 вже давно ООП теж, нє?

Я так сортував.
Создаем двухмерный массив, например: double Asort[ 4000, 2]
В первое измерение Asort[ i, 0] = записываем сортируемое значение.
Во второе помещаем ссылку Asort[ i, 1] = i это индекс в исходном массиве.
После сортировки, индекс в исходном массиве.узнаем из второго измерения
 
Последнее редактирование:

vladradon

Программист
Серж, Привет! Что-то давно не вижу тебя в скайпе... По поводу функции OnTimer() - не работает у меня на 5-ке (MT5), хоть ты тресни, - всегда новые команды срабатывают только при приходе тика. Все одинаково на всех брокерах. На 4-ке пока не пробовал. Не работает ни секундный, ни миллисекундный - все равно ждет тика.
 

_SERG_

Активный участник
Емм. mql4 вже давно ООП теж, нє?

Я так сортував.
Создаем двухмерный массив, например: double Asort[ 4000, 2]
В первое измерение Asort[ i, 0] = записываем сортируемое значение.
Во второе помещаем ссылку Asort[ i, 1] = i это индекс в исходном массиве.
После сортировки, индекс в исходном массиве.узнаем из второго измерения

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

Всё так просто! Разработчики просто молодцы!
На фоне ArraySort(), вообще титанический труд. :laugh:
eevviill2, ты извини не хочу углубляться глубоко в эту полемику, это уже давно пройденный этап.
 
Последнее редактирование:

_SERG_

Активный участник
Серж, Привет! Что-то давно не вижу тебя в скайпе... По поводу функции OnTimer() - не работает у меня на 5-ке (MT5), хоть ты тресни, - всегда новые команды срабатывают только при приходе тика. Все одинаково на всех брокерах. На 4-ке пока не пробовал. Не работает ни секундный, ни миллисекундный - все равно ждет тика.

Привет, Влад.
Не сижу, но бываю. :laugh:
Там народ ваааще замер.
Никакой переписки. СОРМ в действии.:laugh:
Я, для того чтобы убедиться, что работает OnTImer(), закомментировал все другие стандартные функции, оставил только OnInit() & OnDeinit();
 

eevviill2

Местный знаток
Така ситуація.
Є ОнТаймер і ОнТік
інтервал ОнТаймер 1 сек
12:31 12:32 і тут в Онтік код довго рахує аж 2 секунди
Чи виконається код в ОнТаймер в 12:33
?
 

eevviill2

Местный знаток
Така ситуація.
Є ОнТаймер і ОнТік
інтервал ОнТаймер 1 сек
12:31 12:32 і тут в Онтік код довго рахує аж 2 секунди
Чи виконається код в ОнТаймер в 12:33
?
Ах..ть!!!
І нашо той ОнТаймер????
Дибі.и.
PHP:
//EA test on timer=0,1,2,3 seconds delay, HAHAHA...
////////////
int OnInit()
  {
   EventSetTimer(1);

   return(INIT_SUCCEEDED);
  }

//////////////
void OnTick()
  {
   Sleep(1200);
   
  }
//////////////
void OnTimer()
{
Alert("seconds loc:" ,TimeSeconds(TimeLocal()));

}
 

_SERG_

Активный участник
Ах..ть!!!
І нашо той ОнТаймер????
Дибі.и.
PHP:
//EA test on timer=0,1,2,3 seconds delay, HAHAHA...////////////int OnInit()  {   EventSetTimer(1);   return(INIT_SUCCEEDED);  }//////////////void OnTick()  {   Sleep(1200);     }//////////////void OnTimer(){Alert("seconds loc:" ,TimeSeconds(TimeLocal()));}

Ты уверен, что в коде всё правильно, результатам можно верить?оО
Опять же логика простая, если ты не понял, зачем тебе это надо?
То тогда, тебе это не надо. Чё париться?!!!
 
Последнее редактирование:

eevviill2

Местный знаток
Ты уверен, что в коде всё правильно, результатам можно верить?оО
Опять же логика простая, если ты не понял, зачем тебе это надо?
То тогда, тебе это не надо. Чё париться?!!!
Дик. Цеж весь код.
Шо не поняв?
Все зрозуміло. Або використовувати то або то. Вони паралельно не працюють.
 

_SERG_

Активный участник
Дик. Цеж весь код.
Шо не поняв?
Все зрозуміло. Або використовувати то або то. Вони паралельно не працюють.

Да есть приоритет выполнения, но есть иногда необходимость выполнить код, без прихода котировки.
Комбинируй.
Но есть случаи когда тик мешает, но он есть, тем не менее.
 

Sam163

Активный участник
Добрый день всем.
В программировании абсолютный 0,так что сильно не ругайте.
Интересует следующий момент,как сделать чтобы выделялось коробкой например область где Close свечи совпадает с Open следующей,и наоборот?И возможно чтобы можно было в переменных изменять строгое равенство на +-n пунктов.Пример:
Закрытие свечи 1.3560 и открытие след. свечи 1.3560,и нужно чтобы это две свечи как то обозначались.И чтобы во внешних переменных была строка на какое количество можно изменить равенство.Например n=1,и разница между закрытием и открытием будет 1пп.
Вот выдержка из кода где выделяется две свечи при условии что закрытие текущей свечи меньше открытия предыдущей.
if(Close<Open[i+1] )
А вот как сделать чтобы был знак равенства,не знаю((((
Вроде доступно объяснил.))
Заранее благодарен за ответ.
 
Последнее редактирование:

Ugar

Гуру форума
if(Close<Open[i+1] )
А вот как сделать чтобы был знак равенства,не знаю((((
Вроде доступно объяснил.))
Заранее благодарен за ответ.

Для целых значений можно было сделать
if(x==y )
Для дробных лучше вот так
if(fabs(Close-Open[i+1])<0.5*_Point )
 

vladradon

Программист
Добрый день всем.
В программировании абсолютный 0,так что сильно не ругайте.
Интересует следующий момент,как сделать чтобы выделялось коробкой например область где Close свечи совпадает с Open следующей,и наоборот?И возможно чтобы можно было в переменных изменять строгое равенство на +-n пунктов.Пример:
Закрытие свечи 1.3560 и открытие след. свечи 1.3560,и нужно чтобы это две свечи как то обозначались.И чтобы во внешних переменных была строка на какое количество можно изменить равенство.Например n=1,и разница между закрытием и открытием будет 1пп.
Вот выдержка из кода где выделяется две свечи при условии что закрытие текущей свечи меньше открытия предыдущей.
if(Close<Open[i+1] )
А вот как сделать чтобы был знак равенства,не знаю((((
Вроде доступно объяснил.))
Заранее благодарен за ответ.

Я бы порекомендовал поступить от обратного - т.е. если значения не равны, тогда какое-то действие предпринимать. Но не раз сталкивался с тем, что котировки в тесторе выпрыгивают за 5 знаков после запятой (может и 8 и 16 быть). Это, конечно глюки брокеров, но они бывают. Поэтому стоит использовать нормализацию типа:
external int n=1; //Разница между закрытием/открытием свечей
...
if (MatAbs((NormalizeDouble (Close[1], _Digits)-NormalizeDouble (Open[1+1], _Digits))/_Point)<=n)
{
... Какие-то команды, если разница меньше или равно n
}
Так, по крайней мере, можно не беспокоится о количестве знаков после запятой (4-5 или 2-3 для йеноподобных).
 
Последнее редактирование:
Верх