Помогите с алгоритмом.

 

1.Есть массив ордеров с общим положительным профитом равным M. Symbol()=G;

2.Есть массив ордеров с отрицательным профитом из K элементов. Symbol()=F;

3. Необходимо закрыть все положительные ордера по G с максимальным количеством отрицательных по F при условии что общий профит >=0.

 
beginner >>:

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 по величине убытка, и закрывать их по однойы и вычитать негативный результат из переменной Х. Перед закрытием сделки проверять, если после закрытия сделки Х станет негативной, то останавливаемся..

 
niko1312 >>:

Суммируете все прибыльные сделки в переменную Х. Затем закрываете все поло жительные сделки.

Сортируете массив 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.

Хотя как вариант подходит, спасибо.

 
beginner >>:

Может так будет понятней :

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.
Причина обращения: