Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано

ну на самом деле тут уже надо ковырять логику, чего ты хочешь? считаешь ли ты "новой неделей" четверг если в среду торговля была по золоту выключена? ну и так далее. привязывайся ко времени на младших ТФ, вычисляй разницу между барами с привязкой к младшему ТФ(к примеру в одном дне 24 бара н1, 48 баров м30, 96 баров м15 и так далее), контролируй корректность вычисления "начала".

это не невыполнимая задача, а голая математика.

Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано
AndreyGold ситуацию с металлами не изучал, но торги начинаются примерно одинаково в каждую неделю и в зависимости от ГМТ брокера это или вск или пнд. Я искал разрывы котировок и проверял их (на возможные дыры в истории), если разрыв подходил в параметры начала недели - торговлю разрешал. Этот подход работает на валютах нареканий на сову нет уже долго...

Гриб к посту dermitay добавлю, вместо условия : TimeHour(TimeCurrent()) == HourStop
я бы использовал: Hour() >= HourStop - если потом настройки окончания торгов поменяете на 19, то после 20 бот сможет опять открыть сделки... Изменено пользователем 0ll
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


А как бы ещё какой-нибудь текст на график вывести, типа Comment, в левом верхнем углу?



1. создай индюк,
2. в нем пропиши что надо в коменте.
3. индюк кинь на график с подгружаемым темплейтом.
4. темплейт пересохрани.
5. профит!!!
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
УЛУЧШАЕМ ИНДИКАТОРЫ для контроля тренда.

Есть несколько действенных индикаторов для контроля тенденций/тренда требующие некоторого пользовательского улучшения.
Просьба оказать посильную помощь в их доработке. >:d
---
1. Инд. slope_direction_line.mq4 . Просьба добавить во Входные параметры (настройки) следующее:
---

1. Сдвиг -/+ по типу МА (это Главная задача - сначала это + то, что дастся сразу, потом остальное! )



Ещё:

Спойлер


2. Отключаемые алерты и Стрелки
(с настройкой отступа от свечей) .

3. Подписать в коде памятку, комментариями, рядом со строками отвечающего кода,
лучше вывести подписи в панель, что значат/дают настройки, их числа:


Ещё лучше: вывести в панель настройки Метод МА и Применить к: ... с выбором - как в оригинальном МА от МТ4.


4. Если удастся, добавить цветную "зону перехода" - на изгибах линии (при замедлении, смене направления) ,
из 2-х частей, с настройкой толщины и отдельными цветами:
по умолч., на начале и завершении спада - Gold, на начале и завершении роста - Aqua

5. Сделать MTF версию.

slope_direction_line.mq4

Изменено пользователем erkon
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Посетила мысля как решить проблему цены начала недели на текущем ТФ.
Делаем перебор - отматываем назад цикл от текущего бара до бара, где номер дня недели , меньше чем номер дня недели предыдущего бара. (через TimeDayOfWeek)
Это и будет началом недели.
Так мы решим проблему новогодних периодических сбоев по валютам и более частых сбоев по металлам в этом вопросе.

Изменено пользователем AndreyGold
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Посетила мысля как решить проблему цены начала недели на текущем ТФ.
Делаем перебор - отматываем назад цикл от текущего бара до бара, где номер дня недели , меньше чем номер дня недели предыдущего бара. (через TimeDayOfWeek)
Это и будет началом недели.
Так мы решим проблему новогодних периодических сбоев по валютам и более частых сбоев по металлам в этом вопросе.



я тебе об этом и говорил, но я хз как там у вас, может дневные бары тоже глючат, поэтому и предлагал еще более младшие ТФ.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



Посетила мысля как решить проблему цены начала недели на текущем ТФ.
Делаем перебор - отматываем назад цикл от текущего бара до бара, где номер дня недели , меньше чем номер дня недели предыдущего бара. (через TimeDayOfWeek)
Это и будет началом недели.
Так мы решим проблему новогодних периодических сбоев по валютам и более частых сбоев по металлам в этом вопросе.



я тебе об этом и говорил, но я хз как там у вас, может дневные бары тоже глючат, поэтому и предлагал еще более младшие ТФ.

Ну кстати да, на текущем ТФ :
1 вычисляем от текущем бара ориентир бара начала недели через "(к примеру в одном дне 24 бара н1, 48 баров м30, 96 баров м15 и так далее)"
2 сравниваем номер дня недели на ориентире с номером дня недели предыдущего бара
3 если номер дня недели не меньше, то перебором идем вперед к текущей дате и ищем два бара подряд, на предмет уменьшения дня недели.

