Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Попробовал факториал - вычисляет, переписал функцию по закрытию всех ордеров с цикла на рекурсивный вызов - работает!
ИМХО закрытие ордеров при помощи рекурсии - не очень хорошее решение. Гораздо интереснее подход, когда советник представляет собой автомат, изменяющий состояния... :)
P.S. Сам я рекурсию на mql4 не использую.
Иногда без реккурсии невозможно обойтись, так как это самый простой способ решения задачи. Например нахождение определителя.
Вычисление определителя с помощью рекурсии - плохой пример (не практично, т.к. сложность O(N!)). Определитель можно гораздо эффективнее считать с помощью метода Гаусса с небольшими изменениями - получается алгоритм со сложностью O(N^3). Рекурсию лучше всего применять когда алгоритм трудно сформулировать иначе.
Вычисление определителя с помощью рекурсии - плохой пример (не практично, т.к. сложность O(N!)). Определитель можно гораздо эффективнее считать с помощью метода Гаусса с небольшими изменениями - получается алгоритм со сложностью O(N^3). Рекурсию лучше всего применять когда алгоритм трудно сформулировать иначе.
Просто интересно было. Захотелось. Хотя делал и по Гауссу. И с выбором максимального элемента, и без оного. И решение ручками, а потом только формулы забивал. Не столь суть важно.
"The first use of recursion by a developer gets a verbal warning, second use a written reprimand, and we fire on the third use..."
http://c2.com/cgi/wiki?RecursionVsLoop
ИМХО закрытие ордеров при помощи рекурсии - не очень хорошее решение.
в чем по вашему нехорошесть использования рекурсии при удалении ордеров ?
На мой взгляд, это не самый наглядный способ, сопряженный с дополнительными трудностями (нужно заранее продумать, насколько большой может быть вложенность рекурсивных вызовов).
Я считаю, что лучше применить другой подход. Например:
цикл (пока закрытие ордеров не завершено успешно) {
пытаемся закрыть
в случае неудачи делаем паузу
обновляем котировки
...
}
Кроме того, можно представить советник в виде автомата (о чем я уже говорил) примерно следующей структуры:
ну и так далее :) Решайте сами, может быть у вас получится красивое решение при помощи рекурсии.
P.S. Я не противник рекурсии в общем, лишь в данном конкретном случае
у меня такая система закрытия ордеров
1. по условиям закрытия создается массив с параметрами ордеров для закрытия
2. цикл по массиву - закрытиеОрдера (параметры ордера на закрытие, слипаж, число попыток закрывать, пауза между попытками,вывод ошибок)
если ордер закрылся, то обнуляются параметры ордера в массиве
3. проверка по параметрам в массиве - все ли ордера закрыты, если нет, то рекурсивный вызов и все повторяется с пункта 1.
и меня такая система пока не подводила..
Иногда без реккурсии невозможно обойтись, так как это самый простой способ решения задачи. Например нахождение определителя.
Поддерживаю.
На мой взгляд, рекурсию следует применять лишь тогда, когда без неё не обойтись. Как-то мне пришлось решать задачу - метод программирования общего решения системы заранее не заданного количества и вида уравнений и с зарнее не заданным количеством переменных. Там без рекурсии я не смог обойтись.
По-моему, рекурсия, как никакой другой алгоритм, отнимает у программиста неоправданно много энергии.
Зачем может понадобиться рекурсия в задаче учёта ордеров не могу даже представить.
Вот, например, задача, которая просто и элегантно решается с помощью рекурсии - вывести список файлов, находящиеся в определенной папке и ее подпапках. Т.к. мы заранее не знаем, есть ли в целевой папке еще подпапки, а в них еще свои подпапки и т.д. Т.е. заранее неизвестна структура каталогов. Без рекурсии эту задачу, наверное, как-то можно решить, не знаю. А с рекурсией достаточно просто. Т.е. задачи такого класса как-раз предназначены для решения при помощи рекурсии.
Вообще, мне кажется, что задача обхода фрактальной структуры с неизвестной степенью вложенности - это как-раз для рекурсии.
Т.е. заранее неизвестна структура каталогов. Без рекурсии эту задачу, наверное, как-то можно решить, не знаю. А с рекурсией достаточно просто.
Решается без рекурсии (мы не знаем, какова максимальная вложенность папок и сколько места осталось в стеке потока; явное создание стека для поиска выглядит логичнее).