GRID_3_SYMBOLS

Price Data Components
Series array that contains close prices for each bar
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself
Miscellaneous
It opens Message Boxes to the user
0 Views
0 Downloads
0 Favorites
GRID_3_SYMBOLS
#property copyright "Programming © 2015, http://cmillion.ru"
#property link      "cmillion@narod.ru"
#property strict
#property description "Ñîâåòíèê âûñòàâëÿåò ñòîï 3 ñåòè èç îðäåðîâ ïî òðåì óêàçàííûì ïàðàì"
#property description "Êàê òîëüêî ñóììàðíûé ïðîôèò ïî âñåì ïîçèöèÿì ïðåâûñèò óêàçàííûé óðîâåíü,"
#property description "ñîâåòíèê çàêðûâàåò âñå è ïî íîâîé ïåðåîòêðûâàåò ñåòè"

extern      string Symbol1 = "EURUSD";
extern      string Symbol2 = "GBPUSD";
extern      string Symbol3 = "EURJPY";

extern      int    Step01 = 4;
extern      int    Orders = 14;
extern      int    Step02 = 6;
extern      double Lot    = 0.01;
extern      double Profit = 10.0;
extern      int    Magic  = 123;
//-------------------------------
string AC;
int OnInit()
  {
   if (Symbol()!=Symbol1 || Symbol()!=Symbol2 || Symbol()!=Symbol3) Symbol1 = Symbol();
   AC = StringConcatenate(" ", AccountCurrency());
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
      Comment("Ñîâåòíèê çàêîí÷èë ñâîþ ðàáîòó");
  }
