Manual_Open_and_Modify_Stop_Limit_orders_3

Author: Copyright � 2011, ������� ��������
Price Data Components
Series array that contains the lowest prices of each barSeries array that contains the highest prices of each bar
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategy
Miscellaneous
It issuies visual alerts to the screen
0 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

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---