mark4431 Опубликовано 19 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 августа, 2015 mark4431 эта торговая панель по сути - обычный советник, поэтому можно пихать туда всё, что угодно (всё, что понапихано в другие советники). Ништяк! Спасибо! Буду изучать "работу с кнопками" \M/Добавлено: 19-08-2015 17:29:46Пишу сеточник, при выставлении неограниченного числа ордеров, в конце выскакивает ошибка 4107, при этом ордера ставятся как положено и все значения нормализованы, есть предположение, что это из-за границ графика. Подскажите как ограничить выставление отложек макс и мин значениями графика, точнее как получить эти значения, например как с лотом "MarketInfo(Symbol(),MODE_MAXLOT)"? Или может есть другие предположения по данной ошибке?И еще в журнале периодически бывает "1.#INF" Изменено 19 августа, 2015 пользователем mark4431 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 августа, 2015 mark4431 это не из-за границ графика. Перед ОрдерСэнд() вставьте принт со всеми параметрами ордера и потом по логам изучайте.Такого "1.#INF" мне не встречалось... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
mark4431 Опубликовано 21 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 августа, 2015 mark4431 это не из-за границ графика. Перед ОрдерСэнд() вставьте принт со всеми параметрами ордера и потом по логам изучайте.Такого "1.#INF" мне не встречалось... Ок. Спасибо, будем разбираться)Добавлено: 21-08-2015 18:56:50Ребят, подскажите пожалуйста, как реализовать функцию, чтобы выводилось в журнал последнее максимальное значение AccountProfit(). Т.е. например, было 1000$, открыли сделки, профит вышел к 120и и затем откатил на 105, как реализовать чтобы после n-го условия вышел принт 120. Закрылись-обнулились, открылись-повтор. Изменено 21 августа, 2015 пользователем mark4431 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Mezon Опубликовано 22 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 августа, 2015 JR, Konstebl, mark4431, 0ll спасибо за коменты (форум живой).Книгу я читал несколько раз "Учебник по MQL 4" автор Сергей Ковалёв, а так же все найденные в интернете книги, брошюры и видео по данной теме, очень надеялся что видео поможет как нибудь понять что написано в книгах - результат 0. Шуточки что это не мое это не ко мне : ). Точно знаю что перепишу всех программистов но меня этому нужно научить. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 22 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 августа, 2015 mark4431 что-то Вы очень простые вещи спрашиваете...1. введите переменную и в ините или при открытии первого ордера (я не понял Вашего замысла): Мах_Эквити = АккЭквити()2. если (АккЭквити() > Мах_Эквити) Мах_Эквити = АккЭквити()Вот у Вас есть мах эквити - делайте что хотите. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 23 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 августа, 2015 Подскажите, как правильно задать выполнение одного из двух условий. open1 = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits); open2 = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits); close1 = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits); close2 = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits); low1 = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits); low2 = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits); high1 = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits); high2 = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits);if (open2 > close2 && close1 > open1 && open2 > close1 && close2 if (close2 > open2 && open1 > close1 && close2 > open1 && open2 Сравниваю 2 свечи, нужно, чтобы при совпадении одного из If продолжилось выполнение действия. Как я понимаю через || это не сделать Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 августа, 2015 Rever27 почему через или не сделать? - делай. только 1 и 2 условие: if ( (1) || (2) ) { ... } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 24 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 августа, 2015 Rever27 почему через или не сделать? - делай. только 1 и 2 условие: if ( (1) || (2) ) { ... } Вот вчера так и делал - писал предупреждение. Сегодня сделал - все заработало, мистика ))Народ, возможно, этот вопрос уже задавался тут сто раз, но подскажите сайты, где есть подробные уроки MQL для чайников, без видео, достаточно текста и доступного описания. Пол года назад пытался выучить MQL, так и не вышло, зато взамен выучил VBA для Excel, хоть опыт в программировании получил, теперь попытка №2 ) Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 29 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 августа, 2015 Парни, хочу уточнить такой нубский момент:MarketInfo(Symbol(), MODE_STOPLEVEL) - Минимально допустимый уровень стоп-лосса/тейк-профита в пунктахЭто уровень от текущей цены или от открытого ордера? Вроде на открытом ордере, если цена не не мешает мы можем любые значения стоплосса ставить, хоть по цене открытия, правильно? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 августа, 2015 JR от текущей цены. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 31 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 августа, 2015 Еще вопрос: что за природа ошибки Invalid slippage for OrderSend function? Возникает периодически, непонятно отчего. Slippage у меня в данном случае равен 3п (старыми), тип int. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 31 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 августа, 2015 Подскажите.Использую такую конструкцию, чтобы выполнять дальнейшие действия только 1 раз за бар, не мучая Эксперта каждый тик: if (timeBarInside == iTime(Symbol(),Period(),1)) return; Как мне написать доп. условие, чтобы дальнейшие действия повторялись не раньше, чем через 10 секунд? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 31 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 августа, 2015 JR впервые узнал о такой ошибке... понятия не имею что не так...Rever27 старайся не использовать функции типа iTime(Symbol(),Period(),1), лучше просто Time[1]функция таймера:bool f_TimeChange(int dSek){ static datetime last_DT; if (last_DT > TimeCurrent() - dSek) return(false); last_DT = TimeCurrent(); return(true);} Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 31 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 августа, 2015 Rever27 старайся не использовать функции типа iTime(Symbol(),Period(),1), лучше просто Time[1] Кстати, почему? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 31 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 августа, 2015 Rever27 старайся не использовать функции типа iTime(Symbol(),Period(),1), лучше просто Time[1]функция таймера: Сделал, вроде работает )if (timeBarInside == Time[1]) return; timeBarInside = Time[1]; Цитата bool f_TimeChange(int dSek){ static datetime last_DT; if (last_DT > TimeCurrent() - dSek) return(false); last_DT = TimeCurrent(); return(true);} Для самых тугих, можно написать пример запуска этой функции, где dSek указывать? ) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 31 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 августа, 2015 Rever27 старайся не использовать функции типа iTime(Symbol(),Period(),1), лучше просто Time[1]Кстати, почему?Как я понял эти функции берут инфу из разных источников. Попадающие в МТ тики формируют свечи текущего ТФ в массиве в оперативке - это Time[х], а потом МТ сбрасывает массивы в базу котировок на диск, а iTime() читает с диска. Всё имхо...Rever27 то, что Вы сделали будет работать по открытию бара. Моя ф-ция будет работать по секундам. Использовать:if ( f_TimeChange(10) ) //- для 10 секунд.{ ... код исполняемый 1/10 сек.} Изменено 31 августа, 2015 пользователем 0ll 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 31 августа, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 августа, 2015 При timeBarInside == Time[1];, если тестируешь с даты самого начала котировок, то терминал выдает критическую ошибку EA, ибо нет бара до текущего. Как я понимаю, я могу и Time[0] писать, разницы то нет, все равно 1 раз в бар будет выполняться действие?С 10 секундами я погорячился, f_TimeChange(60) работает отлично, чаще и не нужно нагружать терминал. Благодарю Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 1 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 сентября, 2015 Rever27 можно Time[0], но в любом случае нельзя тестировать с самого начала котировок - ибо для работы индюков тоже нужна история... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Robin Hood Опубликовано 2 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 сентября, 2015 Приветствую! Есть ли такая функция которая позволяет не округлять а отбрасывать часть знаков после запятой? Или есть способ это как то реализовать? Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 2 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 сентября, 2015 Так а NormalizeDouble чем не годится? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 сентября, 2015 Есть ли такая функция которая позволяет не округлять а отбрасывать часть знаков после запятой? Или есть способ это как то реализовать?Правильно сделать так, как написал JR, но можно и так:double x = 123,456;int y = (int)x; // результат: y = 123 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 2 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 сентября, 2015 Хочу еще раз поднять вопрос по ошибке Invalid slippage for OrderSend function, которую отдавал сервер при попытке открыть ордер. Я так и не понял ее природу, а когда я не могу до конца разобраться, я остаюсь неудовлетворен :)Собственно изначально у меня стоял slippage равный 3 старым пунктам (тип Int), для 5-ти знака шел пересчет с умножением на 10. Ставлю сову на демо счет робофорекса (5-ти знак) - периодически вылазит данная ошибка. Не системно, как попало - то открывает ордера, то нет. Увеличил slippage до 4-х, потом до 5-ти пунктов, не помогло. Я уже даже в поддержку робо написал, может у них ограничения какие - но там отморозились.Потом поставил slippage обратно в 3п и... убрал умножение на 10 для 5-ти знака. Странно, но с таким параметром пока работает без ошибок, наблюдаю дальше.Собственно вопрос - а надо ли slippage для 5-ти знака умножать на 10? И какие вообще оптимальные значения для этого параметра и как их вычислять.З.Ы. В гугле по ошибке Invalid slippage for OrderSend function практически нет результатов, а те что есть - ответа не дают. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 сентября, 2015 JR имхо причуды брокера, или что-то с типом/умножением не так... Ваш "тип Int" вместо "тип int" как-то подозрительно выглядит... Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 3 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 сентября, 2015 Ваш "тип Int" вместо "тип int" как-то подозрительно выглядит... Сорри, привычка все писать с заглавной :) Там все просто было:int Slippage = 3;if (Digits == 3 || Digits == 5) {Slippage *= 10;} 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 сентября, 2015 JR по коду замечаний нет. В своих ботах 4-5 знак не перевожу (из принципа - считаю не своим делом), слиппаж у меня почти всегда = 20, на робо счетов нет, ошибок не было... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти