0ll Опубликовано 1 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 мая, 2014 Увы, теперь появились ошибки 130 в OrderModify. Я обнаружил логический недочет... (ведь стопы должны двигаться в правильную сторону), поэтому надо выписать отдельно для Бая и Селла: SL = NormalizeDouble(SL, Digits); if (Bid - SL if(!(SL - OrderStopLoss() > Point)) return(0); //Для Бая, для Селла наоборот OrderModify(OrderTicket(), OrderOpenPrice(), SL, OrderTakeProfit(), 0); // А эта строка за скобками - на прежнем месте HardTrailing.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyP Опубликовано 2 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 мая, 2014 Уважаемый xbms,подскажите пожалуйста как в сетке ордеров при наступлении энного события закрыть первый и последний ордер сетки? Ссылка на сообщение Поделиться на другие сайты More sharing options...
NickWelder Опубликовано 2 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 мая, 2014 Я обнаружил логический недочет... (ведь стопы должны двигаться в правильную сторону), поэтому надо выписать отдельно для Бая и Селла: Результат получился очень интересный. За год открыл всего 2 ордера. Попробую посмотреть, должно ли оно быть так или это я где-то напортачил...Скажите, с какой целью делается эта проверка? if(!(SL - OrderStopLoss() > Point)) return(0); Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 мая, 2014 Результат получился очень интересный. За год открыл всего 2 ордера. Попробую посмотреть, должно ли оно быть так или это я где-то напортачил...Скажите, с какой целью делается эта проверка? if(!(SL - OrderStopLoss() > Point)) return(0); Эта проверка для Бай-ордера, следовательно, если цена идет вверх расчетный стоп (SL) двигается за ценой и он в какой-то момент становится больше стопа, выставленного в ордере. Значит их разница будет > Point и пора двигать Стоп в ордере (для этого стоит (!)).По поводу 2 ордеров в год - посмотри дату открытия и закрытия, походу сделка висит и не закрывается.Пробуй вместо return(0); - continue; (Забыл про цикл - return завершает выполнение функции, т.е. до второго ордера не доходит...)А стопы короткие? Изменено 3 мая, 2014 пользователем 0ll 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
NickWelder Опубликовано 3 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 мая, 2014 По поводу 2 ордеров в год - посмотри дату открытия и закрытия, походу сделка висит и не закрывается. Вы правы, сделка Sell висит и не хочет закрываться. Ссылка на сообщение Поделиться на другие сайты More sharing options...
emelenium@gmail.com Опубликовано 3 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 мая, 2014 Подскажите есть у кого-нибудь рабочий пример работы функции CreateFile (win32) в советнике МТ4? Ссылка на сообщение Поделиться на другие сайты More sharing options...
denkudo Опубликовано 4 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2014 Всех с праздниками! Люди помогите понять в уроке №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 пунктом: "при написании первого скрипта в данном видео-уроке была заведомо допущена ошибка, которая может привести к его некорректной работе. Найдите её и предложите своё решение."Где в видео-уроке допущена ошибка? Изменено 5 мая, 2014 пользователем denkudo Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 4 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2014 Ребята, вы на форексе, а не в школе.Здесь списывать нельзя.Способен - выживешь и заработаешь.Не способен сам разобраться и сделать хоть что-то на форексе, оставайся с 99% обычных людей, не мучь себя и семью. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 5 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2014 тоесть 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 Ссылка на сообщение Поделиться на другие сайты More sharing options...
denkudo Опубликовано 5 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2014 тоесть 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 странице. Но я ошибки там не вижу. И работает он отлично. Не понимаю в чем загвоздка. Ссылка на сообщение Поделиться на другие сайты More sharing options...
nixxer Опубликовано 5 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2014 Подскажите есть у кого-нибудь рабочий пример работы функции 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.aspxhttp://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 Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 5 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2014 Опубликован новый урок по MQL :http://tradelikeapro.ru/money-management-mql/ 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Flightman Опубликовано 7 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 мая, 2014 Уважаемые Коллеги!Поведайте как правильно прочитать и вытащить данные из файла *.csv.В частности нужна дата и время, всё!Почитал справку по функции FileReadDatetime(). В толк не возьму как определить размер массива (если он вообще нужен), т.е. кол-во строк, т.к. файл будет обновляться всякий раз при добавлении новых событий.xbms, Сергей, по-моему, дайте намек как правильно оформить это мероприятие! Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 мая, 2014 Поведайте как правильно прочитать и вытащить данные из файла *.csv.В частности нужна дата и время, всё!Почитал справку по функции FileReadDatetime().У Вас МТ 600+?Читать из файла нужно все поля. Я это делаю в строковый массив с размерностью = кол-ву полей в .csvЗатем берем нужное поле из массива и, в зависимости от формата даты/времени в исходном .csv-файле, преобразуем его во внутренний формат МТ с помощью встроенной функции либо врукопашную.Если грузить весь файл в массив, то я сохраняю размер файла и файловый указатель и периодически отслеживаю. Если размер файла изменился, то открываем и продолжаем читать начиная с сохраненной позиции указателя. В общем алгоритмов может быть много - зависит от задач, частоты событий, необходимости сортировки и т.д. Изменено 7 мая, 2014 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
Flightman Опубликовано 7 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 мая, 2014 Поведайте как правильно прочитать и вытащить данные из файла *.csv.В частности нужна дата и время, всё!Почитал справку по функции FileReadDatetime().У Вас МТ 600+?Читать из файла нужно все поля. Я это делаю в строковый массив с размерностью = кол-ву полей в .csvЗатем берем нужное поле из массива и, в зависимости от формата даты/времени в исходном .csv-файле, преобразуем его во внутренний формат МТ с помощью встроенной функции либо врукопашную.Если грузить весь файл в массив, то я сохраняю размер файла и файловый указатель и периодически отслеживаю. Если размер файла изменился, то открываем и продолжаем читать начиная с сохраненной позиции указателя. В общем алгоритмов может быть много - зависит от задач, частоты событий, необходимости сортировки и т.д. Да, билд 625. Все дело в том, что я ни разу не работал с файлами, представления не имею с чего начать. А поле в таблице одно и определенное кол-во строк, количество которых меняется раз в неделю. В строки выведены через зпт. "Дата Время", "Текст". Моя задача взять Дату время и сравнить с текущим терминальным. Если дословно, то это *.csv календаря событий от FXStreet. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 мая, 2014 Да, билд 625. Все дело в том, что я ни разу не работал с файлами, представления не имею с чего начать. А поле в таблице одно и определенное кол-во строк, количество которых меняется раз в неделю. В строки выведены через зпт. "Дата Время", "Текст". Моя задача взять Дату время и сравнить с текущим терминальным. Если дословно, то это *.csv календаря событий от FXStreet.Ну так бы и сразу писали. Для работы по событиям календаря есть куча советников. Если Вы знаете MQL то не составит труда разобраться. Почитайте эти ссылки и если что - задавайте вопросы. (Там как-раз и отражены приемы работы с .csv файлами)http://articles.mql4.com/ru/520http://www.mql5.com/en/code/8491 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 8 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2014 Здравствуйте господа подскажите пожалуйста как открыть одновременно сделки допустим по 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; }}Что дальше со всем этим делать подскажите пожалуйста ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2014 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); //например} Ссылка на сообщение Поделиться на другие сайты More sharing options...
SpyRF Опубликовано 8 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2014 Ребят, подскажите как прописать функцию, чтобы советник выполнял определенные проверки на каждом баре. Или что-то типа if (NewBar() = true) {} //-------- int NewBar() и погнали вычислять новый бар. А еще как от iCustom передать значение iClose (или что-то, что содержало бы цену закрытия бара). Спасибо. Изменено 8 мая, 2014 пользователем SpyRF Ссылка на сообщение Поделиться на другие сайты More sharing options...
С_е_р_г_у_й Опубликовано 8 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2014 Всем привет, подскажите, как записать функцию для закрытия последнего и первого ордеров, при открытых более трех ордеров в одном направлении Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2014 Ребят, подскажите как прописать функцию, чтобы советник выполнял определенные проверки на каждом баре. Или что-то типа if (NewBar() = true) {} //-------- int NewBar() и погнали вычислять новый бар. А еще как от iCustom передать значение iClose (или что-то, что содержало бы цену закрытия бара). Спасибо.Новый бар: static datetime new_Bar = 0; if (new_Bar != Time[0]) { new_Bar = Time[0]; ... }(вообще-то полно информации - можно и самому найти) Про iCustom и iClose - не понял.Всем привет, подскажите, как записать функцию для закрытия последнего и первого ордеров, при открытых более трех ордеров в одном направленииЭто смотря что Вы имеете в виду под первым и последним - время открытия или цену. В любом случае, чтобы сделать правильно, нужно загнать ордера в массив, отсортировать по нужной характеристике (цена, время или тикет), а потом просто удалить из 0 и последней ячейки массива. Ссылка на сообщение Поделиться на другие сайты More sharing options...
SpyRF Опубликовано 8 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2014 Ребят, подскажите как прописать функцию, чтобы советник выполнял определенные проверки на каждом баре. Или что-то типа if (NewBar() = true) {} //-------- int NewBar() и погнали вычислять новый бар. А еще как от iCustom передать значение iClose (или что-то, что содержало бы цену закрытия бара). Спасибо.Новый бар: static datetime new_Bar = 0; if (new_Bar != Time[0]) { new_Bar = Time[0]; ... }(вообще-то полно информации - можно и самому найти) Про iCustom и iClose - не понял.Спасибо и прошу прощения "утонул" я во всей этой инфе. Относительно iCustom: получаем сигнал от индикатора, хочу этот сигнал привязать к цене закрытия бара, на котором этот сигнал был получен. Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 8 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2014 Дружище 0ll я пока хотел написать для скрипта,что бы открывал 2,3 или больше пар.По ходу изучать массивы,как они работают. Потом эту функцию в советнике я думаю можно будет использовать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2014 Относительно iCustom: получаем сигнал от индикатора, хочу этот сигнал привязать к цене закрытия бара, на котором этот сигнал был получен.У iClose и iCustom последний параметр вызова одинаковый - shift - это и есть номер бара которому соответствует возвращаемое значение. (У Вас индюки на одном таймфрейме работают?)denis77515 - ОК. Ссылка на сообщение Поделиться на другие сайты More sharing options...
С_е_р_г_у_й Опубликовано 8 мая, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2014 Всем привет, подскажите, как записать функцию для закрытия последнего и первого ордеров, при открытых более трех ордеров в одном направленииЭто смотря что Вы имеете в виду под первым и последним - время открытия или цену. В любом случае, чтобы сделать правильно, нужно загнать ордера в массив, отсортировать по нужной характеристике (цена, время или тикет), а потом просто удалить из 0 и последней ячейки массива.OLL Допустим по БАЙтикет через цикл for(i=0; i Изменено 8 мая, 2014 пользователем С_е_р_г_у_й Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти