Manual_Open_and_Modify_Stop_Limit_orders_3

Author: Copyright � 2011, ������� ��������
Profit factor:
0.00
11 Views
0 Downloads
0 Favorites
Manual_Open_and_Modify_Stop_Limit_orders_3
//+------------------------------------------------------------------+
//| Ðó÷íàÿ óñòàíîâêà è ïåðåìåùåíèå îðäåðîâ                           |
//|                     Manual Open and Modify Stop Limit orders.mq4 |
//|                               Copyright © 2011, Õëûñòîâ Âëàäèìèð |
//|                                                cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Õëûñòîâ Âëàäèìèð"
#property link      "cmillion@narod.ru"
//--------------------------------------------------------------------
extern bool    StopOrders        = true;  //âûñòàâëÿòü ñòîï îðäåðà
extern bool    LimitOrders       = true;  //âûñòàâëÿòü ëèìèò îðäåðà
extern int     Stoploss          = 0,     //ñòîïëîññ îðäåðîâ
               Takeprofit        = 0;     //òåéêïðîôèò îðäåðîâ
extern double  Lot               = 0.1;   //åñëè=0 òî ïî risk
extern int     Magic             = 100;   //óíèêàëüíûé íîìåð îðäåðîâ ýòîãî ñîâåòíèêà, åñëè 0 òî âåäåò âñå îðäåðà, â òîì ÷èñëå âûñòàâëåííûå âðó÷íóþ

