cm trade Rectangle

Author: Copyright 2019, cmillion@narod.ru
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reached
0 Views
0 Downloads
0 Favorites
cm trade Rectangle
ÿþ//+------------------------------------------------------------------+

//|                                           cm trade Rectangle.mq4 |

//|                                Copyright 2019, cmillion@narod.ru |

//|                                           http://www.cmillion.ru |

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

#property copyright "Copyright 2019, cmillion@narod.ru"

#property link      "http://www.cmillion.ru"

#property version   "1.00"

#property strict

#property description "!>25B=8: 2KAB02;O5B >@45@0 ?> AB>@>=0< ?@O<>C3>;L=8:>2"

#property description "0 25@E=NN ;8=8N ?@O<>C3>;L=8:0 2AB05B Buystop 8;8 BuyLimit"

#property description "0 =86=NN ;8=8N ?@O<>C3>;L=8:0 2AB05B SellStop 8;8 SellLimit"

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

extern double  Lot   = 0.1;

extern int     Magic = 0;

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

int OnInit()

{

   return(INIT_SUCCEEDED);

}

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

void OnDeinit(const int reason)

{

   

}

int r,b,s;

double OPB[100],OPS[100],OOPB[100],OOPS[100];

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

void OnTick()

{

   double OOP,P1,P2;

   ArrayInitialize(OPS,0);

   ArrayInitialize(OPB,0);

   ArrayInitialize(OOPB,0);

   ArrayInitialize(OOPS,0);

   int n;r=0;

   datetime T1,T2,TC=TimeCurrent();

   string txt=NULL;

   for(n=ObjectsTotal()-1; n>=0; n--) 

   {

      string ON=ObjectName(n);

      if (ObjectType(ON)!=OBJ_RECTANGLE) continue;

      T1=(datetime)ObjectGetInteger(0,ON,OBJPROP_TIME1);

      T2=(datetime)ObjectGetInteger(0,ON,OBJPROP_TIME2);

      if (T1>T2)

      {

         ObjectSetInteger(0,ON,OBJPROP_TIME1,T2);

         ObjectSetInteger(0,ON,OBJPROP_TIME2,T1);

         T1=(datetime)ObjectGetInteger(0,ON,OBJPROP_TIME1);

         T2=(datetime)ObjectGetInteger(0,ON,OBJPROP_TIME2);

      }

      P1=NormalizeDouble(ObjectGet(ON, OBJPROP_PRICE1),Digits);

      P2=NormalizeDouble(ObjectGet(ON, OBJPROP_PRICE2),Digits);

      if (P1<P2)

      {

         ObjectSetDouble(0,ON,OBJPROP_PRICE1,P2);

         ObjectSetDouble(0,ON,OBJPROP_PRICE2,P1);

         P1=ObjectGet(ON, OBJPROP_PRICE1);

         P2=ObjectGet(ON, OBJPROP_PRICE2);

      }

      if (T1>TC || TC>T2) continue; 

      OPB[r]=P1;

      OPS[r]=P2;

      txt=StringConcatenate(txt,"\nOPB=",OPB[r],"  OPS=",OPS[r]);

      r++;

   }

   //---

   Comment(txt);

   int Ticket,tip,i=0;b=0;s=0;

   for (i=OrdersTotal(); i>=0; i--) 

   {  

      if (OrderSelect(i, SELECT_BY_POS))

      {  

         if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)

         {

            tip = OrderType();

            Ticket=OrderTicket();

            OOP = NormalizeDouble(OrderOpenPrice(),Digits);

            if (tip==OP_BUY || tip==OP_BUYSTOP || tip==OP_BUYLIMIT) 

            { 

               if (PBNO(OOP) && (tip==OP_BUYSTOP || tip==OP_BUYLIMIT)) 

                  if (OrderDelete(Ticket))continue;

               OOPB[b] = OOP;

               b++;

            }

            if (tip==OP_SELL || tip==OP_SELLSTOP || tip==OP_SELLLIMIT) 

            { 

               if (PSNO(OOP) && (tip==OP_SELLSTOP || tip==OP_SELLLIMIT)) 

                  if (OrderDelete(Ticket))continue;

               OOPS[s] = OOP;

               s++;

            }

         }

      }

   } 

   //---   

   double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);       

   for (i=r-1; i>=0; i--) 

   {  

      if (POBNO(OPB[i]))

      {

         if (OPB[i]>Ask+STOPLEVEL*Point)

            Ticket=OrderSend(Symbol(),OP_BUYSTOP,Lot,OPB[i],0,0,0,NULL,Magic);

         if (OPB[i]<Bid-STOPLEVEL*Point)

            Ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lot,OPB[i],0,0,0,NULL,Magic);

      }

   } 

   //---          

   for (i=r-1; i>=0; i--) 

   {  

      if (POSNO(OPS[i]))

      {

         if (OPS[i]<Bid-STOPLEVEL*Point)

            Ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,OPS[i],0,0,0,NULL,Magic);

         if (OPS[i]>Ask+STOPLEVEL*Point)

            Ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lot,OPS[i],0,0,0,NULL,Magic);

      }

   } 

}

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

bool PBNO(double OOP)

{

   for (int i=r-1; i>=0; i--) 

   {  

      if (OPB[i]==OOP) return(false);

   } 

   return(true);        

}

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

bool PSNO(double OOP)

{

   for (int i=r-1; i>=0; i--) 

   {  

      if (OPS[i]==OOP) return(false);

   } 

   return(true);        

}

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

bool POBNO(double OOP)

{

   for (int i=b-1; i>=0; i--) 

   {  

      if (OOPB[i]==OOP) return(false);

   } 

   return(true);        

}

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

bool POSNO(double OOP)

{

   for (int i=s-1; i>=0; i--) 

   {  

      if (OOPS[i]==OOP) return(false);

   } 

   return(true);        

}

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

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