//--------------------Стоимость ордеров--------------------------- 5 -- RefreshRates(); // Обновление данных Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Миним. колич. лотов Free =AccountFreeMargin(); // Свободн средства One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Стоимость 1 лота Step =MarketInfo(Symb,MODE_LOTSTEP); // Шаг изменен размера if (Lots > 0) // Если заданы лоты,то Lts =Lots; // с ними и работаем else // % свободных средств Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Для открытия if(Lts < Min_Lot) Lts=Min_Lot; // Не меньше минимальн if (Lts*One_Lot > Free) // Лот дороже свободн. { Alert(" Не хватает денег на ", Lts," лотов"); return; // Выход из start() } //-----------------Открытие ордеров------------------------------- 6 -- while(true) // Цикл закрытия орд. { if (Opn_B==true) // Открытых орд. нет + { // критерий откр. Buy RefreshRates(); // Обновление данных if (StopLoss!=0) SL=Bid - New_Stop(StopLoss)*Point; // Вычисление SL откр. else SL=StopLoss; if (TakeProfit!=0) TP=Bid + New_Stop(TakeProfit)*Point; // Вычисление TP откр. else TP=TakeProfit; Alert("Пытаюсь открыть Buy","-",Symb,". Кури пока.."); Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,Slippage,SL,TP,"......",0,0,Blue);//Открытие Buy if (Ticket > 0) // Получилось :) { Stop_OB = false; // Для открытия только Stop_OS = true; // одного ордера в данном направлении Alert ("Открыт ордер Buy",Symb,"-",Ticket); return; // Выход из start() } if (Fun_Error(GetLastError())==1) // Обработка ошибок continue; // Повторная попытка return; // Выход из start() } if (Opn_S==true) // Открытых орд. нет + { // критерий откр. Sell RefreshRates(); // Обновление данных if (StopLoss!=0) SL=Ask + New_Stop(StopLoss)*Point; // Вычисление SL откр. else SL=StopLoss; if (TakeProfit!=0) TP=Ask - New_Stop(TakeProfit)*Point; // Вычисление TP откр. else TP=TakeProfit; Alert("Пытаюсь открыть Sell","-",Symb,". Кури пока.."); Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,Slippage,SL,TP,"......",0,0,Red);//Открытие Sel if (Ticket > 0) // Получилось :) { Stop_OS = false; // Для открытия только Stop_OB = true; // одного ордера в данном направлении Alert ("Открыт ордер Sell","-",Symb,"-",Ticket); return; // Выход из start() } if (Fun_Error(GetLastError())==1) // Обработка ошибок continue; // Повторная попытка return; // Выход из start() } break; // Выход из while } return; // Выход из start() }