1.Есть массив ордеров с общим положительным профитом равным M. Symbol()=G;
2.Есть массив ордеров с отрицательным профитом из K элементов. Symbol()=F;
3. Необходимо закрыть все положительные ордера по G с максимальным количеством отрицательных по F при условии что общий профит >=0.
Нарисуйте у себя на листочке картинку, а потом опишите её другими словами, может тогда будет понятней без потери смысла.
Пока что не ясно.
Особенно: \3. Необходимо закрыть все положительные ордера по G с максимальным
количеством отрицательных по F при условии что общий профит >=0.\
Может так будет понятней :
1. Profit_CHFJPY={100,100,100,-100};
2.Profit_GBPCHF={-20,-150,-290,100};
3. Надо закрыть ордера по CHFJPY с профитом (100+100+100)=300, и по GBPCHF -290.
ИЛИ ТАК
1. Profit_CHFJPY={100,100,100,-100};
2.Profit_GBPCHF={-20,-150,-290,-5,100};
3. Надо закрыть ордера по CHFJPY с профитом (100+100+100)=300, и по GBPCHF (-290+(-5))=-295.
Суммируете все прибыльные сделки в переменную Х. Затем закрываете все поло жительные сделки.
Сортируете массив F по величине убытка, и закрывать их по однойы и вычитать негативный результат из переменной Х. Перед закрытием сделки проверять, если после закрытия сделки Х станет негативной, то останавливаемся..
Суммируете все прибыльные сделки в переменную Х. Затем закрываете все поло жительные сделки.
Сортируете массив F по величине убытка, и закрывать их по однойы и вычитать негативный результат из переменной Х. Перед закрытием сделки проверять, если после закрытия сделки Х станет негативной, то останавливаемся..
Это будет так
1. Profit_CHFJPY={100,100,100,-100};
2.Profit_GBPCHF={-20,-150,-290,-5,100};
3. Profit_GBPCHF={100,-5,-20,-150,-290}; закрываем только отриц тогда закроются (-5,-20,-150)=-175, а надо (-290+(-5))=-295.
Хотя как вариант подходит, спасибо.
Может так будет понятней :
1. Profit_CHFJPY={100,100,100,-100};
2.Profit_GBPCHF={-20,-150,-290,100};
3. Надо закрыть ордера по CHFJPY с профитом (100+100+100)=300, и по GBPCHF -290.
ИЛИ ТАК
1. Profit_CHFJPY={100,100,100,-100};
2.Profit_GBPCHF={-20,-150,-290,-5,100};
3. Надо закрыть ордера по CHFJPY с профитом (100+100+100)=300, и по GBPCHF (-290+(-5))=-295.
Эта задача похожа на "Задача коммивояжёра" поисчите в нете. Вот например Материал из Википедии
Если ордеров не много то наилучший (но не самый быстрый) алгоритм это перебором.
В вашем случае перебор составит 5^5 вариантом те 3125.
Можно выбрать максимальный отрицательный ордер и если он не влезет в параметр 300,
то взять следующий меньший по модулю и так далее..
Пусть положительный ордер будет Xi, отрицательный Yi
сумма всех положительных ордеров G = ΣXi, отрицательных F = ΣYi
Добавим в F перед каждым слагаемым некий коэффициент Bi и получим F' = ΣBi*Yi, Bi = {0; 1}
А теперь простым перебором значений Bi получаем решение в 2^i итераций.
На каждой итерации проверяем количество задействованных ордеров( ΣBi ) и их сумму (F')
А вообще-то тут двухцелевая задача, метод ветвей и границ врятле подойдет.
Тут автору решать какой параметр важнее, ну или найти какой-то компромисс :)
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
1.Есть массив ордеров с общим положительным профитом равным M. Symbol()=G;
2.Есть массив ордеров с отрицательным профитом из K элементов. Symbol()=F;
3. Необходимо закрыть все положительные ордера по G с максимальным количеством отрицательных по F при условии что общий профит >=0.