gosha342 Опубликовано 10 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2017 Посмотрел исправленный код, небо и земля. Есть чему поучится. Спасибо. Изменено 10 июля, 2017 пользователем gosha342 Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 10 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2017 Посмотрел исправленный код, небо и земля. Есть чему поучится. Спасибо. я ничего не менял... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
gosha342 Опубликовано 10 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2017 DoubleToStr Вот этого не было. Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 10 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2017 DoubleToStr Вот этого не было. Да это просто посмотреть в журнале, какие цены сравниваются. На работу никак не влияет...Ну нет в MQL другого дебагера >:d Ссылка на сообщение Поделиться на другие сайты More sharing options...
gosha342 Опубликовано 10 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2017 У меня появился вопрос общего характера. Вот я к примеру пишу любой код.extern int Slippage=3;extern int MaPeriod=21;extern int MaShift =3;extern int TrailingStop= 30;И иногда одно слово не меняет свой цвет на красный. Я знаю, что это ошибка, но почему она возникает, так я и не понял. Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 10 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2017 У меня появился вопрос общего характера. Вот я к примеру пишу любой код.extern int Slippage=3;extern int MaPeriod=21;extern int MaShift =3;extern int TrailingStop= 30;И иногда одно слово не меняет свой цвет на красный. Я знаю, что это ошибка, но почему она возникает, так я и не понял.по-идее ошибку компиляция покажет.. может, зарезервированное слово? Ссылка на сообщение Поделиться на другие сайты More sharing options...
gosha342 Опубликовано 10 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2017 Да в том и дело, что при компиляции ошибка выйдет и даже не одна. А такая фигня может быть в любом месте когда прописываю параметры,а самое главное, это может быть любое слово (Magic, StopLoss и т.д.). Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 10 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2017 Да в том и дело, что при компиляции ошибка выйдет и даже не одна. А такая фигня может быть в любом месте когда прописываю параметры,а самое главное, это может быть любое слово (Magic, StopLoss и т.д.). Так при компиляции пишет, какая ошибка... Еще MQL чувствителен к регистру знаков. Может, объявляете одну и ту же переменную в разных местах....Смотреть надо в конкретном случае-что.. Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 11 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 июля, 2017 Только зачем это? Спасибо, задача состоит в том чтобы робот отслеживал сигнал каждый новый день, и если ордер открыт он его контролирует только в день открытия, на след. день он ищет вход для нового ордера и тд Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 11 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 июля, 2017 Viktor M. БУ сетки это уровень, при достижении которого ценой, суммарный PL сетки = 0. Отсюда легко посчитать прибыль.БУ = Сумма ( Цена_ордера * лот_ордера ) / Сумма ( лот_ордера ). Суммы вычисляются в цикле по всем ордерам сетки - там, где Вы считаете количество ордеров добавляется 2 строчки:SumLotPrice += OrderLots() * OrderOpenPrice();SumLot += OrderLots();После цикла вычисляем БУ сетки: gridBUprc = SumLotPrice / SumLot;Данный расчёт нужно делать при изменении количества открытых ордеров (на каждом тике делать не надо). Расчёт будет учитывать даже ордера открытые или закрытые вручную (если с магиком). Ссылка на сообщение Поделиться на другие сайты More sharing options...
Strong-Tezis Опубликовано 12 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 июля, 2017 _ -Volume_Custome_2xMA.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 13 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июля, 2017 Добрый день.Возник вопрос с iCustom?Есть индикатор FL11, как правильно записать параметры iCustom, чтобы красное/синее "солнышко", можно было использовать как фильтр для входа? uptr = iCustom(NULL, 0, "FL11", 4, 0); dntr = iCustom(NULL, 0, "FL11", 5, 0);потомbool UP_Trend(){ if(uptr > 0 && uptr != 2147483647.0) return(true); return(false);}bool DN_Trend(){ if(dntr > 0 && dntr != 2147483647.0) return(true); return(false);}потом условие if( DN_Trend()==true)........................ FL11.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июля, 2017 d1w4m3 Параметры индикатора (все extern) пишутся подряд после названия iCustom(NULL, 0, "FL11", ....... , 4, 0); , строго в порядке их объявления в индикаторе. Если не все параметры хотите писать, то тут правило такое: например из 10 параметров записали первые 4 - значит остальные принимают значение по умолчанию. Не по порядку - нельзя. ПС: Этот индикатор может перерисовывать (изменять свои значения), так что аккуратнее с ним. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 13 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июля, 2017 Спасибо уяснил \M/Запутался еще в одном деле, закрытие частично ордера по профиту: if ( CountSell()>0) { for(int i = OrdersTotal() -1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { Price = NormalizeDouble(OrderOpenPrice(),Digits); if (OrderMagicNumber() == Magic && OrderType() == OP_SELL && NormalizeDouble(Ask+Profit*Point,Digits) if(!OrderClose(OrderTicket(), closeLots, Bid, Slippage, Black)) Print("Ошибка"); } } }где ордер открыт Lots=0,3 closeLots=0.1 Закрывает весь ордер? Добавлено: 13-07-2017 10:30:25Увидел проблему((он закрывает 3 раза по 0.1, только понять как избежать этого не догоняю((или надо отдохнуть Изменено 13 июля, 2017 пользователем d1w4m3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июля, 2017 Увидел проблему((он закрывает 3 раза по 0.1, только понять как избежать этого не догоняю((или надо отдохнуть После частичного закрытия нужно увеличить Profit для оставшегося ордера, да и подтянуть СЛ не помешает... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Viktor M. Опубликовано 13 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июля, 2017 0ll спасибо за подсказки. Буду мучить компилятор - не боги ж горшки обжигают? Не солидно как-то. Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 13 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июля, 2017 Увидел проблему((он закрывает 3 раза по 0.1, только понять как избежать этого не догоняю((или надо отдохнуть После частичного закрытия нужно увеличить Profit для оставшегося ордера, да и подтянуть СЛ не помешает... Извиняюсь, но нельзя ли мне как тугодуму объяснить, где тут покопать, а где тут просверлить ^:)^)))а то что то совсем заплутал Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 13 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июля, 2017 У меня появился вопрос общего характера. Вот я к примеру пишу любой код.extern int Slippage=3;extern int MaPeriod=21;extern int MaShift =3;extern int TrailingStop= 30;И иногда одно слово не меняет свой цвет на красный. Я знаю, что это ошибка, но почему она возникает, так я и не понял. Конкретно в этом куске ошибок нет. Возможно, в последующем, когда Вы используете эти объявленные переменные в коде и путаете тип данных (объявлен как int, а используете как double), то редактор может не подсвечивать такие переменные. Ну или банальная опечатка. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июля, 2017 Увидел проблему((он закрывает 3 раза по 0.1, только понять как избежать этого не догоняю((или надо отдохнуть После частичного закрытия нужно увеличить Profit для оставшегося ордера, да и подтянуть СЛ не помешает...Извиняюсь, но нельзя ли мне как тугодуму объяснить, где тут покопать, а где тут просверлить ^:)^)))а то что то совсем заплуталВ вашем коде есть условие выбора ордера:if (OrderMagicNumber() == Magic && OrderType() == OP_SELL && NormalizeDouble(Ask+Profit*Point,Digits)в условии есть дистанция Profit. За первый проход цикла все ордера частично закрываются, но на следующем проходе цикла словие срабатывает снова и за 3 приёма закрывает всё. Чтоб работало корректно, после первого прохода надо увеличивать ожидаемый профит у оставшейся части ордеров - либо Profit, либо пересчитать Price.Viktor M. почитайте эту тему Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 14 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 июля, 2017 Спасибо, но это я понимаю, вопрос в том?Мне опять надо открывать цикл после функции OrderClose()?Чтобы найти получившийся ордер или тикет сохраняется? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 14 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 июля, 2017 Спасибо, но это я понимаю, вопрос в том?Мне опять надо открывать цикл после функции OrderClose()?Чтобы найти получившийся ордер или тикет сохраняется?Тикет меняется, а зачем искать получившийся ордер? Вы в цикле частично закрываете все ордера по выбранному направлению, после цикла меняете цель профита и всё. Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 14 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 июля, 2017 Спасибо, но это я понимаю, вопрос в том?Мне опять надо открывать цикл после функции OrderClose()?Чтобы найти получившийся ордер или тикет сохраняется?Тикет меняется, а зачем искать получившийся ордер? Вы в цикле частично закрываете все ордера по выбранному направлению, после цикла меняете цель профита и всё. if ( CountSell()>0 && NormalizeDouble(Ask+Profit*Point,Digits) { for(int i = OrdersTotal() -1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == Magic && OrderType() == OP_SELL ) if(OrderClose(OrderTicket(), closeLots, Bid, Slippage, Black)) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice()+SL, OrderOpenPrice()-TP1, 0)) Print("Ошибка "); } } } }Что то я упускаю походу(( Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 14 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 июля, 2017 Что то я упускаю походу((Там где OrderModify меняйте условие выбора ордеров, т.е. переменные Profit или Price!!! - эти переменные отвечают за отработку условия частичного закрытия, я не знаю как они вычисляются, но их надо менять!ПС: задавайте новый ТП и СЛ от текущей цены! а то приведёт к ошибке! Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 14 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 июля, 2017 if ( CountSell()>0 && NormalizeDouble(Ask+Profit*Point,Digits) { for(int i = OrdersTotal() -1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == Magic && OrderType() == OP_SELL ) if(OrderClose(OrderTicket(), closeLots, Bid, Slippage, Black)) Price = NormalizeDouble(OrderOpenPrice(),Digits)-NormalizeDouble(Ask+Profit*Point,Digits); { if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Price-TP, 0)) Print("Ошибка "); } } } }Спасибо :d Ссылка на сообщение Поделиться на другие сайты More sharing options...
uln2006 Опубликовано 14 июля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 июля, 2017 Уважаемые Гуру MQL! Помогите пожалуйста вшить в советник работу в определенный день недели!. Например: понедельник -1, вторник-2, среда-3 и т.д. Благодарю за помощь! Exp_Ex-_Открытие_позиций_по_времени.ex4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти