Author: Copyright 2014, cmillion@narod.ru
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
inout_v1
//+------------------------------------------------------------------+
//|                                                        InOut.mq4 |
//|                                Copyright 2014, cmillion@narod.ru |
//|                                               http://cmillion.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, cmillion@narod.ru"
#property link      "http://cmillion.ru"
#property version   "1.00"
#property strict

#property description "Ñîâåòíèê âûñòàâëÿåò ïîçèöèþ sell â ïåðèîä âðåìåíè ñ TimeStart ïî TimeEnd èëè æäåò îòêðûòèÿ ïîçèöèè ðóêàìè"
#property description "Äàëåå çàäà÷à ñîâåòíèêà çàêðûòü âñþ ñåðèþ â ïëþñ"
#property description "Åñëè ïîñëåäíÿÿ îòêðûòàÿ ïîçèöèè äîñòèãàåò óáûòêà = Loss, òî îòêðûâàåòñÿ ïðîòèâîïîëîæíàÿ ñ óâåëè÷åííûì ëîòîì"
#property description "Ïðè äîñòèæåíèè ïðîôèòà ProfitClose çàêðûâàþòñÿ âñå ïîçèöèè."

extern double  ProfitClose     = 0.5;  //çàêðûâàòü âñå ïðè ïîëó÷åíèè ïðîôèòà
extern int     Loss            = 10;
extern double  K_Lot           = 2.0;
extern int     slippage        = 3,     //Ìàêñèìàëüíî äîïóñòèìîå îòêëîíåíèå öåíû äëÿ ðûíî÷íûõ îðäåðîâ (îðäåðîâ íà ïîêóïêó èëè ïðîäàæó).
               magic           = 0;     //Ìàãè÷åñêîå ÷èñëî îðäåðà. Ìîæåò èñïîëüçîâàòüñÿ êàê îïðåäåëÿåìûé ïîëüçîâàòåëåì èäåíòèôèêàòîð.
extern double  Lot             = 0.1;
extern int     TimeStart_1     = 10,
               TimeEnd_1       = 12,
               TimeStart_2     = 15,
               TimeEnd_2       = 18;

//+------------------------------------------------------------------+
int OnInit()
{
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
void OnTick()
{
   int TekHour  = Hour();
   bool Trade=false;
   if ((TekHour >= TimeStart_1 && TekHour < TimeEnd_1) || (TekHour >= TimeStart_2 && TekHour < TimeEnd_2)) Trade=true; 
   //---
   double OOP=0,OL=0,Profit=0,MaxLot=0;
   int OT,b=0,s=0,Order=0;
   for (int i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
         { 
            OT = OrderType(); 
            if (OT<2)
            {
               OOP = NormalizeDouble(OrderOpenPrice(),Digits);
               OL = OrderLots();
               Profit+=OrderProfit()+OrderSwap()+OrderCommission();
               if (MaxLot<OL) MaxLot=OL;
               if (OT==OP_BUY)             
               {  
                  Order= 1;
               }                                         
               if (OT==OP_SELL)        
               {
                  Order=-1;
               } 
            }
         }
      }
   } 
   //---
   if (Profit>=ProfitClose && ProfitClose!=0)
   {
      Alert("Çàêðûâàåì, Profit = "+DoubleToStr(Profit,2));
      CloseAll();
   }
   //---
   double LOT=NormalizeDouble(MaxLot*K_Lot,2);
   if (Order==1 && (OOP-Bid)/Point>=Loss)
   {
      if (AccountFreeMarginCheck(Symbol(),OP_SELL, LOT) <= 0) Comment("Íåäîñòàòî÷íî ñðåäñòâ äëÿ îòêðûòèÿ SELL ",DoubleToStr(LOT,2)," ëîòà");
      else if(OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),slippage,0,0,"",magic,0,Red)==-1) 
         Print("OrderSend Sell Error ",GetLastError()," Lot ",DoubleToStr(LOT,2));
   }
   
   if (Order==-1 && (Ask-OOP)/Point>=Loss) 
   {
      if (AccountFreeMarginCheck(Symbol(),OP_BUY, LOT) <= 0) Comment("Íåäîñòàòî÷íî ñðåäñòâ äëÿ îòêðûòèÿ BUY ",DoubleToStr(LOT,2)," ëîòà");
      else if(OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),slippage,0,0,"",magic,0,Blue)==-1) 
         Print("OrderSend Buy Error ",GetLastError()," Lot ",DoubleToStr(LOT,2));
   }
   
   if (Trade && Order==0)
   {
      if(OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,0,0,"",magic,0,Red)==-1) 
         Print("Order Send 1 Sell Error ",GetLastError());
   }
}
//+------------------------------------------------------------------+
bool CloseAll()
{
   bool error=true;
   int j,err,nn,OT,OMN;
   while(true)
   {
      for (j = OrdersTotal()-1; j >= 0; j--)
      {
         if (OrderSelect(j, SELECT_BY_POS))
         {
            OMN = OrderMagicNumber();
            if (OrderSymbol() == Symbol() && OMN == magic)
            {
               OT = OrderType();
               if (OT==OP_BUY) 
               {
                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
                  if (error) Comment("Çàêðûò îðäåð N ",OrderTicket(),"  ïðèáûëü ",OrderProfit(),
                                     "     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
               }
               if (OT==OP_SELL) 
               {
                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
                  if (error) Comment("Çàêðûò îðäåð N ",OrderTicket(),"  ïðèáûëü ",OrderProfit(),
                                     "     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
               }
               if (!error) 
               {
                  err = GetLastError();
                  if (err<2) continue;
                  if (err==129) 
                  {  Comment("Íåïðàâèëüíàÿ öåíà ",TimeToStr(TimeCurrent(),TIME_SECONDS));
                     RefreshRates();
                     continue;
                  }
                  if (err==146) 
                  {
                     if (IsTradeContextBusy()) Sleep(2000);
                     continue;
                  }
                  Comment("Îøèáêà ",err," çàêðûòèÿ îðäåðà N ",OrderTicket(),
                          "     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
               }
            }
         }
      }
      int n=0;
      for (j = 0; j < OrdersTotal(); j++)
      {
         if (OrderSelect(j, SELECT_BY_POS))
         {
            OMN = OrderMagicNumber();
            if (OrderSymbol() == Symbol() && OMN == magic)
            {
               OT = OrderType();
               if (OT==OP_BUY || OT==OP_SELL) n++;
            }
         }  
      }
      if (n==0) break;
      nn++;
      if (nn>10) {Alert(Symbol()," Íå óäàëîñü çàêðûòü âñå ñäåëêè, îñòàëîñü åùå ",n);return(0);}
      Sleep(1000);
      RefreshRates();
   }
   return(1);
}
//--------------------------------------------------------------------

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