_auto_SELL





//+------------------------------------------------------------------+
//|                                                   _auto_SELL.mq4 |
//|                                           "ÑÊÐÈÏÒÛ ÄËß ËÅÍÈÂÎÃÎ" |
//|                           Ñêðèïò îòêðûâàåò SELL â àêòèâíîì îêíå. |
//|                           Ïðè CreateGif=true àêòèâíîå îêíî ïîñëå |
//|                       îòêðûòèÿ ïîçèöèè ñîõðàíÿåòñÿ êàê ðèñóíîê â |
//|                     ...\<Òåðìèíàë>\exsperts\files\<FileName>.gif |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Bookkeeper"
#property link      "yuzefovich@gmail.com"
#property show_inputs // Åñëè åñòü æåëàíèå ìåíÿòü ýêñòåðíû â ïðîöåññå
//+------------------------------------------------------------------+
extern int  Aggression = 1;    // = 0 - ôèêñèðîâàííûì ëîòîì
                               // = 1 èëè 2 àâòîâûáîð
extern double FixLot   = 0.1;
extern int  DistSLmin  = 35;   // StopLoss â ïóíêòàõ - íå ìåíüøå.
                               // Åñëè àâòîìàòîì áóäåò ìåíüøå - áóäåò
                               // óñòàíîâëåí íà DistSLmin ïóíêòîâ
extern int  NBarsMax   = 15;   // Ìàêñèìàëüíîå ÷èñëî áàðîâ, ñðåäè
                               // êîòîðûõ èñêàòü ëîêàëüíûé ìàêñèìóì.
                               // Åñëè íàéäåí íå áóäåò, áóäåò âçÿò
                               // áîëüøèé èç High â ýòîì äèàïàçîíå.
                               // èëè ïî DistSLmin
extern int  SlipPage   = 7;    // Ïðîñêàëüçûâàíèå â ïóíêòàõ
extern bool StopLoss   = true; // Ñòàâèòü èëè íåò StopLoss
extern bool TakeProfit = true; // Ñòàâèòü èëè íåò TakeProfit=StopLoss
extern bool CreateGif  = false; // Ñîçäàòü èëè íåò ðèñóíîê
//+------------------------------------------------------------------+
double CalcLotsAuto() // Ìÿãêî-àãðåññèâíûé ñïîñîá óïðàâëåíèÿ äåíþøêîé.
{
   double lots;
   // Ìèíèìàëüíûé è ìàêñèìàëüíûé ðàçìåðû ëîòîâ
   double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
   int MinLotDgts;
   if(MinLot<0.1) MinLotDgts=2; // ðàçìåðíîñòü ìèíëîòà   
   else
   {
      if(MinLot<1.0) MinLotDgts=1;
      else MinLotDgts=0;
   }
   double MaxLot=MarketInfo(Symbol(),MODE_MAXLOT); 
   // íóæåí çàëîã íà ìèíëîò
   double MarginLot=MarketInfo(Symbol(),MODE_MARGINREQUIRED)*MinLot;
   // èìååì ñâîáîäíûõ ñðåäñòâ
   double FreeMargin=AccountFreeMargin();
   // åñëè èõ íå èìååì :(
   if(MarginLot>FreeMargin) return(-1.0);
   // à åñëè èìååì, òî ñêîëüêî ëîòîâ ìîæåì ñåáå ïîçâîëèòü íà ïîçó
   double LotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
   int LotStepDgts;
   if(LotStep<0.1) LotStepDgts=2; // ðàçìåðíîñòü   
   else
   {
      if(LotStep<1.0) LotStepDgts=1;
      else LotStepDgts=0;
   }
   FixLot=NormalizeDouble(FixLot,LotStepDgts);
   if(Aggression==0)
   { 
      if(FixLot>0)
      {
         MarginLot=MarketInfo(Symbol(),MODE_MARGINREQUIRED)*FixLot;
         if(MarginLot>FreeMargin) lots=NormalizeDouble(MinLot,MinLotDgts);
         else lots=NormalizeDouble(FixLot,LotStepDgts);
         return(lots);
      }
      else
      {
         lots=NormalizeDouble(MinLot,MinLotDgts);
         return(lots);
      }
   }
   int n=1;
   int m=NormalizeDouble(MaxLot/MinLot,0);
   double level=MarginLot*2;
   while(level<=FreeMargin && n<=m)
   {
      n++;
      if(Aggression==1)
         level=level+MarginLot*n; // Ìåíåå àãðåññèâíî
      else level=level+MarginLot*MathSqrt(n);
   }
   n--;
   lots=NormalizeDouble((MinLot*n),MinLotDgts);
   return(lots);
}
//+------------------------------------------------------------------+
void start() 
{
double SL, TP;
int    ticket, i;
string FileName, str;     
//----
   // Äîïóñê óðîâíåé ñòîïîâ (äîáàâëÿþ ïðîñêàëüçûâàíèå)
   double MinDistForStops=
                (MarketInfo(Symbol(),MODE_STOPLEVEL)+SlipPage)*Point;
   double lots=CalcLotsAuto();
   if(lots<=0) 
   {
      Alert("Open_BUY: My finance sing romances");
      return;
   }
   int N=0, m=0; 
   bool b=true; 
   while(b && N<NBarsMax) 
   { 
      N++;    
      if((Period()<1440 && High[N]>=High[N+1] && High[N]>=High[N-1] && High[N]>High[N+2] && High[N]>High[N-2])
         || (Period()>240 && High[N]>High[N+1] && High[N]>High[N-1]))
      {
         b=false;
         m=N;
      }
      else m=iHighest(NULL,0,MODE_HIGH,N,0);
   } 
   RefreshRates();
   double DistStops=High[m]-Bid+MarketInfo(Symbol(),MODE_SPREAD)*Point;
   DistStops=MathMax((DistSLmin*Point),DistStops);
   DistStops=MathMax(MinDistForStops,DistStops);
   if(StopLoss==true) SL=Ask+DistStops;
   else SL=0;
   if(TakeProfit==true) TP=Bid-DistStops;
   else TP=0;
   ticket=OrderSend(Symbol(),OP_SELL,
                    lots,
                    NormalizeDouble(MarketInfo(Symbol(),MODE_BID),Digits), 
                    SlipPage,
                    NormalizeDouble(SL,Digits),
                    NormalizeDouble(TP,Digits),
                    "",0,0,CLR_NONE);
   if(ticket<0) Alert("Open_SELL LastError: ",GetLastError()); 
   else
   { 
      if(CreateGif==true)
      {
         //    ðèñóåì, åñëè çàêàçàíî
         datetime curdate=TimeCurrent();
         FileName=Symbol()+"_SELL_"+TimeYear(curdate);
         i=TimeMonth(curdate);
         if(i<10)
         {
            str="0"+i;
            FileName=FileName+str;
         }
         else FileName=FileName+i;
         i=TimeSeconds(curdate)+
           100*TimeMinute(curdate)+
           10000*TimeHour(curdate)+
           1000000*TimeDay(curdate);
         if(TimeDay(curdate)<10)
         {
            str="0"+i;
            FileName=FileName+str;
         }
         else FileName=FileName+i;
         FileName=FileName+".gif";
         WindowScreenShot(FileName,400,300); 
      }
   }
   return;
}
//+------------------------------------------------------------------+





Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features:


It issuies visual alerts to the screen