djnet Опубликовано 26 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 26 июня, 2018 на офигенном компе БК-0010-01Ба! Коллега! Тоже начинал с этого...Насчёт массивов Вы не правы - это просто указатели на место в памяти с данными.Почему удобно их пользовать?:У Вас есть функция вычисляющая направление входа, Вы его заранее не знаете.и есть проверка на наличие ордеров. Для Вашего решения надо в зависимости от направления выбирать переменную с кол-вом ордеров, типаесли new_dir == OP_BUY то count_BUY и так же для селл - так значительно больше операций получается.в моём примере достаточно count[new_dir] - и вы сразу получаете кол-во ордеров, в общем рекомендую попробовать Я правильно понимаю что значения по енуму в числовом эквиваленте идут от нуля до 8 по принципу как в mql4?Тоесть:ORDER_TYPE_BUY 0 POSITION_TYPE_BUYORDER_TYPE_SELL 1 POSITION_TYPE_SELLORDER_TYPE_BUY_LIMIT 2ORDER_TYPE_SELL_LIMIT 3ORDER_TYPE_BUY_STOP 4 ORDER_TYPE_SELL_STOP 5ORDER_TYPE_BUY_STOP_LIMIT 6ORDER_TYPE_SELL_STOP_LIMIT 7ORDER_TYPE_CLOSE_BY 8точнее даже ордера могут иметь значения 2-8, а позиции 0 и 1. и считать их нужно перебирая позиции и ордера отдельно Изменено 26 июня, 2018 пользователем djnet Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 26 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 26 июня, 2018 точнее даже ордера могут иметь значения 2-8, а позиции 0 и 1. и считать их нужно перебирая позиции и ордера отдельноя не разделяю - смысла нет. сделал универсальную функцию и посчитал всё. если не используются ордера, то 0 будут в ячейке массива. Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 26 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 26 июня, 2018 я не разделяю - смысла нет. сделал универсальную функцию и посчитал всё. если не используются ордера, то 0 будут в ячейке массива. а у меня не получилось, все вроде верно, ошибок нет, но не считает вообще. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 26 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 26 июня, 2018 Код покажи. А ордера были? Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 26 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 26 июня, 2018 Код покажи. А ордера были? Спойлер int op_count[9];void OnTick() CountTrades(); //считаем открытые ордера BarsTyps(); if(UseMartin)//сопровождение позиций мартингейлом { if(op_count[POSITION_TYPE_BUY]>=1) { блаблабла }void CountTrades() { count_buy=0; count_buyst=0; count_buylim=0; count_sell=0; count_sellst=0; count_selllim=0; int aTotal=PositionsTotal(); ulong aTicket; long aMagic; string aSymbol; for(int i=0; i { aTicket = PositionGetTicket(i); aSymbol = PositionGetString(POSITION_SYMBOL); ENUM_POSITION_TYPE aType=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); aMagic=PositionGetInteger(POSITION_MAGIC); if(aSymbol==_Symbol && aMagic==m_magic) { op_count[(int)aType]++; } } } Позиции были, причем если перебирать aType через switch, то все пучком считается, если вывести aType в журнал то видно что там 0 или 1 в зависимости от позиции, а вот если вывести в журнал arrayprint op_count после записи aType в массив то там все позиции по нулям. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 26 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 26 июня, 2018 Вроде всё правильно, надо только обнулить массив перед циклом - ArrayFill()надо принты ставить - выяснить где счет теряется... Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 27 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 27 июня, 2018 Вроде всё правильно, надо только обнулить массив перед циклом - ArrayFill()надо принты ставить - выяснить где счет теряется... Все косяк найден, код верный, в тестере тестилась другая версия совы, а там были ошибки, не обратил внимания какая версия была выбрана. =)) =)) =))поубирал все лишнее, причесал, получилось вот так: Спойлер void CountTrades() { ArrayFill(op_count,0,9,0); ulong aTicket; for(int i=0; i { aTicket=PositionGetTicket(i); if(PositionGetString(POSITION_SYMBOL)==_Symbol && PositionGetInteger(POSITION_MAGIC)==m_magic) { ENUM_POSITION_TYPE aType=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); op_count[(int)aType]++; } } } 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 19 июля, 2018 Автор Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 19 июля, 2018 Новый урок:http://tradelikeapro.ru/mql5-pishem-multivalyutnyiy-ea/ 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Logic Опубликовано 28 июля, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 28 июля, 2018 В настоящий момент мы записываем цикл уроков по MQL5, пока доступны уроки:MQL5: Работа с ордерамиMQL5: Пишем первый советник Доброе утро, скажите плиз, такое хорошее начинание нашло продолжение ??? Возможно я где-то упустил, но полноценных уроков (как Вы умеете) по MQL5, в продолжение этой темы, я так и не нашел. Если они существуют, подкиньте ссылку плиз. Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 28 июля, 2018 Автор Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 28 июля, 2018 19 июля крайний урок выложен. Следующий - в сентябре Ссылка на сообщение Поделиться на другие сайты More sharing options...
Logic Опубликовано 28 июля, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 28 июля, 2018 Добрый вечер, извините я видимо не очень точно спросил. Выложенные уроки все просмотрены, проштудированы и осваиваются. Огромное спасибо за Ваш труд.В вопросе постом выше я хотел узнать будут ли подборки типа "форекс для чайников", "MQL програмирование курс молодого бойца" и тд., только заточенные под MQL5 ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 28 июля, 2018 Автор Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 28 июля, 2018 Добрый вечер, извините я видимо не очень точно спросил. Выложенные уроки все просмотрены, проштудированы и осваиваются. Огромное спасибо за Ваш труд.В вопросе постом выше я хотел узнать будут ли подборки типа "форекс для чайников", "MQL програмирование курс молодого бойца" и тд., только заточенные под MQL5 ? Когда наберется чуть больше уроков Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 6 августа, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 6 августа, 2018 Я тут решил в рамках собственного развития в mql5 переписать сову по спрингу версии 8.25 под пятый метак, заодно ее там тоже потестить ну и от себя что то добавить. Так вот собственно вопросы:Если я ее тут буду по частям выкладывать и задавать глупые вопросы (ну или умные) никто не будет против?Если потом выложу готовую версию никто не надает мне по попе?:) Все таки большой труд группы людей.... Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 6 августа, 2018 Автор Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 6 августа, 2018 Я тут решил в рамках собственного развития в mql5 переписать сову по спрингу версии 8.25 под пятый метак, заодно ее там тоже потестить ну и от себя что то добавить. Так вот собственно вопросы:Если я ее тут буду по частям выкладывать и задавать глупые вопросы (ну или умные) никто не будет против?Если потом выложу готовую версию никто не надает мне по попе?:) Все таки большой труд группы людей.... Имхо, готовую версию в топик совы, в первом посте сделаем ссылку. Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 7 августа, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 7 августа, 2018 Созрел первый вопрос:есть в сове по спрингу функция Get_Week_StartBar()собственно в оригинале выглядит так: Спойлер int Get_Week_StartBar(int Shift=1) { Shift--; bool res=true; int i=(Shift*PERIOD_D1*5+PERIOD_D1 *(TimeDayOfWeek(Time[0])+3))/_Period;//(TimeDayOfWeek (Time[0])+4)/_Period -720/_Period-1; while(Time); i-=PERIOD_D1/_Period;}//если на стартовом баре нет котировок, то смещаем его на сутки while(res) { i++; if(TimeDayOfWeek(Time)==1 && TimeDayOfWeek(Time[i+1])!=1) res=false; } return(i); } Что делает понятно, ищет первый бар текущего таймфрема предыдущей недели. В mql5 так не сделать, поэтому вот мой вариант: Спойлер int Get_Week_StartBar(int Shift=1) { bool res=true; MqlDateTime dt0,dt1; datetime d0=iTime(_Symbol,0,i); TimeToStruct(d0,dt0); int curdayofweek=dt0.day_of_week; //текущий день недели int curdayofyear=dt0.day_of_year; //текущий день года int daytostruct=4+curdayofweek; dt0.day_of_year=dt0.day_of_year-daytostruct; //вычитаем 4 дня от текущего datetime d0=StructToTime(dt0); int i=iBarShift(_Symbol,PERIOD_CURRENT,d0,false); if(i { Print(__FUNCTION__,"Ошибка получения индекса бара"); return(i); } while(res) { i++; MqlDateTime dt0,dt1; datetime d0=iTime(_Symbol,0,i); datetime d1=iTime(_Symbol,0,i+1); TimeToStruct(d0,dt0); TimeToStruct(d1,dt1); if(dto.day_of_week==1 && dt1.day_of_week!=1)res=false; } return(i); } Не могу быть уверенным, что это самый подходящий вариант. Или норм? Или не будет работать? Вообщем критику пожалуйста :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 7 августа, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 7 августа, 2018 Я тут решил в рамках собственного развития в mql5 переписать сову по спрингу версии 8.25 под пятый метак, заодно ее там тоже потестить ну и от себя что то добавить. По мне так не очень удачный выбор исходника. Коль уж делать на MQL5, так что нибудь требующее МТФ и/или мультивалютное, то, что не реализуемо на mql4.И конкретно Spring 8.хх содержит неудачные идеи, в частности, динамический расчет контрольной свечи. Этот блок точно нужно переосмысливать... Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 7 августа, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 7 августа, 2018 Я тут решил в рамках собственного развития в mql5 переписать сову по спрингу версии 8.25 под пятый метак, заодно ее там тоже потестить ну и от себя что то добавить. По мне так не очень удачный выбор исходника. Коль уж делать на MQL5, так что нибудь требующее МТФ и/или мультивалютное, то, что не реализуемо на mql4.И конкретно Spring 8.хх содержит неудачные идеи, в частности, динамический расчет контрольной свечи. Этот блок точно нужно переосмысливать... Ну, выбор уже сделан, и работа пошла, не вижу смысла бросать. Да и начинать надо с вещей попроще. Переписываю функции, весьма полезное занятие. До динамического расчета еще не добрался. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 августа, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 8 августа, 2018 Вы определяете переменные d0 - 3 раза и d1 - 2 раза. Будет ошибка.в начале функции datetime d0=iTime(_Symbol,0,i); - i не определеноСама логика не универсальна и будет привязана к гмт-оффсету брокера. Если так и задумано - ОК. Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 8 августа, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 8 августа, 2018 Вы определяете переменные d0 - 3 раза и d1 - 2 раза. Будет ошибка.в начале функции datetime d0=iTime(_Symbol,0,i); - i не определеноСама логика не универсальна и будет привязана к гмт-оффсету брокера. Если так и задумано - ОК. Согласен, копипаст это зло))) i в начале тоже лишнее, там просто 0. Насчет не универсальности и привязки можно поподробнее?, я не поймал суть мысли. Можете свой вариант набросать? С пояснениями. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 августа, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 8 августа, 2018 Сама логика не универсальна и будет привязана к гмт-оффсету брокера. Если так и задумано - ОК. Насчет не универсальности и привязки можно поподробнее?, я не поймал суть мысли. Можете свой вариант набросать? С пояснениями. Вдумайтесь когда выдаст тру данное условие: if(dto.day_of_week==1 && dt1.day_of_week!=1)?day_of_week меняет значение в 00:00:00 по времени брокера! - значит и код Ваш зависит от оффсета.Когда делал сову по Ва-банку заметил, что практически все брокеры начинают торги одновременно, но время у всех может быть своё. Если торги начнутся в воскресенье, то Ваша функция всё-равно выдаст 1 бар понедельника, часа через 2 после начала торгов, а у другого брокера всё будет правильно.Ещё я фильтровал дыры в котировках. Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 8 августа, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 8 августа, 2018 Сама логика не универсальна и будет привязана к гмт-оффсету брокера. Если так и задумано - ОК. Насчет не универсальности и привязки можно поподробнее?, я не поймал суть мысли. Можете свой вариант набросать? С пояснениями. Вдумайтесь когда выдаст тру данное условие: if(dto.day_of_week==1 && dt1.day_of_week!=1)?day_of_week меняет значение в 00:00:00 по времени брокера! - значит и код Ваш зависит от оффсета.Когда делал сову по Ва-банку заметил, что практически все брокеры начинают торги одновременно, но время у всех может быть своё. Если торги начнутся в воскресенье, то Ваша функция всё-равно выдаст 1 бар понедельника, часа через 2 после начала торгов, а у другого брокера всё будет правильно.Ещё я фильтровал дыры в котировках. Согласен с вами, вообще столкнулся на тестах с тем что котировки дукасов (мт4) выползали на субботу, во время перехода с зимнего на летнее или обратно. Долго мудрил с конвертацией, но потом плюнул. и просто сделал банальный запрет совам на любые действия в сб и вс. Я не так много видел брокеров, но те которые видел, начинали торговлю в пн. Тем не менее, опять же в целях общего развития в программировании наверное будет правильным исключить ошибку в таких случаях. Тогда наверно есть смысл отработать еще одну проверку:Если if(dto.day_of_week==1 && dt1.day_of_week!=1 && dt1.day_of_week!=0) то едем по старому сценарию, а если dt1.day_of_week==0 то ищем дальше. Так?Собственно с функцией поиска последнего бара недели видимо надо так же проверять и субботу.Насчет фильтров дыр в котировках, это я вообще пока не представляю как.п.с. Добрался до динамического расчета сигнальной. ща посмотри......п.с.с Не увидел ничего плохого, обычное среднее арифметическое по N недельным свечам Что хотите изменить? Только вот мою функцию поиска первого бара недели придется переделать, ибо под эту задачу она не подходит, у меня нет переменной начального смещения shift. И вот тут я начинаю тупить...... Вроде сделал. Изменено 8 августа, 2018 пользователем djnet Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 9 августа, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 9 августа, 2018 п.с.с Не увидел ничего плохого, обычное среднее арифметическое по N недельным свечам Что хотите изменить? Ошибка не в коде, а в идее: в начале года диапазон движения узок, сл-но средняя величина небольшая. Рассчитываем шаг, и ТП, которые тоже получаются маленькими. А потом начинается веселье- первое хорошее движение просаживает депо...Впрочем, к программированию это не относится, можно снести пост. Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 9 августа, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 9 августа, 2018 п.с.с Не увидел ничего плохого, обычное среднее арифметическое по N недельным свечам Что хотите изменить? Ошибка не в коде, а в идее: в начале года диапазон движения узок, сл-но средняя величина небольшая. Рассчитываем шаг, и ТП, которые тоже получаются маленькими. А потом начинается веселье- первое хорошее движение просаживает депо...Впрочем, к программированию это не относится, можно снести пост. Мысль ясна и вполне логична. Я правда в спринге динамический расчет не использовал в своей торговле, я просто нашел оптимальные значения размеров свечей по каждой торгуемой паре. Ну и кое где ограничил верхний предел, например по евроканадцу у меня максимальный размер свечи ограничен 350 п. Если пара прошла больше, я не захожу. А если больше 500п то вообще встаю по движению. Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 13 августа, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 13 августа, 2018 Ув. программисты, подскажите: кусочек 8.25 спринг mql4// =========трал по теням=============== if(TypeTS==1 && MathMod((double)Time[0],iTmfrm*60)==0 && timePrevTS!=Time[0])Выделил жирным то, что не понимаю. Что именно тут получаем? и зачем? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 августа, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 13 августа, 2018 MathMod((double)Time[0],iTmfrm*60)==0 Первая секунда нового бара :), видимо...Довольно криво - будет срабатывать крайне редко. Отследить закрытие бара нужно по другому. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти