cm-management_v_0_4

Author: Copyright � 2012, ������� ��������
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategy
Miscellaneous
It opens Message Boxes to the user
0 Views
0 Downloads
0 Favorites
cm-management_v_0_4
//+------------------------------------------------------------------+
//| Ðó÷íàÿ óñòàíîâêà è ïåðåìåùåíèå îðäåðîâ è ñòîïîâ ñ ïîìîùüþ ëèíèé  |
//|                                Manual Open and Modify orders.mq4 |
//|                               Copyright © 2012, Õëûñòîâ Âëàäèìèð |
//|                                                cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Õëûñòîâ Âëàäèìèð"
#property link      "cmillion@narod.ru"
#property show_inputs
#include <WinUser32.mqh>

//--------------------------------------------------------------------
extern int Magic = -1;   //óíèêàëüíûé íîìåð îðäåðîâ êîòîðûìè óïðàâëÿåò ñîâåòíèê (-1 âñå îðäåðà ñ ëþáûìè ìàãèêàìè)

double OOP,OSL,OTP,Lines[3][300],LinePrice;
int tip,Ticket,n=0;
string NameLine;
//--------------------------------------------------------------------
int init()
{
   Comment("Copyright © 2012 cmillion@narod.ru");
   for (int i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic || Magic==-1))
         { 
            tip = OrderType(); 
            OOP   = NormalizeDouble(OrderOpenPrice(),Digits);
            Ticket = OrderTicket();
            if (tip>1)
            {
               NameLine = StringConcatenate(StrOrder(tip)," ",Ticket);
               drawline(NameLine, ColorOrder(tip), OOP);
               drawtext(NameLine, ColorOrder(tip), OOP);
            }
            OSL   = NormalizeDouble(OrderStopLoss(),Digits);
            if (OSL!=0) 
            {
               NameLine = StringConcatenate(StrOrder(6)," ",Ticket);
               drawline(NameLine, ColorOrder(6), OSL);
               drawtext(NameLine, ColorOrder(6), OSL);
            }
            OTP   = NormalizeDouble(OrderTakeProfit(),Digits);
            if (OTP!=0) 
            {
               NameLine = StringConcatenate(StrOrder(7)," ",Ticket);
               drawline(NameLine, ColorOrder(7), OTP);
               drawtext(NameLine, ColorOrder(7), OTP);
            }
         }
      }
   } 
}
//--------------------------------------------------------------------
int deinit()
{
   remove_objects("cm-");
   Comment("");
}
//--------------------------------------------------------------------
int start()
{
   while(!IsStopped()){RefreshRates();
   Comment("Copyright © 2012 cmillion@narod.ru","\n",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
   //0 - òèï 
      //0 - OP_BUY
      //1 - OP_SELL
      //2 - OP_BUYLIMIT
      //3 - OP_BUYSTOP
      //4 - OP_SELLLIMIT
      //5 - OP_SELLSTOP
      //6 - ñòîïëîññ
      //7 - òåéêïðîôèò
      
   //1 - öåíà
   //2 - òèêåò
   n=0;
   ArrayInitialize(Lines,0);
   for (int i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic || Magic==-1))
         { 
            tip = OrderType(); 
            OOP   = NormalizeDouble(OrderOpenPrice(),Digits);
            Ticket = OrderTicket();
            
            if (tip>1)
            {
               Lines[0][n] = tip;
               Lines[1][n] = OOP;
               Lines[2][n] = Ticket;
               n++;
            }
            OSL = NormalizeDouble(OrderStopLoss(),Digits);
            if (OSL!=0) 
            {
               Lines[0][n] = 6;
               Lines[1][n] = OSL;
               Lines[2][n] = Ticket;
               n++;
            }
            OTP = NormalizeDouble(OrderTakeProfit(),Digits);
            if (OTP!=0) 
            {
               Lines[0][n] = 7;
               Lines[1][n] = OTP;
               Lines[2][n] = Ticket;
               n++;
            }
         }
      }
   } 
   //---
   int ok;
   for (i=0; i<n; i++)
   {    
      NameLine = StringConcatenate(StrOrder(Lines[0][i])," ",Lines[2][i]);
      if (ObjectFind(StringConcatenate("cm-",NameLine))==-1)//óäàëÿåì îðäåð
      { 
         if (Lines[0][i]<6)//îòëîæêà 
         {
            if (Lines[0][i]>1)
            {
               ok=MessageBox(StringConcatenate("Óäàëèòü îðäåð ",NameLine," ?"),"", MB_YESNO|MB_TOPMOST);
               if (ok==IDYES)
               {
                  Ticket = Lines[2][i];
                  if (!OrderDelete(Ticket)) Print("Error OrderDelete ",GetLastError());
                  else 
                  {
                     ObjectDelete(StringConcatenate("cm--",NameLine));
                     ObjectDelete(StringConcatenate("cm--",StrOrder(6)," ",Lines[2][i]));
                     ObjectDelete(StringConcatenate("cm--",StrOrder(7)," ",Lines[2][i]));
                  }
               }
               else 
               {
                  drawline(NameLine, ColorOrder(Lines[0][i]), Lines[1][i]);
                  drawtext(NameLine, ColorOrder(Lines[0][i]), Lines[1][i]);
               }
            }
         }
         else//ñòîïû
         {
            Ticket = Lines[2][i];
            if (OrderSelect(Ticket,SELECT_BY_TICKET))
            {
               if (Lines[0][i]==6)//ñòîïëîññ 
               {
                  ok=MessageBox(StringConcatenate("Óäàëèòü ñòîïëîññ îðäåðà ",NameLine," ?"),"", MB_YESNO|MB_TOPMOST);
                  if (ok==IDYES)
                  {
                     if (!OrderModify(Ticket,OrderOpenPrice(),0,OrderTakeProfit(),0,ColorOrder(Lines[0][i]))) Print("Error OrderModify StopLoss = 0 ",GetLastError());
                     else ObjectDelete(StringConcatenate("cm--",NameLine));
                  }
                  else 
                  {
                     drawline(NameLine, ColorOrder(Lines[0][i]), Lines[1][i]);
                     drawtext(NameLine, ColorOrder(Lines[0][i]), Lines[1][i]);
                  }
               }
               else //òåéêïðîôèò
               {
                  ok=MessageBox(StringConcatenate("Óäàëèòü òåéêïðîôèò îðäåðà ",NameLine," ?"),"", MB_YESNO|MB_TOPMOST);
                  if (ok==IDYES)
                  {
                     if (!OrderModify(Ticket,OrderOpenPrice(),OrderStopLoss(),0,0,ColorOrder(Lines[0][i]))) Print("Error OrderModify TakeProfit = 0 ",GetLastError());
                     else ObjectDelete(StringConcatenate("cm--",NameLine));
                  }
                  else 
                  {
                     drawline(NameLine, ColorOrder(Lines[0][i]), Lines[1][i]);
                     drawtext(NameLine, ColorOrder(Lines[0][i]), Lines[1][i]);
                  }
               }
            }
         }
      }
      else//ïåðåìåùàåì
      {
         LinePrice = NormalizeDouble(ObjectGet(StringConcatenate("cm-",NameLine),OBJPROP_PRICE1),Digits);
         if (Lines[0][i]<6)//îòëîæêà 
         {
            if (Lines[0][i]>1 && Lines[1][i] != LinePrice)
            {
               Ticket = Lines[2][i];
               if (OrderSelect(Ticket,SELECT_BY_TICKET))
               {
                  if (!OrderModify(Ticket,LinePrice,OrderStopLoss(),OrderTakeProfit(),0,ColorOrder(Lines[0][i]))) Print("Error OrderModify StopLoss = 0 ",GetLastError());
                  else 
                  {
                     drawline(NameLine, ColorOrder(Lines[0][i]), LinePrice);
                     drawtext(NameLine, ColorOrder(Lines[0][i]), LinePrice);
                  }
               }
            }
         }
         else//ñòîïû
         {
            Ticket = Lines[2][i];
            if (Lines[0][i]==6)//ñòîïëîññ 
            {
               if (Lines[1][i] != LinePrice)
               {
                  if (OrderSelect(Ticket,SELECT_BY_TICKET))
                  {
                     if (!OrderModify(Ticket,OrderOpenPrice(),LinePrice,OrderTakeProfit(),0,ColorOrder(Lines[0][i]))) Print("Error OrderModify StopLoss = 0 ",GetLastError());
                     else 
                     {
                        drawline(NameLine, ColorOrder(Lines[0][i]), LinePrice);
                        drawtext(NameLine, ColorOrder(Lines[0][i]), LinePrice);
                     }
                  }
               }
            }
            else //òåéêïðîôèò
            {
               if (Lines[1][i] != LinePrice)
               {
                  if (OrderSelect(Ticket,SELECT_BY_TICKET))
                  {
                     if (!OrderModify(Ticket,OrderOpenPrice(),OrderStopLoss(),LinePrice,0,ColorOrder(Lines[0][i]))) Print("Error OrderModify TakeProfit = 0 ",GetLastError());
                     else 
                     {
                        drawline(NameLine, ColorOrder(Lines[0][i]), LinePrice);
                        drawtext(NameLine, ColorOrder(Lines[0][i]), LinePrice);
                     }
                  }
               }
            }
         }
      }
   } 
   //---
   n=0;
   ArrayInitialize(Lines,0);
   for (i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic || Magic==-1))
         { 
            tip = OrderType(); 
            OOP   = NormalizeDouble(OrderOpenPrice(),Digits);
            Ticket = OrderTicket();
            
            if (tip>1)
            {
               Lines[0][n] = tip;
               Lines[1][n] = OOP;
               Lines[2][n] = Ticket;
               n++;
            }
            OSL   = NormalizeDouble(OrderStopLoss(),Digits);
            if (OSL!=0) 
            {
               Lines[0][n] = 6;
               Lines[1][n] = OSL;
               Lines[2][n] = Ticket;
               n++;
            }
            OTP   = NormalizeDouble(OrderTakeProfit(),Digits);
            if (OTP!=0) 
            {
               Lines[0][n] = 7;
               Lines[1][n] = OTP;
               Lines[2][n] = Ticket;
               n++;
            }
         }
      }
   } 
   for (i=0; i<ObjectsTotal(); i++)
   {    
      NameLine = ObjectName(i);
      if (ObjectType(NameLine)!=OBJ_HLINE) continue;
      if (StringSubstr(NameLine,0,3)!="cm-") continue;
      LinePrice = NormalizeDouble(ObjectGet(NameLine,OBJPROP_PRICE1),Digits);
      bool del=true;
      for (int j=0; j<n; j++) 
      {
         if (LinePrice==Lines[1][j]) 
         {
            drawtext(StringConcatenate(StrOrder(Lines[0][j])," ",Lines[2][j]), ColorOrder(Lines[0][j]), Lines[1][j]);
            del=false;
            break;
         }
      }
      if (del) {ObjectDelete(NameLine);ObjectDelete(StringConcatenate(NameLine," "));}
   } 
   //---
   Sleep(500);}
   return(0);
}
//--------------------------------------------------------------------
int drawline(string NameL, color col, double Y1)
{
   string NT = StringConcatenate("cm-",NameL);
   if (ObjectFind(NT)!=-1)
   {
      if (Y1==NormalizeDouble(ObjectGet(NT,OBJPROP_PRICE1),Digits)) return;
      ObjectDelete (NT);
   }
   ObjectCreate(NT, OBJ_HLINE, 0,0,Y1,0,0);
   ObjectSet   (NT, OBJPROP_COLOR, col);
   ObjectSet   (NT, OBJPROP_STYLE, STYLE_SOLID);
   ObjectSet   (NT, OBJPROP_WIDTH, 1);
   ObjectSet   (NT, OBJPROP_BACK,  false);
   ObjectSet   (NT, OBJPROP_RAY,   false);
   return;
}
//--------------------------------------------------------------------
int drawtext(string NameL, color col, double Y1)
{
   string NT = StringConcatenate("cm--",NameL);
   if (ObjectFind(NT)!=-1)
   {
      if (Y1==NormalizeDouble(ObjectGet(NT,OBJPROP_PRICE1),Digits)) return;
      ObjectDelete (NT);
   }
   ObjectCreate (NT, OBJ_TEXT,0,Time[WindowFirstVisibleBar()-WindowFirstVisibleBar()/4],Y1,0,0,0,0);
   ObjectSetText(NT, NameL ,8,"Arial");
   ObjectSet    (NT, OBJPROP_COLOR, col);
}
//--------------------------------------------------------------------
color ColorOrder(int tip)
{
   if (tip==OP_BUY) return(Lime);
   if (tip==OP_BUYSTOP) return(Lime);
   if (tip==OP_SELL) return(Red);
   if (tip==OP_SELLSTOP) return(Red);
   if (tip==OP_SELLLIMIT) return(Red);
   if (tip==OP_BUYLIMIT) return(Lime);
   if (tip==6) return(Red);
   if (tip==7) return(Blue);
   return(Gray);
}
//------------------------------------------------------------------
string StrOrder(int tip)
{
   if (tip==OP_BUY) return("Buy");
   if (tip==OP_BUYSTOP) return("BuyStop");
   if (tip==OP_SELL) return("Sell");
   if (tip==OP_SELLSTOP) return("SellStop");
   if (tip==OP_SELLLIMIT) return("SellLimit");
   if (tip==OP_BUYLIMIT) return("BuyLimit");
   if (tip==6) return("SL");
   if (tip==7) return("TP");
   return(Gray);
}
//------------------------------------------------------------------
int remove_objects(string PreName)
{
   for(int i=ObjectsTotal()-1; i>=0; i--) 
   {
      string Name=ObjectName(i);
      if (StringSubstr(Name,0,StringLen(PreName))==PreName) ObjectDelete(Name);
   }
   return(0);
}
//------------------------------------------------------------------

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 ---