string txt= "",ss,bs,ssn,bsn,sl,bl,sln,bln;
double SL,TP,STOPLEVEL;
//--------------------------------------------------------------------
int init()
{
   ss = StringConcatenate("LINES SELLSTOP",Magic);
   bs = StringConcatenate("LINES BUYSTOP",Magic);
   ssn = StringConcatenate("LINES SELLSTOPn",Magic);
   bsn = StringConcatenate("LINES BUYSTOPn",Magic);
   sl = StringConcatenate("LINES SELLLIMIT",Magic);
   bl = StringConcatenate("LINES BUYLIMIT",Magic);
   sln = StringConcatenate("LINES SELLLIMITn",Magic);
   bln = StringConcatenate("LINES BUYLIMITn",Magic);

   STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);
   if (Stoploss <STOPLEVEL && Stoploss!=0) {Stoploss=0;Alert("Stoploss ",Stoploss,"  ìåíåå äîïóñòèìîãî óðîâíÿ ",STOPLEVEL," Stoploss îòêëþ÷åí");}
   if (Takeprofit <STOPLEVEL && Takeprofit!=0) {Takeprofit=0;Alert("Takeprofit ",Takeprofit,"  ìåíåå äîïóñòèìîãî óðîâíÿ ",STOPLEVEL," Takeprofit îòêëþ÷åí");}
   if (StopOrders)
   {  

      if (ObjectFind(ss)==-1) {drawline(ss,Red,iLow(NULL,1440,0));drawtext(ss,"", iLow(NULL,1440,0));}

      if (ObjectFind(bs)==-1) {drawline(bs,Blue,iHigh(NULL,1440,0));drawtext(bs,"", iHigh(NULL,1440,0));}
   }
   else 
   {
      ObjectDelete(ss);
      ObjectDelete(bs);
      ObjectDelete(ssn);
      ObjectDelete(bsn);
   }
   if (LimitOrders)
   {  
      if (ObjectFind(sl)==-1) {drawline(sl,Red,iHigh(NULL,1440,0));drawtext(sl,"", iHigh(NULL,1440,0));}
      if (ObjectFind(bl)==-1) {drawline(bl,Blue,iLow(NULL,1440,0));drawtext(bl,"", iLow(NULL,1440,0));}
   }
   else 
   {
      ObjectDelete(sl);
      ObjectDelete(bl);
      ObjectDelete(bln);
      ObjectDelete(bln);
   }
}
//--------------------------------------------------------------------
int deinit()
{
/*   ObjectDelete(ss);
   ObjectDelete(bs);
   ObjectDelete(sl);
   ObjectDelete(bl);
   ObjectDelete(ssn);
   ObjectDelete(bsn);
   ObjectDelete(bln);
   ObjectDelete(bln);*/
}
//--------------------------------------------------------------------
int start()
{
   //while(!IsStopped()){RefreshRates();
   STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);
   int TicketSellLimit,TicketBuyLimit,TicketBuyStop,TicketSellStop;
   double SELLLIMIT,BUYLIMIT,BUYSTOP,SELLSTOP;//öåíû îòêðûòûõ îòëîæåê
   double OOP;
   int tip,Ticket;
   for (int i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         { 
            tip = OrderType(); 
            OOP   = NormalizeDouble(OrderOpenPrice(),Digits);
            Ticket = OrderTicket();
            SL=0;TP=0;
            if (tip==OP_BUYSTOP)             
            {
               BUYSTOP = OOP;
               TicketBuyStop = Ticket;
            }                                         
            if (tip==OP_SELLSTOP)        
            {
               SELLSTOP = OOP;
               TicketSellStop = Ticket;
            } 
            if (tip==OP_BUYLIMIT)             
            {
               BUYLIMIT = OOP;
               TicketBuyLimit = Ticket;
            }                                         
            if (tip==OP_SELLLIMIT)        
            {
               SELLLIMIT = OOP;
               TicketSellLimit = Ticket;
            } 
         }
      }
   } 
   //---
   double Price,StopLevel=NormalizeDouble(STOPLEVEL*Point,Digits);
   if (ObjectFind(sl)!=-1) 
   {
      Price = NormalizeDouble(ObjectGet(sl,OBJPROP_PRICE1),Digits);
      if (Price-StopLevel>=Ask)
      {
         if (Takeprofit!=0) TP = NormalizeDouble(Price + Takeprofit * Point,Digits); else TP=0;
         if (Stoploss!=0)   SL = NormalizeDouble(Price - Stoploss   * Point,Digits); else SL=0;
         if (SELLLIMIT==0)//SellLimit
         {
            if (OrderSend(Symbol(),OP_SELLLIMIT ,Lot,Price,0,SL,TP,txt,Magic,0,Blue)==-1)
               Print("Error OrderSend ",GetLastError());
         }
         else
         {
            if (!OrderModify(TicketSellLimit,Price,SL,TP,0,Green)) Print("Error OrderModify ",GetLastError());
            drawtext(sl,"", Price);
         }
      }
      else drawtext(sl,"íåïðàâèëüíàÿ öåíà äëÿ SELLLIMIT", Price);
   }
   else //ÓÄÀËÅÍÈÅ ÎÐÄÅÐÀ
   {
      if (SELLLIMIT!=0)
      {
         if (!OrderDelete(TicketSellLimit)) Print("Error OrderDelete ",GetLastError());
         else ObjectDelete(sln);
      }
   }
   //---
   if (ObjectFind(bl)!=-1) 
   {
      Price = NormalizeDouble(ObjectGet(bl,OBJPROP_PRICE1),Digits);
      if (Price+StopLevel<=Bid)
      {
         if (Takeprofit!=0) TP = NormalizeDouble(Price - Takeprofit * Point,Digits); else TP=0;
         if (Stoploss!=0)   SL = NormalizeDouble(Price + Stoploss   * Point,Digits); else SL=0;
         if (BUYLIMIT==0)//BayLimit
         {
            if (OrderSend(Symbol(),OP_BUYLIMIT,Lot,Price,0,SL,TP,txt,Magic,0,Red )==-1)
               Print("Error OrderSend ",GetLastError());
         }
         else
         {
            if (!OrderModify(TicketBuyLimit,Price,SL,TP,0,Green)) Print("Error OrderModify ",GetLastError());
            drawtext(bl,"", Price);
         }
      }
      else drawtext(bl,"íåïðàâèëüíàÿ öåíà äëÿ BUYLIMIT", Price);
   }
   else //ÓÄÀËÅÍÈÅ ÎÐÄÅÐÀ
   {
      if (BUYLIMIT!=0)
      {
         if (!OrderDelete(TicketBuyLimit)) Print("Error OrderDelete ",GetLastError());
         else ObjectDelete(bln);
      }
   }
   if (ObjectFind(bs)!=-1) 
   {
      Price = NormalizeDouble(ObjectGet(bs,OBJPROP_PRICE1),Digits);
      if (Price-StopLevel>=Ask)
      {
         if (Takeprofit!=0) TP = NormalizeDouble(Price + Takeprofit * Point,Digits); else TP=0;
         if (Stoploss!=0)   SL = NormalizeDouble(Price - Stoploss   * Point,Digits); else SL=0;
         if (BUYSTOP==0)//BayStop
         {
            if (OrderSend(Symbol(),OP_BUYSTOP ,Lot,Price,0,SL,TP,txt,Magic,0,Blue)==-1)
               Print("Error OrderSend ",GetLastError());
         }
         else
         {
            if (!OrderModify(TicketBuyStop,Price,SL,TP,0,Green)) Print("Error OrderModify ",GetLastError());
            drawtext(bs,"", Price);
         }
      }
      else drawtext(bs,"íåïðàâèëüíàÿ öåíà äëÿ BUYSTOP", Price);
   }
   else //ÓÄÀËÅÍÈÅ ÎÐÄÅÐÀ
   {
      if (BUYSTOP!=0)
      {
         if (!OrderDelete(TicketBuyStop)) Print("Error OrderDelete ",GetLastError());
         else ObjectDelete(bsn);
      }
   }
   //---
   if (ObjectFind(ss)!=-1) 
   {
      Price = NormalizeDouble(ObjectGet(ss,OBJPROP_PRICE1),Digits);
      if (Price+StopLevel<=Bid)
      {
         if (Takeprofit!=0) TP = NormalizeDouble(Price - Takeprofit * Point,Digits); else TP=0;
         if (Stoploss!=0)   SL = NormalizeDouble(Price + Stoploss   * Point,Digits); else SL=0;
         if (SELLSTOP==0)//SellStop
         {
            if (OrderSend(Symbol(),OP_SELLSTOP,Lot,Price,0,SL,TP,txt,Magic,0,Red )==-1)
               Print("Error OrderSend ",GetLastError());
         }
         else
         {
            if (!OrderModify(TicketSellStop,Price,SL,TP,0,Green)) Print("Error OrderModify ",GetLastError());
            drawtext(ss,"", Price);
         }
      }
      else drawtext(ss,"íåïðàâèëüíàÿ öåíà äëÿ SELLSTOP", Price);
   }
   else //ÓÄÀËÅÍÈÅ ÎÐÄÅÐÀ
   {
      if (SELLSTOP!=0)
      {
         if (!OrderDelete(TicketSellStop)) Print("Error OrderDelete ",GetLastError());
         else ObjectDelete(ssn);
      }
   }
   //Sleep(1000);}
   return(0);
}
//--------------------------------------------------------------------
int 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);
   return;
}
//--------------------------------------------------------------------
int drawtext(string NameL, string info, double Y1)
{
   double shift_Y = (WindowPriceMax()-WindowPriceMin()) / 40;
   string NameLine=StringConcatenate(NameL,"n");
   if (info=="") info=StringConcatenate(StringSubstr(NameL,6,0),"  lot ",DoubleToStr(Lot,2),"  SL " ,DoubleToStr(SL ,0),"  TP " ,DoubleToStr(TP ,0));
   ObjectDelete (NameLine);
   ObjectCreate (NameLine, OBJ_TEXT,0,Time[WindowFirstVisibleBar()-WindowFirstVisibleBar()/4],Y1+shift_Y,0,0,0,0);
   ObjectSetText(NameLine, info ,10,"Arial");
   ObjectSet    (NameLine, OBJPROP_COLOR, ObjectGet(NameL,OBJPROP_COLOR));
}
//--------------------------------------------------------------------

Comments