DeleteTradeArrows

Author: Copyright 2018, MetaQuotes Software Corp.
0 Views
0 Downloads
0 Favorites
DeleteTradeArrows
ÿþ//+------------------------------------------------------------------+

//|                                            DeleteTradeArrows.mq5 |

//|                        Copyright 2018, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2018, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#property indicator_chart_window



//--- input parameters

input bool     del_pending=true;             // C40;OBL >B;>65==8:8?

input datetime del_before_date;              // C40;OBL >1J5:BK 4> 40BK

input datetime del_after_date;               // C40;OBL >1J5:BK ?>A;5 40BK

input bool     print_every_deletion=false;   // A>>1I0BL >1 C40;5==KE >1J5:B0E?

bool bool_del_before=false;

bool bool_del_after=false;



string object_names[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int OnInit()

  {

//--- indicator buffers mapping

   PrintFormat("%s: C40;OBL >B;>65==K5 - %s",__FUNCTION__,string(del_pending));

   PrintFormat("%s:  del_before_date=%s",__FUNCTION__,TimeToString(del_before_date));

   PrintFormat("%s:  del_after_date=%s",__FUNCTION__,TimeToString(del_after_date));

//--- >B;04:0

//PrintFormat("del_before_date=%d",long(del_before_date));

//PrintFormat("del_after_date=%d",long(del_after_date));

   Comment("Objects on chart=",ObjectsTotal(0));

//--- A>74048< D;038 4;O C40;5=8O ?> 40B5

   bool_del_before=(long(del_before_date));

   bool_del_after=(long(del_after_date));

   Print("bool_del_before=",bool_del_before);

   Print("bool_del_after=",bool_del_after);

   ArrayResize(object_names,ObjectsTotal(0));

   ZeroMemory(object_names);

//---   

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

//---

   static bool first_run=true;

//--- 30@0=B8@C5< 70?CA:/C40;5=85 B>;L:> 2 ?5@2K9 2K7>2

   if(first_run)

      first_run=false;

   else

      return(0);

//--- C40;O5< >B;>65==8:8

   int pending_deleted=0;

   int to_delete_object_name_count=0;

   int total=ObjectsTotal(0);

   string name;

   if(del_pending)

     {

      for(int i=total;i>-0;i--)

        {

         name=ObjectName(0,i);

         ENUM_OBJECT type=(ENUM_OBJECT)ObjectGetInteger(0,name,OBJPROP_TYPE);

         if(type==OBJ_ARROW)

           {

            if((StringFind(name,"buy limit")!=-1) || (StringFind(name,"buy stop")!=-1) || (StringFind(name,"sell limit")!=-1) || (StringFind(name,"sell stop")!=-1))

              {

               string order_id=GetOrderID(name);

               //Print(i," - >1J5:B ",name,"   type=",type,"   id=",order_id);

               //--- 4>1028< 2 <0AA82 5I5 >48= ?@5D8:A 4;O C40;5=8O >1J5:B>2 A B0:8< 65 order_id  

               if(order_id!="")

                 {

                  object_names[to_delete_object_name_count]=order_id;

                  to_delete_object_name_count++;

                 }

               //---

               if(ObjectDelete(0,name))

                 {

                  if(print_every_deletion)

                     Print(__FUNCTION__,": ",pending_deleted,". deleted ",name,"   type=",type,"   id=",order_id);

                  pending_deleted++;

                 }

              }

           }

        }

      PrintFormat("Deleted %d arrows",pending_deleted);

      //--- B5?5@L C40;8< ;8=88,  :>B>@K5 84CB : >B;>65==8:0<

      pending_deleted=0;

      //Print("to_delete_object_name_count=",to_delete_object_name_count);

      if(to_delete_object_name_count>0)

        {

         for(int i=to_delete_object_name_count;i>=0;i--)

           {

            if(DeleteObjectByPrefix(object_names[i]))

              {

               pending_deleted++;

              }

           }

         PrintFormat("Deleted %d trendlines",pending_deleted);

        }

     }



//--- C40;O5< AB@5;:8 4> C:070==>9 40BK

   if(bool_del_before)

     {

      int arrow_deleted=0;

      total=ObjectsTotal(0);

      datetime arrow_time;

      for(int i=total;i>-0;i--)

        {

         name=ObjectName(0,i);

         arrow_time=(datetime)ObjectGetInteger(0,name,OBJPROP_TIME);

         if(arrow_time<del_before_date)

           {

            if(ObjectDelete(0,name))

              {

               if(print_every_deletion)

                 {

                  //PrintFormat(__FUNCTION__,": ",arrow_deleted,". deleted ",name,"   type=",type,"   id=",order_id);

                  PrintFormat("%s: %d. deleted %s - %s",__FUNCTION__,i,TimeToString(arrow_time),name);

                  arrow_deleted++;

                 }

              }

           }

        }

      PrintFormat("Deleted before %s => %d objects",TimeToString(del_before_date),arrow_deleted);

     }

//--- C40;O5< AB@5;:8 ?>A;5 C:070==>9 40BK

   if(bool_del_after)

     {

      int arrow_deleted=0;

      total=ObjectsTotal(0);

      datetime arrow_time;

      for(int i=total;i>-0;i--)

        {

         name=ObjectName(0,i);

         arrow_time=(datetime)ObjectGetInteger(0,name,OBJPROP_TIME);

         if(arrow_time>del_after_date)

           {

            if(ObjectDelete(0,name))

              {

               if(print_every_deletion)

                 {

                  //PrintFormat(__FUNCTION__,": ",arrow_deleted,". deleted ",name,"   type=",type,"   id=",order_id);

                  PrintFormat("%s: %d. deleted %s - %s",__FUNCTION__,i,TimeToString(arrow_time),name);

                  arrow_deleted++;

                 }

              }

           }

        }

      PrintFormat("Deleted after %s => %d objects",TimeToString(del_before_date),arrow_deleted);

     }

   string comment=StringFormat("Objects on chart=%d",ObjectsTotal(0));

   comment=comment+"\r\n"+StringFormat("delete pending==%s",(string)del_pending);

   if(bool_del_before)

      comment=comment+"\r\n"+StringFormat("delete before %s",TimeToString(del_before_date));

   if(bool_del_after)

      comment=comment+"\r\n"+StringFormat("delete after %s",TimeToString(del_after_date));

   comment=comment+"\r\n"+StringFormat("delete pending==%s",(string)del_pending);

   Comment(comment);

//--- return value of prev_calculated for next call

   return(rates_total);

  }

//+------------------------------------------------------------------+

//| =0E>48B 2 8<5=8 >1J5:B0 ID >@45@0                                |

//+------------------------------------------------------------------+

string GetOrderID(string arrow_name)

  {

   string id="";

   int id_pos=-1;

//--- 8<O >1J5:B0-AB@5;:8 A =><5@>2 >@45@0 2A5340 =0G8=05BAO A A8<2>;0 @5H5B:8 #

   if((id_pos=StringFind(arrow_name,"#"))!=-1)

     {

      int pos=StringFind(arrow_name," ",id_pos);

      id=StringSubstr(arrow_name,0,pos);

     }

   return id;

  }

//+------------------------------------------------------------------+

//| C40;O5B >1J5:BK A C:070==K< ?@5D8:A>< 2 8<5=8                    |

//+------------------------------------------------------------------+

bool DeleteObjectByPrefix(string prefix)

  {

   bool res=false;

//---

   int total=ObjectsTotal(0);

   string name;

   for(int i=total;i>-0;i--)

     {

      name=ObjectName(0,i);

      if(StringFind(name,prefix)==0)

        {

         if(res=ObjectDelete(0,name))

           {

            if(print_every_deletion)

               Print(__FUNCTION__,":  deleted ",name);

           }

        }

     }

   return res;

  }

//+------------------------------------------------------------------+

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