//+------------------------------------------------------------------+
//| установка мышкой рыночных ордеров                                |
//|                               Copyright © 2012, Хлыстов Владимир |
//|                                                cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Хлыстов Владимир"
#property link      "cmillion@narod.ru"
#property show_inputs

//--------------------------------------------------------------------
extern int     Stoploss          = 1000,     //стоплосс ордеров
               Takeprofit        = 0;     //тейкпрофит ордеров
extern double  Lots              = 0.1;   //если=0 то лот будет расчитан как процент от свободных средств по RiskPercent % 
extern double  RiskPercent       = 0.;   //Lots = AccountBalance() * (RiskPercent / 100.0) / 10000.0
extern int     Magic             = 0;     //уникальный номер ордеров этого советника, если 0 то ведет все ордера, в том числе выставленные вручную
extern bool    comment           = true;  //выводить информацию на экран
//--------------------------------------------------------------------
int start()
{
   int n;
   double SL,TP;
   double Price = NormalizeDouble(WindowPriceOnDropped(),Digits);
   string txt=StringConcatenate("Скрипт выставления рыночного ордера, старт ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
   double MAXLOTMARGIN = AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double Lot = LOT();
   if (Lot>MAXLOTMARGIN) txt=StringConcatenate(txt,"\nНедостаточно средств для открытия ",DoubleToStr(Lot,2)," лота, максимум возможен ",DoubleToStr(MAXLOTMARGIN,2)," лот");
   else
   {
      while(true)
      {
         RefreshRates();
         if(Price>Ask) 
         {
            if (Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
            if (Stoploss!=0)   SL = NormalizeDouble(Ask - Stoploss   * Point,Digits); else SL=0;
            if (OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),0,SL,TP,"StopOrders",Magic,0,CLR_NONE)!=-1)
                 {txt = StringConcatenate(txt,"\nВыставлен BUY ",DoubleToStr(Ask,Digits));break;}
            else txt = StringConcatenate(txt,"\nОшибка ",GetLastError()," выставления BUY ");
         }
         if(Price<Bid) 
         {
            if (Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
            if (Stoploss!=0)   SL = NormalizeDouble(Bid + Stoploss   * Point,Digits); else SL=0;
            if (OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),0,SL,TP,"StopOrders",Magic,0,CLR_NONE)!=-1)
                 {txt = StringConcatenate(txt,"\nВыставлен SELL ",DoubleToStr(Bid,Digits));break;}
            else txt = StringConcatenate(txt,"\nОшибка ",GetLastError()," выставления SELL ");
         }
         if (comment) Comment("Попытка ",n," ",txt);
         n++;
         if (n>10) break;
      }
   }
   if (comment) Comment(txt,"\nСкрипт закончил свою работу ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
   return(0);
}
//--------------------------------------------------------------------
double LOT()
{
   if (Lots>0) return(Lots);
   double LOT = NormalizeDouble(AccountFreeMargin()* RiskPercent/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED),2);
   if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT);
   if (LOT<MarketInfo(Symbol(),MODE_MINLOT)) LOT = MarketInfo(Symbol(),MODE_MINLOT);
   return(LOT);
}
//--------------------------------------------------------------------