Так будет побыстрее, чем перебор циклом всех баров назад
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

ну я так и делал пару-тройку лет назад, именно так я и искал хаи/лои, пока не узнал о волшебных iLowest и iHighest :)) :d 8-}

  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Добавил сдвиг и для удобства цифры заменил на константы ;)

slope_direction_line_m01.mq4

Изменено пользователем Старик
  • Лайк 5
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


для мах/мин всегда использую встроенные МКЛ функции типа: iHighest ( NULL, 0, MODE_HIGH, BarCount, 0 ) ;

Спасибо, получилось. Была задача в нахождении не только минимумом/максимумом, но и минимальных/максимальных цен закрытия бара за n период, причём начиная не с последнего бара. И код красивый и удобно. ;)


M1ckey M0u5e, в учебнике по MQL есть изящный код:

//+------------------------------------------------------------------+
extern int Quant_Bars =19; // Количество баров
// Определяем Макс и Мин цены
int i; //Номер бара
double Maximum=Bid; //Максимальная цена
double Minimum=Bid; //Минимальная цена

for(i=0; i {
if(High>Maximum)
Maximum=High;

if(Low Minimum=Low;
}
Alert("За последние ", Quant_Bars, " баров Мах = ",Maximum,", Мin = ", Minimum);

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


Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Вот такая очередная задачка: пытаюсь заставить своего мультивалютного сеточника избегать корреляции по долларовым парам. Т.е., если открыты какие либо позиции с USD - новых не открываем. Накропал вот такую функцию:

bool CheckUSDcorrelation() //проверяем наличие в рынке USD пар - если их нету, возвращаем true 
{
if (OrdersTotal() == 0)
return(true);

string sym = "USD";

if (StringFind(StringToUpper(Symbol()), sym, 0) > 0)
{
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (StringFind(StringToUpper(OrderSymbol()), sym, 0) > 0)
return(false);
}
}
}
return(true);
}


Стал тестить - работает как-то коряво. То вроде нормально отрабатывает, то нет. Сегодня например была в работе USDCHF, через какое-то время открыл EURUSD. А до этого тестил - вроде нормально, пока в рынке одна USD-пара, другие не открывались. Входы индикаторные, не частые, так что одновременное открытие тут большая редкость. Есть идеи? Может это вообще можно по-другому реализовать?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

У тебя ошибка.
StringFind() например для USDCAD находит подстроку и... возвращает ноль, ведь функция возвращает именно позицию начала подстроки.

В выражении где StringFind выстави нестрогое сравнение. Не ">" а ">=".

Незачто, я на парсинге строк собаку съел))

И убери этот стрингтуаппер, он тут вобще не нужен.

А еще почитай "про это"... Работает и у нас на мт4.

  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Вот пример работы тру-ЕЦН:
на картинке ниже Вы видите несколько сделок Селл, на самом деле их 2 по 0,03 лота
1 ордер открылся и закрылся штатно
2 ордер открылся лотом 0,01 (из запрашиваемых 0,03), потом при очередном возврате цены к уровню открытия (прошло более 25 мин!) брокер до-открыл ещё 2 ордера по 0,01 лота - такая вот доливочка...
всё закрылось штатно, моя прога уже готова к таким поворотам. - а Ваша готова? тогда ЕЦН идёт к Вам! v:)

ПС: это я к разговору со Стариком об учёте ордеров в сетках...

FxOpen-ECN-demo-3ord.png

Изменено пользователем 0ll
  • Лайк 5
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Oll, да, прикольный алгоритм ты придумал. только как часто цена возвращается к твоей цене открытия первого ордера лотом 0,01 - вопрос.

или это шутка такая? у меня бывают глюки визуализации и истории когда применяешь CloseBy() - частичное закрытие ордера. Изменено пользователем dermitay
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
dermitay это не я придумал - сова послала брокеру ордер 0,03, а брокер его исполнил "как смог".
Просто в случае сетки этот момент надо учитывать, а не тупо колени считать...

ПС: да какие шутки? это только последний случай - особенный (большой временной разрыв), а вообще я такое регулярно наблюдаю...
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


dermitay это не я придумал - сова послала брокеру ордер 0,03, а брокер его исполнил "как смог".
Просто в случае сетки этот момент надо учитывать, а не тупо колени считать...

ПС: да какие шутки? это только последний случай - особенный (большой временной разрыв), а вообще я такое регулярно наблюдаю...



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

