Работа завершена
Техническое задание
Есть обычная функция изменения лота:
double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); int losses=0; lot=NormalizeDouble(AccountEquity()*MaximumRisk/1000.0,2); if (Use_EAs_Management==true) lot=NormalizeDouble(AccountBalance()/Quantity_EAs*MaximumRisk/1000.0,2); if(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL || OrderMagicNumber()!=MagicNumber) continue; //---- if(OrderProfit()>0) break; if ((OrderProfit()<0) && (OrderMagicNumber()==MagicNumber)) losses++; } if(losses>0) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } if(lot<0.1) lot=0.1; if(MoneyManagement==false) lot=Lots; //--- for CONTEST only if(lot > MaxLots) lot=MaxLots; return(lot); }
Нужно сделать, чтобы функция видела не только что предыдущая позиция была убыточная, а вычисляла размер убытка и сравнивала его с закрытой текущей позицией.
Т.е.
1. получили убыточный ордер - запомнили его размер и следующий лот открываем размером = lot*2.
1.1 следующий лот закрылся в плюсе: сравниваем его с убыточным, если
1.1.1 он > убытка цикл начинаем сначала.
1.1.2 он < убытка, то следующий лот открываем тем же размером = lot*2.
1.1.3 если получили убыточный ордер между прибыльным - размер лота не меняем.
2. получили второй подряд убыточный ордер - прибавляем его к первому запомнили его размер и следующий лот открываем размером = lot*4.
в общем и так далее до размера = lot*16, если и после этого получаем убыточный ордер - цикл обнуляется.
Если возможно, пожалуйста, укажите стоимость и сроки выполнения.