//+------------------------------------------------------------------+
void OnTick()
{
   int i,n1=0,n2=0,n3=0;
   double profit1=0,profit2=0,profit3=0;
   string symbol;
   for (i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderMagicNumber()==Magic)
         { 
            symbol=OrderSymbol();
            if (symbol==Symbol1)
            { 
               profit1+=OrderProfit()+OrderSwap()+OrderCommission();
               n1++;
            }
            if (symbol==Symbol2)
            { 
               profit2+=OrderProfit()+OrderSwap()+OrderCommission();
               n2++;
            }
            if (symbol==Symbol3)
            { 
               profit3+=OrderProfit()+OrderSwap()+OrderCommission();
               n3++;
            }
         }
      }
   }
   if (n1+n2+n3==0)
   {
      double PointEURUSD = MarketInfo(Symbol1,MODE_POINT);
      double PointGBPUSD = MarketInfo(Symbol2,MODE_POINT);
      double PointEURJPY = MarketInfo(Symbol3,MODE_POINT);
      
      double OpenEURUSD = iClose(Symbol1,PERIOD_M30,0);

      if (OrderSend (Symbol1, OP_BUYSTOP,  Lot, OpenEURUSD+Step01*PointEURUSD, 3, 0,0, "GRID", Magic,0,CLR_NONE)
      ==-1) Comment("OrderSend ",Symbol1," Error ",GetLastError());
      if (OrderSend (Symbol1, OP_SELLSTOP, Lot, OpenEURUSD-Step01*PointEURUSD, 3, 0,0, "GRID", Magic,0,CLR_NONE)
      ==-1) Comment("OrderSend ",Symbol1," Error ",GetLastError());
      RefreshRates();
      
      double OpenGBPUSD = iClose(Symbol2,PERIOD_M30,0);

      if (OrderSend (Symbol2, OP_BUYSTOP,  Lot, OpenGBPUSD+Step01*PointGBPUSD, 3, 0,0, "GRID", Magic,0,CLR_NONE)
      ==-1) Comment("OrderSend ",Symbol2," Error ",GetLastError());
      if (OrderSend (Symbol2, OP_SELLSTOP, Lot, OpenGBPUSD-Step01*PointGBPUSD, 3, 0,0, "GRID", Magic,0,CLR_NONE)
      ==-1) Comment("OrderSend ",Symbol2," Error ",GetLastError());
       RefreshRates();
     
      double OpenEURJPY = iClose(Symbol3,PERIOD_M30,0);

      if (OrderSend (Symbol3, OP_BUYSTOP,  Lot, OpenEURJPY+Step01*PointEURJPY, 3, 0,0, "GRID", Magic,0,CLR_NONE)
      ==-1) Comment("OrderSend ",Symbol3," Error ",GetLastError());
      if (OrderSend (Symbol3, OP_SELLSTOP, Lot, OpenEURJPY-Step01*PointEURJPY, 3, 0,0, "GRID", Magic,0,CLR_NONE)
      ==-1) Comment("OrderSend ",Symbol3," Error ",GetLastError());
      RefreshRates();
      
      for (i=1; i<=Orders; i++) 
      {
            if (OrderSend (Symbol1, OP_BUYSTOP,  Lot, OpenEURUSD+Step01*PointEURUSD+i*Step02*PointEURUSD, 3, 0,0, "GRID", Magic,0,CLR_NONE)
            ==-1) Comment("OrderSend ",Symbol1," Error ",GetLastError());
            if (OrderSend (Symbol1, OP_SELLSTOP, Lot, OpenEURUSD-Step01*PointEURUSD-i*Step02*PointEURUSD, 3, 0,0, "GRID", Magic,0,CLR_NONE)
            ==-1) Comment("OrderSend ",Symbol1," Error ",GetLastError());
            
            if (OrderSend (Symbol2, OP_BUYSTOP,  Lot, OpenGBPUSD+Step01*PointGBPUSD+i*Step02*PointGBPUSD, 3, 0,0, "GRID", Magic,0,CLR_NONE)
            ==-1) Comment("OrderSend ",Symbol2," Error ",GetLastError());
            if (OrderSend (Symbol2, OP_SELLSTOP, Lot, OpenGBPUSD-Step01*PointGBPUSD-i*Step02*PointGBPUSD, 3, 0,0, "GRID", Magic,0,CLR_NONE)
            ==-1) Comment("OrderSend ",Symbol2," Error ",GetLastError());
            
            if (OrderSend (Symbol3, OP_BUYSTOP,  Lot, OpenEURJPY+Step01*PointEURJPY+i*Step02*PointEURJPY, 3, 0,0, "GRID", Magic,0,CLR_NONE)
            ==-1) Comment("OrderSend ",Symbol3," Error ",GetLastError());
            if (OrderSend (Symbol3, OP_SELLSTOP, Lot, OpenEURJPY-Step01*PointEURJPY-i*Step02*PointEURJPY, 3, 0,0, "GRID", Magic,0,CLR_NONE)
            ==-1) Comment("OrderSend ",Symbol3," Error ",GetLastError());
      }
   }
   else
   {
      if (profit1+profit2+profit3 > Profit) DeleteAllOrders();
      Comment(n1," orders  ",Symbol1," Profit = ",DoubleToStr(profit1,2),AC,"\n",
              n2," orders  ",Symbol2," Profit = ",DoubleToStr(profit2,2),AC,"\n",
              n3," orders  ",Symbol3," Profit = ",DoubleToStr(profit3,2),AC,"\n",
              n1+n2+n3," orders, Profit = ",DoubleToStr(profit1+profit2+profit3,2),AC,"\nClose ",DoubleToStr(Profit,2),AC);
   }
   return;
}
//-------------------------------
void DeleteAllOrders() 
{
   string symbol;
   bool error=true;
   int j,nn=0;
   while(true)
   {
      for (j = OrdersTotal()-1; j >= 0; j--)
      {
         if (OrderSelect(j, SELECT_BY_POS))
         {
            symbol=OrderSymbol();
            if ((symbol==Symbol1 || symbol==Symbol2 || symbol==Symbol3) && OrderMagicNumber() == Magic)
            {
               int DIGITS = (int)MarketInfo(symbol,MODE_DIGITS);
               double ASK = NormalizeDouble(MarketInfo(symbol,MODE_ASK),DIGITS);
               double BID = NormalizeDouble(MarketInfo(symbol,MODE_BID),DIGITS);
               double POINT = MarketInfo(symbol,MODE_POINT);
               int OT = OrderType();
               int Ticket=OrderTicket();
               if (OT==OP_BUY) 
               {
                  error=OrderClose(Ticket,OrderLots(),BID,50,Red);
               }
               if (OT==OP_SELL) 
               {
                  error=OrderClose(Ticket,OrderLots(),ASK,50,Red);
               }
               if (OT>1) 
                  if (!OrderDelete(Ticket))
                     Comment("Îðäåð ",Ticket," îøèáêà óäàëåíèÿ ",GetLastError());
               
               if (!error) 
               {
                  int err = GetLastError();
                  if (err<2) continue;
                  if (err==129) 
                  {  Comment("Íåïðàâèëüíàÿ öåíà ",TimeToStr(TimeCurrent(),TIME_SECONDS));
                     Sleep(5000);
                     RefreshRates();
                     continue;
                  }
                  if (err==146) 
                  {
                     int ret1=MessageBox("Ïîäñèñòåìà òîðãîâëè çàíÿòà"," ", 
                         MB_RETRYCANCEL|MB_TOPMOST|MB_ICONWARNING);
                     if (ret1==IDCANCEL) return;
                     j++;
                     if (IsTradeContextBusy()) Sleep(2000);
                     continue;
                  }
                  Comment("Îøèáêà ",err," çàêðûòèÿ îðäåðà N ",Ticket,"     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
               }
            }
         }
      }
      int n=0;
      for (j = 0; j < OrdersTotal(); j++)
      {
         if (OrderSelect(j, SELECT_BY_POS))
         {
            symbol=OrderSymbol();
            if ((symbol==Symbol1 || symbol==Symbol2 || symbol==Symbol3) && OrderMagicNumber() == Magic)
            {
               n++;
            }
         }  
      }
      if (n==0) break;
      nn++;
      if (nn>10) {Comment("Íå óäàëîñü çàêðûòü âñå ñäåëêè, îñòàëîñü åùå ",n);break;}
      Sleep(1000);
      RefreshRates();
   }
}
//-------------------------------

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