Navigation:Home > Content >

Close_Percent_By_Line_v4_(от_ордера).mq4

Time: 2011-05-27 | Download file:Close_Percent_By_Line_v4_(от_ордера).mq4

//--------------------------------------------------------------------
#property copyright "Copyright © 2014, Хлыстов Владимир"
#property link      "cmillion@narod.ru"
#property show_inputs

#property description "При старте скрипт выставляет линию, на расстоянии TakeProfit от текущей цены."
#property description "При достижении ценой этой горизонтальной линии закрываются прибыльные ордера."
#property description "Скрипт закрывает от каждого ордера заданный процент, при значении PercentClose = 100% закрывает ордера полностью."
#property description "Далее скрипт заканчивает свою работу"

//--------------------------------------------------------------------
extern int     Stoploss          = 100,    //стоплосс
               Takeprofit        = 50;     //тейкпрофит
extern int     TakeProfitPercent = 15;     //прибыль закрытия ордера в пунктах, на такое расстояние от текущей цены ставим линию Close
extern double  PercentClose      = 50;     //процент закрытия ордера
extern int     Magic             = -1;     //если -1 все, если 0 ручные, если есть номер то по конкретному магику.
//--------------------------------------------------------------------
int start()
{
   double PriceLine,OP,OSL,OTP,OOP,SL,TP;
   int OMN,tip;
   double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
   string Obj = "Close "+DoubleToStr(PercentClose,2)+"%";
   if (ObjectFind(Obj)==-1) 
   {
      for (int i=0; i=STOPLEVEL && Stoploss!=0)
                  {
                     SL = NormalizeDouble(OOP - Stoploss   * Point,Digits);
                  } 
                  if (OTP==0 && NormalizeDouble(OOP + Takeprofit * Point,Digits)-Ask>=STOPLEVEL && Takeprofit!=0)
                  {
                     TP = NormalizeDouble(OOP + Takeprofit * Point,Digits);
                  } 
                  if (SL != OSL || TP != OTP)
                  {  
                     if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error OrderModify ",GetLastError());
                  }
                  PriceLine = NormalizeDouble(OOP+TakeProfitPercent*Point,Digits);
               }                                         
               if (tip==OP_SELL)        
               {
                  if (OSL==0 && NormalizeDouble(OOP + Stoploss   * Point,Digits)-Ask>=STOPLEVEL && Stoploss!=0)
                  {
                     SL = NormalizeDouble(OOP + Stoploss   * Point,Digits);
                  }
                  if (OTP==0 && Bid-NormalizeDouble(OOP - Takeprofit * Point,Digits)>=STOPLEVEL && Takeprofit!=0)
                  {
                     TP = NormalizeDouble(OOP - Takeprofit * Point,Digits);
                  }
                  if (SL != OSL || TP != OTP)
                  {  
                     if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error OrderModify ",GetLastError());
                  }
                  PriceLine = NormalizeDouble(OOP-TakeProfitPercent*Point,Digits);
               } 
            }
         }
      }
      Comment(PriceLine);
      drawline(Obj,Gray,PriceLine);
      drawtext(Obj,PriceLine);
   }
   //---
   while(!IsStopped())
   {
      RefreshRates();
      if (!IsTradeAllowed()) 
      {
         Sleep(1000);
         continue;
      }
      Comment("Скрипт ",Obj," ",TimeToStr(TimeCurrent(),TIME_SECONDS));
      if (ObjectFind(Obj)==-1) 
      {
         int ret=MessageBox("Закончить работу скрипта","Question", MB_YESNO|MB_ICONQUESTION);
         if (ret==IDYES) break;
         drawline(Obj,Gray,PriceLine);
         drawtext(Obj,PriceLine);
      }
      else 
      {
         if (PriceLine != ObjectGet(Obj,OBJPROP_PRICE1))
         {
            PriceLine = ObjectGet(Obj,OBJPROP_PRICE1);
            drawtext(Obj,PriceLine);
         }
      }
      //---
      for (i=0; i0)             
               {
                  if (PriceLine!=0)
                  {
                     if (Bid>=PriceLine) 
                        if (OrderClose(OrderTicket(),NormalizeDouble(OrderLots()*PercentClose/100,2), NormalizeDouble(Bid,Digits), 150, Blue))
                           {ObjectDelete(Obj);ObjectDelete(StringConcatenate(Obj,"n"));return(0);}
                  }
               }                                         
               if (tip==OP_SELL && OP>0)        
               {
                  if (PriceLine!=0)
                  {
                     if (Ask<=PriceLine) 
                        if (OrderClose(OrderTicket(), NormalizeDouble(OrderLots()*PercentClose/100,2), NormalizeDouble(Ask,Digits), 150, Red))
                           {ObjectDelete(Obj);ObjectDelete(StringConcatenate(Obj,"n"));return(0);}
                  }
               } 
            }
         }
      }
      Sleep(500);
   }
   ObjectDelete(Obj);
   ObjectDelete(StringConcatenate(Obj,"n"));
   Comment("Скрипт ",Obj," закончил свою работу");
   return(0);
}
//--------------------------------------------------------------------
void drawline(string NameL, color col, double Y1)
{
   ObjectCreate(NameL, OBJ_HLINE, 0,0,Y1,0,0);
   ObjectSet   (NameL, OBJPROP_COLOR, col);
   ObjectSet   (NameL, OBJPROP_STYLE, STYLE_SOLID);
   ObjectSet   (NameL, OBJPROP_WIDTH, 1);
   ObjectSet   (NameL, OBJPROP_BACK,  false);
   ObjectSet   (NameL, OBJPROP_RAY,   false);
}
//--------------------------------------------------------------------
void drawtext(string NameL, double Y1)
{
   string NameLine=StringConcatenate(NameL,"n");
   ObjectDelete (NameLine);
   ObjectCreate (NameLine, OBJ_TEXT,0,Time[WindowFirstVisibleBar()-WindowFirstVisibleBar()/4],Y1,0,0,0,0);
   ObjectSetText(NameLine, NameL ,8,"Arial");
   ObjectSet    (NameLine, OBJPROP_COLOR, ObjectGet(NameL,OBJPROP_COLOR));
}
//--------------------------------------------------------------------

Recommend