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

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


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

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

Увы, теперь появились ошибки 130 в OrderModify.

Я обнаружил логический недочет... (ведь стопы должны двигаться в правильную сторону), поэтому надо выписать отдельно для Бая и Селла:
               SL = NormalizeDouble(SL, Digits);
if (Bid - SL if(!(SL - OrderStopLoss() > Point)) return(0); //Для Бая, для Селла наоборот

OrderModify(OrderTicket(), OrderOpenPrice(), SL, OrderTakeProfit(), 0); // А эта строка за скобками - на прежнем месте

HardTrailing.mq4

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

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

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

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

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

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

Перейти

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

Перейти

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

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

Уважаемый xbms,подскажите пожалуйста как в сетке ордеров при наступлении энного события закрыть первый и последний ордер сетки?

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

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


Я обнаружил логический недочет... (ведь стопы должны двигаться в правильную сторону), поэтому надо выписать отдельно для Бая и Селла:


Результат получился очень интересный. За год открыл всего 2 ордера. Попробую посмотреть, должно ли оно быть так или это я где-то напортачил...
Скажите, с какой целью делается эта проверка?

if(!(SL - OrderStopLoss() > Point)) return(0);
Ссылка на сообщение
Поделиться на другие сайты

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


Результат получился очень интересный. За год открыл всего 2 ордера. Попробую посмотреть, должно ли оно быть так или это я где-то напортачил...
Скажите, с какой целью делается эта проверка?

if(!(SL - OrderStopLoss() > Point)) return(0);

Эта проверка для Бай-ордера, следовательно, если цена идет вверх расчетный стоп (SL) двигается за ценой и он в какой-то момент становится больше стопа, выставленного в ордере. Значит их разница будет > Point и пора двигать Стоп в ордере (для этого стоит (!)).
По поводу 2 ордеров в год - посмотри дату открытия и закрытия, походу сделка висит и не закрывается.
Пробуй вместо return(0); - continue; (Забыл про цикл - return завершает выполнение функции, т.е. до второго ордера не доходит...)
А стопы короткие? Изменено пользователем 0ll
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


По поводу 2 ордеров в год - посмотри дату открытия и закрытия, походу сделка висит и не закрывается.


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

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

Всех с праздниками! Люди помогите понять в уроке №8 при написании функции OrderSendX мы определяем

bool exit_loop = false;

но далее мы пишем
if (cmd == OP_BUY || cmd == OP_SELL)
{
while (!exit_loop)
{
ticket = OrderSend (symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
err = GetLastError ();

switch (err)
{
case ERR_NO_ERROR:
exit_loop = true;
break;
..........
тоесть while получается не false, тоесть true (while (!exit_loop), далее если нет ошибки (case ERR_NO_ERROR), мы присваиваем exit_loop = true, которое изночально true. Смысл не понимаю. Люди подскажите пожалуйста новичку.


Добавлено: 04-05-2014 16:52:11

А еще кто может помогите с решением ДЗ по уроку №6, с 3 пунктом:
"при написании первого скрипта в данном видео-уроке была заведомо допущена ошибка, которая может привести к его некорректной работе. Найдите её и предложите своё решение."

Где в видео-уроке допущена ошибка? Изменено пользователем denkudo
Ссылка на сообщение
Поделиться на другие сайты

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

Ребята, вы на форексе, а не в школе.
Здесь списывать нельзя.

Способен - выживешь и заработаешь.
Не способен сам разобраться и сделать хоть что-то на форексе, оставайся с 99% обычных людей, не мучь себя и семью.

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

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


тоесть while получается не false, тоесть true (while (!exit_loop), далее если нет ошибки (case ERR_NO_ERROR), мы присваиваем exit_loop = true, которое изночально true. Смысл не понимаю. Люди подскажите пожалуйста новичку.

while в переводе пока..., т.е когда while(TRUE) цикл выполняется.
изначально exit_loop = false, а (!exit_loop)= true и цикл идет. Соответственно когда exit_loop = true (нет ошибки) цикл прекращается.
Видео не смотрел - подсказать не могу.
На Старика не обижайтесь, может он тему перепутал.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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



тоесть while получается не false, тоесть true (while (!exit_loop), далее если нет ошибки (case ERR_NO_ERROR), мы присваиваем exit_loop = true, которое изночально true. Смысл не понимаю. Люди подскажите пожалуйста новичку.

while в переводе пока..., т.е когда while(TRUE) цикл выполняется.
изначально exit_loop = false, а (!exit_loop)= true и цикл идет. Соответственно когда exit_loop = true (нет ошибки) цикл прекращается.
Видео не смотрел - подсказать не могу.
На Старика не обижайтесь, может он тему перепутал.


Спасибо большое за помощь 0ll, очень помогли. Все разобрался.


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


Скрипт из видео в сообщении на 53 странице. Но я ошибки там не вижу. И работает он отлично. Не понимаю в чем загвоздка.
Ссылка на сообщение
Поделиться на другие сайты

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


Подскажите есть у кого-нибудь рабочий пример работы функции CreateFile (win32) в советнике МТ4?


int CreateFileA(string a0, int a1, int a2, int a3, int a4, int a5, int a6);
RTFM как говорится
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363874%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx
Например, разберем параметр dwShareMode: в подавляющем количестве случаев можно использовать FILE_SHARE_READ, третий параметр значит будет 1.
lpSecurityAttributes: по умолчанию NULL можно использовать, значит 4 параметр будет 0
и так далее.
p.s. Короче, если вы не в состоянии читать MSDN на английском то следует оставить программирование и заняться офисной работой.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

Уважаемые Коллеги!
Поведайте как правильно прочитать и вытащить данные из файла *.csv.
В частности нужна дата и время, всё!
Почитал справку по функции FileReadDatetime(). В толк не возьму как определить размер массива (если он вообще нужен), т.е. кол-во строк, т.к. файл будет обновляться всякий раз при добавлении новых событий.
xbms, Сергей, по-моему, дайте намек как правильно оформить это мероприятие!

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

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

Поведайте как правильно прочитать и вытащить данные из файла *.csv.
В частности нужна дата и время, всё!
Почитал справку по функции FileReadDatetime().

У Вас МТ 600+?
Читать из файла нужно все поля. Я это делаю в строковый массив с размерностью = кол-ву полей в .csv
Затем берем нужное поле из массива и, в зависимости от формата даты/времени в исходном .csv-файле, преобразуем его во внутренний формат МТ с помощью встроенной функции либо врукопашную.
Если грузить весь файл в массив, то я сохраняю размер файла и файловый указатель и периодически отслеживаю. Если размер файла изменился, то открываем и продолжаем читать начиная с сохраненной позиции указателя.
В общем алгоритмов может быть много - зависит от задач, частоты событий, необходимости сортировки и т.д. Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

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


Поведайте как правильно прочитать и вытащить данные из файла *.csv.
В частности нужна дата и время, всё!
Почитал справку по функции FileReadDatetime().

У Вас МТ 600+?
Читать из файла нужно все поля. Я это делаю в строковый массив с размерностью = кол-ву полей в .csv
Затем берем нужное поле из массива и, в зависимости от формата даты/времени в исходном .csv-файле, преобразуем его во внутренний формат МТ с помощью встроенной функции либо врукопашную.
Если грузить весь файл в массив, то я сохраняю размер файла и файловый указатель и периодически отслеживаю. Если размер файла изменился, то открываем и продолжаем читать начиная с сохраненной позиции указателя.
В общем алгоритмов может быть много - зависит от задач, частоты событий, необходимости сортировки и т.д.


Да, билд 625. Все дело в том, что я ни разу не работал с файлами, представления не имею с чего начать. А поле в таблице одно и определенное кол-во строк, количество которых меняется раз в неделю. В строки выведены через зпт. "Дата Время", "Текст". Моя задача взять Дату время и сравнить с текущим терминальным.
Если дословно, то это *.csv календаря событий от FXStreet.
Ссылка на сообщение
Поделиться на другие сайты

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


Да, билд 625. Все дело в том, что я ни разу не работал с файлами, представления не имею с чего начать. А поле в таблице одно и определенное кол-во строк, количество которых меняется раз в неделю. В строки выведены через зпт. "Дата Время", "Текст". Моя задача взять Дату время и сравнить с текущим терминальным.
Если дословно, то это *.csv календаря событий от FXStreet.

Ну так бы и сразу писали. Для работы по событиям календаря есть куча советников. Если Вы знаете MQL то не составит труда разобраться. Почитайте эти ссылки и если что - задавайте вопросы. (Там как-раз и отражены приемы работы с .csv файлами)
http://articles.mql4.com/ru/520
http://www.mql5.com/en/code/8491
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте господа подскажите пожалуйста как открыть одновременно сделки допустим по 2 валютным парам используя массив ?
Для этого нужно использовать циклы.Но как это все сделать я не знаю. По этому обратился к вам. На одном из форумов я нашел вот такой цикл,
string sym[2]={"EURUSD","USDCHF"};
int pairsOpen[2], // кол-во открытых ордеров по каждой валютной паре
totalPairs; // кол-во валютных пар в массиве
//-----------------------------------------------------------++
int i,size=ArraySize(sym); // ранг массива
totalPairs=0;
for (i = 0; i {
if (StringLen(sym) > 0) // если элемент не пустой
{
totalPairs++; // Увеличиваем количество пар
}
else
{
break;
}
}

Что дальше со всем этим делать подскажите пожалуйста ?

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

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

2 denis77515
Реализация работы совы зависит от алгоритма.
Например условия для входа: они рассчитываются для каждой пары или какие-то общие?, а для выхода?
Понятно, что сам процесс открытия сделок и сопровождения нужно делать для всех пар (можно в цикле).
Алгоритм может быть такой:
Старт
Если (бот_в_рынке)
Пересчет ордеров, контроль профита/лосса
Проверка условий на выход
Выход
Иначе
Проверка условий на вход
Вход
Конец

В цикле Вам нужно сделать только Вход (имхо)
В приведенном Вами примере есть шероховатости:
- totalPairs == i зачем это?
- if (StringLen(sym) > 0) - ошибка в проверке, нужно if (StringLen(sym) > 0), это надо делать в init(), а не в цикле выставления ордеров.
В итоге осталось:
for (i = 0; i {
OrderSend(sym, OP_BUY, Lot, oPrice, Slippage, 0, 0, Comm, Magic, 0, oColor); //например
}

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

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

Ребят, подскажите как прописать функцию, чтобы советник выполнял определенные проверки на каждом баре. Или что-то типа if (NewBar() = true) {} //-------- int NewBar() и погнали вычислять новый бар. А еще как от iCustom передать значение iClose (или что-то, что содержало бы цену закрытия бара). Спасибо.

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

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

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

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

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


Ребят, подскажите как прописать функцию, чтобы советник выполнял определенные проверки на каждом баре. Или что-то типа if (NewBar() = true) {} //-------- int NewBar() и погнали вычислять новый бар. А еще как от iCustom передать значение iClose (или что-то, что содержало бы цену закрытия бара). Спасибо.

Новый бар:
   static datetime new_Bar = 0;                       
if (new_Bar != Time[0]) {
new_Bar = Time[0];
...
}
(вообще-то полно информации - можно и самому найти) Про iCustom и iClose - не понял.


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

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

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



Ребят, подскажите как прописать функцию, чтобы советник выполнял определенные проверки на каждом баре. Или что-то типа if (NewBar() = true) {} //-------- int NewBar() и погнали вычислять новый бар. А еще как от iCustom передать значение iClose (или что-то, что содержало бы цену закрытия бара). Спасибо.

Новый бар:
   static datetime new_Bar = 0;                       
if (new_Bar != Time[0]) {
new_Bar = Time[0];
...
}
(вообще-то полно информации - можно и самому найти) Про iCustom и iClose - не понял.

Спасибо и прошу прощения "утонул" я во всей этой инфе. Относительно iCustom: получаем сигнал от индикатора, хочу этот сигнал привязать к цене закрытия бара, на котором этот сигнал был получен.
Ссылка на сообщение
Поделиться на другие сайты

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

Дружище 0ll я пока хотел написать для скрипта,что бы открывал 2,3 или больше пар.По ходу изучать массивы,как они работают. Потом эту функцию в советнике я думаю можно будет использовать.

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

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

Относительно iCustom: получаем сигнал от индикатора, хочу этот сигнал привязать к цене закрытия бара, на котором этот сигнал был получен.

У iClose и iCustom последний параметр вызова одинаковый - shift - это и есть номер бара которому соответствует возвращаемое значение. (У Вас индюки на одном таймфрейме работают?)

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

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


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

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


OLL Допустим по БАЙтикет через цикл for(i=0; i Изменено пользователем С_е_р_г_у_й
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

Войти

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


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

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