Работа советника! extern int Magic = 18844; //первый блок extern int SL = 400; extern int TP = 400; //второй блок extern int SL_2 = 400; extern int Tp_2 = 400; //третий блок extern int SL_3 = 400; extern int Tp_3 = 400; //четвертый блок extern int SL_4 = 400; extern int Tp_4 = 400; //пятый блок extern int SL_5 = 400; extern int Tp_5 = 400; //шестой блок extern int SL_6 = 400; extern int Tp_6 = 400; //объем лотов extern double Lots_active_1 = 0.1; extern double Lots_active_2 = 0.1; extern double Lots_active_3 = 0.1; extern double Lots_active_4 = 0.1; extern double Lots_active_5 = 0.1; extern double Lots_active_6 = 0.1; extern double Lots_1 = 0.1; extern double Lots_2 = 0.1; extern double Lots_3 = 0.1; extern double Lots_4 = 0.1; extern double Lots_5 = 0.1; extern double Lots_6 = 0.1; extern int orders = 4; int slip = 30; //Движок советника. Пока я распишу работу советника в одном напровлении. Назовем его openBUY //Запускается советник и он открывает ордера первого блока. //Пример ордеров для openBUY (тоесть ни чего особого тут нет, это для каждого блока одинакого. то есть отложенных ордеров не будет, это что бы облегчить я прелагаю данный вариант. Для openSELL, местами меняется только OP_SELL и OP_BUY): ticket[1]=OrderSend(Symbol(),OP_SELL,Lots_1,Bid,slip,Bid+SL,Bid-TP,0,Magic); //BUY active 1 ticket[2]=OrderSend(Symbol(),OP_BUY,Lots_active,Ask,slip,0,0,0,0,NULL,Magic); При закрытии стоп лосса или тейк профита, он закрывает мгновенно второй открытый ордер в первом блоке и после чего обращается к следующиму варианту: //Вариант 1. В данном варианте он уточняет, есть ли прибыль, если прибыль есть то цикл советника закрыт и он опять начинает с первого блока. Если прибыли нет, и он закрыл в убыток то он обращается ко второму варианту . //Вариант 2. Если он обротился к первому варианту, и там оказалось что прибыли нет, то он обращается к данному второму варианту, здесь он считает ордера закрытые по тейк профиту или стоп лоссу и сравнивает с поставленным в начале колличеством (я это назвал orders). //вот функция второго варианта: bool CloseAlAferprofit(int ord){static int HistOrd,HistTime;int i,count; if(OrdersTotal()<1){ HistOrd=OrdersHistoryTotal();//запоминаем количество уже закрытых ордеров HistTime=TimeCurrent();//запоминаем время return; } if(OrdersTotal()>0){//если есть открытые ордера if(OrdersHistoryTotal()>=HistOrd+ord){//если при этом уже закрылись несколько ордеров for(i=0;i=HistTime){//если он закрыт после указаного времени if(OrderClosePrice()==OrderTakeProfit()&& count == 0){//если закрылся по тейку count++;// увеличиаем счетчик } } } } } if(count>=ord){//если кол во закрытых по тейку ордеров превысило допустимое for(i=OrdersTotal()+1;i>=0;i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderType()<2){ OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);//закрываем все ранее открытые ордера }else{ OrderDelete(OrderTicket()); } } } } //Если ни один из вариантов не сработол, то есть первый вариант не в прибыли, а при сравнении со вторым вариантом не сошлось, то запускается второй блок, и т.д. до последнего блока. Убыток предыдущих блоков он фиксирует и сравнивает с предыдущими, то есть прибыль полученная, например на четвертом блоке, должна перекрыть убыток предыдущих трех и второго ордера в четвертом блоке. При закрытии последнего блока, даже если он закрылся в минус, начинать работу с начала, то есть с первого блока. Еще такой момент, на данном депозите, он должен высчитывать только свои ордера, так как паралельно могут быть открыты еще ордера, что бы он их не считал. //Советник openSell работает полностью так же. Если получиться их сделать работоспособными и не мешающими друг другу в одном советнике, то будет супер, а если нет, то ни чего страшного. Вроди все. Если что не понятно будет, то с удовольствием отвечу. И вот еще, не обязательно отталкиваться от тех названий, что я назвал или так оставлять те функции что я разместил, все можно изменять, главное что бы данный результат получился. :)