имхо, увидя такое, я бы валил первым рейсом из этой конторы.

ты как бы пойми саму глубинную суть ECN - тебе предоставляют самое быстрое исполнение и самые "чистые" котировки одного или нескольких поставщиков ликвидности. но твой ордерок(заявка - приказ) дальше этого брокера не уйдет. ты все равно варишься внутри кухни, с своими лотами 0,01 тебя не пустят ни на одну мировую биржу, там лотность должна быть как минимум 1000 и плечо 1:1 ))

это тебе к тому что сам брокер может "оправдываться" тем что мол мы послали заявку "куда-то там на мировую биржу"- но она выставилась у дилинга как лимитка а не как чистый селл. Изменено пользователем dermitay
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



dermitay это не я придумал - сова послала брокеру ордер 0,03, а брокер его исполнил "как смог".
Просто в случае сетки этот момент надо учитывать, а не тупо колени считать...

ПС: да какие шутки? это только последний случай - особенный (большой временной разрыв), а вообще я такое регулярно наблюдаю...



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

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

Да с биржей понятно... у конторы будет суммарная позиция. Конторы меж собою их кроют на биржу никто не выводит (если только суммарная поза не превысит некий порог). Я о другом - такие финты возможны и сова должна быть готова... Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Да нет. я так не считаю. Я такое видел у всех ецн брокеров - куда валить? в кухню? И изгаляться не надо. Брокер или сам дооткроет или нет. просто учёт в случае сетки надо вести не по количество ордеров. Я сделал по уровням усреднения и если открытый ордер не той лотности надо ждать дооткрытия (в моём случае) или хз что делать...



ну... ты ж когда посылаешь ордер сенд тебе возвратом идет тикет этого нового ордера, можно да, сразу же проверить его лотность, и если не совпадает с переменной лотности(у тебя считай все переменные под рукой, ведь ты их только что подготовил к отправке ОрдерСендом), то выбрасывать какую-либо булевую пеменную, означающую блок торгов или увеличение недостающей лотности в ордере на следующем колене.

ЗЫ: у тикмила я таких глюков ни разу не наблюдал. у 4ю(счет ProSTP) тоже.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


ЗЫ: у тикмила я таких глюков ни разу не наблюдал. у 4ю(счет ProSTP) тоже.

Если-б не было-бы глюка - жизнь была-б такая скука... :d
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Взялась за древнее ископаемое задание. Больно не бейте ибо блондинка и нуб x_x

Цитата

Создайте и заполните массив с максимальными ценами за последние X баров
(указать как внешний параметр). Значения массива вывести на экран
терминала.



Результат выводится в виде "номер бара цена", т.е.
0 1.1222, 1 1.1223, 2 1.2455 ...
Как сделать чтобы выводилось в обратном порядке? Т.е. сначала бар N, а в конце нулевой?
2 1.2455, 1 1.1223, 0 1.1222 ...
Так было бы логичней - самый "свежий" бар самый правый и строке коммента так же.


Test1.mq4

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Цитата

Как сделать чтобы выводилось в обратном порядке? Т.е. сначала бар N, а в конце нулевой?


Nicole, просто в цикле for для Вашей переменной str начните перебирать не с i=0, а с i=50 и в обратную сторону. И попробуйте еще для тренировки вот это число баров (50) :-? задать как переменную, голых вводов цифр Павел не советовал делать, что в принципе правильно
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

А можно перед циклом "развернуть массив" через ArraySetAsSeries(), а после цикла опять его вернуть в исходное состояние))
Вобще вариаций много) Задача напоминает "как добраться от ВДНХ до Рижской самым длинным путём" :d :))

  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Цитата

Как сделать чтобы выводилось в обратном порядке? Т.е. сначала бар N, а в конце нулевой?


Nicole, просто в цикле for для Вашей переменной str начните перебирать не с i=0, а с i=50 и в обратную сторону. И попробуйте еще для тренировки вот это число баров (50) :-? задать как переменную, голых вводов цифр Павел не советовал делать, что в принципе правильно


Дело в том, друг, что при обратном отсчете в цикле строка не выводится вообще. Я уже третий вечер с этой штукой воюю.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Nicole White задачка не сложная, но в этом топике помогают учиться, а не дают готовые решения. Все подсказки Вами получены, надо внимательно реализовать. Вы как строку формируете? У Вас один цикл для заполнения массива и формирования строки или 2 отдельных?
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...