usver73 Опубликовано 2 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 февраля, 2022 1 час назад, Mar@der сказал: Интересно такой подход быстро сольет счет. Пытался решить проблему сам, никак, не дорос до уровня! Заранее спасибо! Вы описали классический мартингейл- увеличение ставки после стопа. Риски сродни сеткам: вместо увеличения лота после стопа можете открывать усредняющий увеличенный лот. Лучше найти стратегию с положительным мат. ожиданием. Что касается алгоритма, который Вы описали, то нужно перед открытием ордера делать анализ истории. Глубину анализа(количество ордеров, совокупный лосс в деньгах и/или пипсах) Вы сами определяете сообразно своему виденью ситуации и стратегии. Получить готовую функцию вряд ли получится- все индивидуально. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Mar@der Опубликовано 2 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 февраля, 2022 5 часов назад, usver73 сказал: Вы описали классический мартингейл- увеличение ставки после стопа. Риски сродни сеткам: вместо увеличения лота после стопа можете открывать усредняющий увеличенный лот. Лучше найти стратегию с положительным мат. ожиданием. Что касается алгоритма, который Вы описали, то нужно перед открытием ордера делать анализ истории. Глубину анализа(количество ордеров, совокупный лосс в деньгах и/или пипсах) Вы сами определяете сообразно своему виденью ситуации и стратегии. Получить готовую функцию вряд ли получится- все индивидуально. Про мартин понятно. А вот классическую сетку не хочу и усредняться после каждого ордера тоже не хочу, тест показал что максимум бывает 9 убытков подряд и 9й бывает достаточно большим если я удвоюсь 9 раз подряд и поймаю стоп будет печаль. в основном убытки не большие (не сл, а закрытие сделки по противоположному сигналу) но ощутимые в сумме за месяц вот я их и хочу объединить в группу, врядли будет подряд 5 убытков по 5 групп. А как это реализовать в коде не знаю. Может подскажет кто нибудь где подсмотреть? Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 3 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2022 11 часов назад, Mar@der сказал: А вот классическую сетку не хочу и усредняться после каждого ордера тоже не хочу Мартин с одним ордером в рынке и сетка с несколькими ордерами с точки зрения рисков равнозначны (если не брать во внимание требуемую маржу). Готовый код вряд ли найдете. Разбейте задачу на подзадачи. Для подзадач найти примеры будет легче. И Вам в целях обучения будет полезнее писать самому код, нежели копипастить Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 3 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2022 Всем доброго времени. Хочу открыться на нулевом баре, есть функция: //+---------------------------Функция обнаружения нового бара---------------------------------------+ bool Fun_New_Bar() // Ф-ия обнаружения .. { // .. нового бара static datetime Prev_Time=0; // Время текущего бара bool res= false; // возвращаемый результат if(Prev_Time!=Time[0]) // Сравниваем время { Prev_Time=Time[0]; // Теперь время такое res = true; // Поймался новый бар } return(res); } Далее чтоб снять показатели с индикатора пишу: if(Fun_New_Bar()) { Signal_low = iCustom(NULL,PERIOD_M15, "indikator",0,0); } где последний "0" означает текущий нулевой бар, в итоге не открывает на нулевом баре. Что делать?) Мое предположение - надо поменять в функции условие: //+---------------------------Функция обнаружения нового бара---------------------------------------+ bool Fun_New_Bar() // Ф-ия обнаружения .. { // .. нового бара static datetime Prev_Time=0; // Время текущего бара bool res= false; // возвращаемый результат if(Prev_Time==Time[0]) // Сравниваем время { res = true; // Поймался новый бар } return(res); } Вот так я смогу открыться на нулевом баре? Дело в том что если открываю на первом, то существенно теряется профит( Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 3 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2022 2 часа назад, diodio сказал: Что делать? Чем отличается цена открытия 0-го бара от цены закрытия 1-го? Если опустить случай гэпа... И на открытии 0го бара показания индикатора не понятно, что показывает-цен ещё нет. Так что обычно входят на 0м баре по показаниям индикатора на 1м 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 3 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2022 24 минуты назад, usver73 сказал: Так что обычно входят на 0м баре по показаниям индикатора на 1м Это да, но я хочу войти на 0м баре без показаний первого, ведь показания сигнала есть у индикатора, я проверял, и вот с этим сигналом мне и надо войти на 0-й бар. Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 3 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2022 24 минуты назад, diodio сказал: Это да, но я хочу войти на 0м баре без показаний первого, ведь показания сигнала есть у индикатора, я проверял, и вот с этим сигналом мне и надо войти на 0-й бар. Тогда в чет проблема? Индюк сигналит как положено... То, что не можешь войти, наверно в другом месте проблема? И у проблемы должно быть описание (ошибки исполнения или ошибка в логике сигнала). п.с. входишь всегда на 0-м баре. Другое дело- с какого индекса индикаторного буфера ты снимаешь сигнал. Но проблема точно не в функции Fun_New_Bar(). Ее задача прокукарекать, что открылся новый бар, а там хоть не рассветай 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 3 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2022 MathPow, Математическая функция, которая позволяет множителю сетки работать ниже значения 1.5 lot = NormalizeDouble(f_lot * MathPow(Multiplier, Trades). Кто то знает больше Ссылка на сообщение Поделиться на другие сайты More sharing options...
Mar@der Опубликовано 3 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2022 10 часов назад, diodio сказал: Это да, но я хочу войти на 0м баре без показаний первого, ведь показания сигнала есть у индикатора, я проверял, и вот с этим сигналом мне и надо войти на 0-й бар. Сделай скрин с окном данных и что на нулевом баре показывает индюк. Вариантов просто не много, он может не показывать в буфере ничего, может через тик разрешать и продажу и покупку, может продолжать прошлую тенденцию. А самое противное он может перерисоваться на 1 баре. Бывало есть индюк и "глазами торговать" сказка, а в сову не вставишь, потому что "точные показания" только с открытия бара 2! Я может зря лезу. просто в последние пару недель разочаровался в своих индюках, в ручке огонь, на автомате беда! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Mar@der Опубликовано 3 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2022 15 часов назад, usver73 сказал: Мартин с одним ордером в рынке и сетка с несколькими ордерами с точки зрения рисков равнозначны (если не брать во внимание требуемую маржу). Готовый код вряд ли найдете. Разбейте задачу на подзадачи. Для подзадач найти примеры будет легче. И Вам в целях обучения будет полезнее писать самому код, нежели копипастить Бро, подскажи мне как подчитать убытки вчерашнего дня, не доход за период, а только убыточные ордера. То что я делаю сейчас Ненормативная лексика, сова в цикле считает или сумму всех сделок или убытки за рандомный период! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 3 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2022 1 час назад, Mar@der сказал: Бро, подскажи мне как подчитать убытки вчерашнего дня, не доход за период, а только убыточные ордера. То что я делаю сейчас Ненормативная лексика, сова в цикле считает или сумму всех сделок или убытки за рандомный период! datetime lastDayStart = iTime(Symbol(), PERIOD_D1, 1); datetime todayStart = iTime(Symbol(), PERIOD_D1, 0); double lastDayLoss = 0.0; for(int i = OrdersHistoryTotal(); i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber() == MyMagicNumber && OrderType() <= OP_SELL && OrderProfit() < 0 //только если ордер убыточный. При желании можно сравнивать с нулем сумму OrderProfit, OrderSwap и OrderCommission && OrderCloseTime() >= lastDayStart //если закрытие после начала прошлого дня. По желанию можно сравнивать по открытию, но тогда нужно проверить, что ордер уже закрыт && OrderCloseTime() < todayStart //тоже самое, можно сверять открытие ) { lastDayLoss += OrderProfit() + OrderSwap() + OrderCommission(); } } Print("Last day loss = ", DoubleToString(lastDayLoss, 2); 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 4 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 февраля, 2022 8 часов назад, Rigal сказал: datetime lastDayStart = iTime(Symbol(), PERIOD_D1, 1); @Rigal, брать в МТ4 данные с неродного ТФ разве не чревато проблемами в тестере? В свое время сталкивался, что на одних котировках все было нормально, а на других (закачанных через ТикСтори) подтянуть старший ТФ не получалось. Вычислял начало дня через танцы с бубном. Сейчас, с добавлением структур, стало проще (с т.з. надежности), но длиннее (ИМХО): void StartDay() { MqlDateTime dt; MqlDateTime dt_start; TimeToStruct(TimeCurrent(), dt); dt_start.year = dt.year; dt_start.mon = dt.mon; dt_start.day = dt.day; dt_start.hour = 0; dt_start.min = 0; datetime DayStart = StructToTime(dt_start); } 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 4 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 февраля, 2022 11 часов назад, Lexa000 сказал: MathPow, Математическая функция, которая позволяет множителю сетки работать ниже значения 1.5 lot = NormalizeDouble(f_lot * MathPow(Multiplier, Trades). Кто то знает больше Это вопрос? И если вопрос, то о чем? Ссылка на сообщение Поделиться на другие сайты More sharing options...
ademen Опубликовано 4 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 февраля, 2022 @Rigal , в Коржике ты иногда открываешь новыве окна для прогрузки истории. Или с другой целью? Как ты определяешь нужно ли символу прогрузить историю? Изменено 4 февраля, 2022 пользователем ademen Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 4 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 февраля, 2022 1 час назад, usver73 сказал: Это вопрос? И если вопрос, то о чем? Хотелось бы подробней развернуть тему с множителем. Если есть видео, то можно ссылку на видео Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 4 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 февраля, 2022 27 минут назад, Lexa000 сказал: Хотелось бы подробней развернуть тему с множителем. Справка mql: Возводит основание в указанную степень. double MathPow( double base, // основание double exponent // показатель степени ); Например, стартовый лот = 0.1; Множитель для следующего ордера = 2.0; результат: 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 4 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 февраля, 2022 14 часов назад, ademen сказал: @Rigal , в Коржике ты иногда открываешь новыве окна для прогрузки истории. Или с другой целью? Как ты определяешь нужно ли символу прогрузить историю? обращаюсь к iBars, проверяю, сколько оно вернуло. Повторяю несколько раз. Если число меня не удовлетворило - открываю окно. На "холодном" терминале, как правило, за один запуск успешно прогружаются 5-7 символов, а потом, вероятно, очередь переполняется. Повторные запуски прогружают следующие 5-7. Теоретически можно не отказываться от загрузки (и открывать окно), а повторять до посинения (или по крайней мере значительно больше раз) - но тут возникает опасность, что пользователь, лишенный какого-либо фидбека в этом процессе, задергается и начнет перезапускать советника/терминал - а это, как мы знаем, чревато разного рода нетривиальными проблемами Изменено 4 февраля, 2022 пользователем Rigal 1 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 4 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 февраля, 2022 14 часов назад, usver73 сказал: @Rigal, брать в МТ4 данные с неродного ТФ разве не чревато проблемами в тестере? В свое время сталкивался, что на одних котировках все было нормально, а на других (закачанных через ТикСтори) подтянуть старший ТФ не получалось. Вычислял начало дня через танцы с бубном. Сейчас, с добавлением структур, стало проще (с т.з. надежности), но длиннее (ИМХО): void StartDay() { MqlDateTime dt; MqlDateTime dt_start; TimeToStruct(TimeCurrent(), dt); dt_start.year = dt.year; dt_start.mon = dt.mon; dt_start.day = dt.day; dt_start.hour = 0; dt_start.min = 0; datetime DayStart = StructToTime(dt_start); } Проблема обращения к другим ТФ возникает в тестере (и только в тестере) в двух случаях: при использовании котировок из кванта и после неправильной/непроделанной загрузки "родных" котировок метака (открыть центр истории, затребовать загрузку минуток, дождаться завершения, полюбоваться астрономическим числом баров истории, прокликать все таймфреймы для пересчета) Ваше замечание абсолютно справедливо. Я иногда забываю, что люди пользуются квантом. Реализовать ваш способ можно, кстати, гораздо проще и без структур: вычесть из текущего времени количество секунд в текущем дне. Примерно так: datetime startOfToday = TimeCurrent() - TimeCurrent() % 86400; //это 60 * 60 * 24, результат лучше проверить, я мог запамятовать У приведенного вами метода есть только один недостаток, который никак не влияет на применимость к упомянутой проблеме, но о нем полезно помнить в более общем случае: вы не определяете начало дня с точки зрения брокера. Только начало дня с точки зрения часового пояса брокера. В случае, когда нужно все же найти первый бар/открытие рынка - на время опереться нельзя, нужно ковыряться в барах, но можно это делать на текущем ТФ. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 13 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 февраля, 2022 double GetLots() { double lot=LOTS; if(lot==0) lot = AccountBalance()*risk/100/10000/MarketInfo(Symbol(),MODE_MARGINREQUIRED); if(CountTrades()>0) lot=NormalizeDouble(LOTS*MathPow(LotMultiply,CountTrades()),2); if(lot>MaxLot) { lot=LOTS; if(lot==0) lot = AccountBalance()*risk/100/10000/MarketInfo(Symbol(),MODE_MARGINREQUIRED); } return(lot); } Я ни у кого ничего не смог здесь добиться, так как здесь люди очень умные, и на глупые вопросы не отвечают. Собрал такой простой код множитель, если кого интересует, где GetLots можно добавить в функцию, в блок кода открытия первого ордера OnTick,start, у кого какой, остальное в переменные . Это для тех, кто еще не знает, что есть такие множители Ссылка на сообщение Поделиться на другие сайты More sharing options...
ademen Опубликовано 13 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 февраля, 2022 Имеется .csv в котором 5М строк где : дата, пара, показатель. Хочу перенести базу с .csv в .mqh, и потом работать в тестере, мультивалютный режим. Как это правильнее сделать? Ссылка на сообщение Поделиться на другие сайты More sharing options...
elavr Опубликовано 14 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 февраля, 2022 6 часов назад, ademen сказал: Как это правильнее сделать? Не совсем понятно, что именно. Как по мне - то для mql5 лучшего способа для подобной работы, чем встроенные функции терминала по работе c SQLite - нет. https://www.mql5.com/ru/docs/database/databaseimport https://www.mql5.com/ru/docs/database Для MQL4 тоже есть библиотека: https://github.com/dingmaotu/mql-sqlite3 Изменено 14 февраля, 2022 пользователем elavr 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 14 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 февраля, 2022 7 часов назад, Lexa000 сказал: Я ни у кого ничего не смог здесь добиться, так как здесь люди очень умные, и на глупые вопросы не отвечают. Вы очень странно добивались умного ответа задавая супер лаконичные вопросы. На которые, кстати, были попытки дать ответ, но кроме "хмм.." никакой реакции.. Что касается Вашей функции автолота, то при выполнении условия: 7 часов назад, Lexa000 сказал: if(lot>MaxLot) { lot=LOTS; if(lot==0) lot = AccountBalance()*risk/100/10000/MarketInfo(Symbol(),MODE_MARGINREQUIRED); } лотность очередного и всех последующих ордеров сбросится к минимальному значению LOTS (или к минимальному расчетному через риск), что не логично в сетках. Как правило, если стоит задача ограничить рост лотности, то открывают с определенного колена ордера с Максимальным заданным значение лота (MaxLot) Ссылка на сообщение Поделиться на другие сайты More sharing options...
ademen Опубликовано 14 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 февраля, 2022 17 часов назад, elavr сказал: Не совсем понятно, что именно. Как по мне - то для mql5 лучшего способа для подобной работы, чем встроенные функции терминала по работе c SQLite - нет. https://www.mql5.com/ru/docs/database/databaseimport https://www.mql5.com/ru/docs/database Для MQL4 тоже есть библиотека: https://github.com/dingmaotu/mql-sqlite3 Спасибо, @elavr Так же интересует, можно ли большой .csv запихнуть внутрь ех4/ех5? Ссылка на сообщение Поделиться на другие сайты More sharing options...
elavr Опубликовано 15 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2022 6 часов назад, ademen сказал: Так же интересует, можно ли большой .csv запихнуть внутрь ех4/ех5? Что такое внутрь? Если подразумевается загрузить в массив - то почему бы и нет. https://www.mql5.com/ru/docs/files Вопрос только в одном - скорости чтения CVS файла и последующей скорости обработки загруженных данных. Изменено 15 февраля, 2022 пользователем elavr Ссылка на сообщение Поделиться на другие сайты More sharing options...
ademen Опубликовано 15 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2022 1 час назад, elavr сказал: Что такое внутрь? Если подразумевается загрузить в массив - то почему бы и нет. Имеется виду что другому пользователю не нужно скидать базу и обьяснять куда ее нужно поместить. Например, отправить на форум ех4, в котором уже есть csv данные 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти