[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 101
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Понял... Если другой путь с перерисовкой?
Добрый день! Помогите пожалуйста разобраться с функцией ArrayMo (ф-я возвращает максимум кривой плотности ).
Возникли следующие вопросы:
1.С какой целью создается временный массив
2. не понятно, из чего будут браться значения временного массива, а следовательно не понятно, как в этом массиве может осуществляться поиск:
3. А дальше вообще для меня истина глубоко спрятана))))) После того как мы убедились, что значения нет, мы начинаем определять размер массива "непонятно каких значений".
Буду очень признательна за лучик света в этой истории))))Мне кажется, функция все таки написана не вполне корректно. Основная причина - после объявления
необходимо обязательно
иначе (цитирую)
!!!Замечание: массив, объявленный на локальном уровне в какой-либо функции, у которого был изменен размер, останется неизменным после завершения работы функции. При повторном вызове функции такой массив будет иметь размер, отличный от объявленного.!!!
И таким образом при многочисленных вызовах функция "провалится в прошлое")
По поводу работы алгоритма. Сам массив m[][2] - это представление непосредственно эмпирического распределения количества попаданий переменной x[i] по ее различным значениям. Т.е. каждый элемент массива состоит из двух чисел - количество попаданий в некое значение (первое поле) и само это значение. В цикле для каждого x[i] осуществляется поиск такого же значения в массиве m, и если оно найдено - плюсуется поле количества, в противном случае - с помощью ArrayResize() создается новый элемент и наше x[i] пишется туда.
Далее, после того как массив заполнен, необходимо просто найти элемент с максимальным количеством попаданий, т.е., по определению, моду распределения х.
Это сделано строками
хотя, мне кажется (не уверен насчет многомерного массива), можно было просто
В целом могу сказать (при всем уважении к автору кода), что даже при исправлении всех недочетов данный алгоритм крайне неэффективен и может часто давать неверный результат. Причина заключается в том, что мы работаем с типом double, а значит вероятность того, что величины x[i] будут попадать в очень близкие, но все таки различимые значения, достаточно велика. Это может оказаться не столь заметно, когда объем выборки много больше (в сотни раз и более) общего количества интервалов, на которые разрешена область определения x[i]. Однако в тех многочисленных случаях, когда данное ограничение не выполнено, неправильных вычислений будет очень много.
Более правильный путь вычисления моды такой: строится эмпирическая функция распределения (не путать с распределением частот), после чего она интерполируется от кусочно-линейной к гладкой, и в завершение ищется точка максимума производной. Такой алгоритм свободен от перечисленных выше недостатков и работает весьма эффективно даже с малыми объемами выборки. По крайней мере, мне приходилось решать на MQL как раз задачу нахождения мод на выборках всего в 50-100 элементов при сравнимом количестве интервалов, и все было ОК. Недостаток один - на интерполяциях как правило сильно падает скорость расчетов, если, конечно, хотим сглаживать качественно.
сюда: https://www.mql5.com/ru/job
Спасибо. Может быть есть ещё варианты.
Спасибо. Может быть есть ещё варианты.
попробуйте в поиске на сайте набрать "мартингейл" - удивитесь
Уже смотрел! Но того что я хочу нет(
Посмотрите здесь
https://www.mql5.com/ru/forum/136747
Здравствуйте. В MQL4 только начал.
Подскажите по функции OrderModify. В учебниках и примерах эту функцию рассматривают для трала, т.е. изменение stop loss. Мне нужно изменить только take profit на открытом ордереПри открытии stop loss не задавался, при модефикации также должен остаться на 0.
Как при этом должен выглядеть подсчет и выбор ордеров ?
Конечная цель должна выглядеть как то так:
if (OrderType()==OP_BUY && OrderOpenPrice()-Bid>kof*Point) // есть buy, но ушло вниз на величину kof
{
OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()+tpnew*Point,0,CLR_NONE);// переносим TP пониже выставленного ранее
По sell аналогично.
Спасибо за любые ответы.
И снова здравствуйте! :)
Как я и думал, проблемы возникли. Вот код. Смысл в том, что ордера на тестере закрываются по TP, а по функции TP убирается при модификации ордера во время Трейлинг стопа.
А значит, трейлинг стоп не исполняется, при этом в журнале тестера ошибок с неправильным TP и SL не было. Что же неверно?