Author: more
Orders Execution
It automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself Checks for the total of open orders
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
ISIMOKU
//+------------------------------------------------------------------+
//|                                          ISHIMOKU.mq4            |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "more"
#property link      "mailto:tradertobe@gmail.com"
#include <stderror.mqh>
#include <stdlib.mqh>
#include <WinUser32.mqh>
//+------------------------------------------------------------------+
//ÂÑÅ Î×ÅÍÜ ÏÐÎÑÒÎ: ÎÒÊÐÛÒÈÅ/ÇÀÊÐÛÒÈÅ ÏÎÇÈÖÈÉ ÏÐÎÈÑÕÎÄÈÒ ÏÐÈ ÏÅÐÅÑÅ×ÅÍÈÅ ËÈÍÈÉ ÈÍÄÈÊÀÒÎÐÀ ÈØÈÌÎÊÓ tenkan_sen È kijun_sen.
// TakeProfit, StopLoss è Stop_0 çàäàíû äëÿ 4-õ ðàçðÿäíûõ êîòèðîâîê, åñëè êîòèðîâêè 5-òè ðàçðÿäíûå, òî ïðîãðàììà ñàìà ýòî îáíàðóæèâàåò
// è óìíîæàåò çàäàííûå âåëè÷èíû íà 10.
//+------------------------------------------------------------------+
// Bar0Mode - ðåæèì íóëåâîãî áàðà:
extern bool Bar0Mode             = true; // åñëè Bar0Mode = true, òî ïåðå÷å÷åíèå tenkan_sen È kijun_sen áóäåò ôèêñèðîâàòüñÿ ïî íóëåâîìó áàðó,
                                          // èíà÷å ïåðåñå÷åíèå áóäåò ôèêñèðîâàòüñÿ ïî ïåðâîìó áàðó.
extern int  MagicNumber          = 999;         
extern bool TradeAllowed = true;         // ðàçðåøåíèå íà òîðãîâëþ, åñëè TradeAllowed = false, íî åñòü îòêðûòàÿ ïîçèöèÿ,
                                          // òî îíà áóäåò çàêðûòà îáû÷íûì ìàíåðîì - ïðè âîçíèêíîâåíèÿ ñèãíàëà íà çàêðûòèå,
                                          // îäíàêî, íîâàÿ ïîçèöèÿ îòêðûâàòüñÿ íå áóäåò.
                                          // Ïîýòîìó çàäàâ TradeAllowed = false, ìîæíî èäòè îòäûõàòü, íàäåÿñü ÷òî âñå áóäåò õîðîøî.

extern double   Lot              = 0.1;  // ýòè ëîòîì ìû áóäåì òîðãîâàòü
// TakeProfit,StopLoss è Stop_0 çàäàíû äëÿ 4-õ ðàçðÿäíûõ êîòèðîâîê, åñëè êîòèðîâêè 5-òè ðàçðÿäíûå, òî ïðîãðàììà ñàìà ýòî îáíàðóæèâàåò
// è óìíîæàåò çàäàííûå âåëè÷èíû íà 10.
extern int      TakeProfit       = 30; // 4-õ ðàçðÿäíàÿ êîòèðîâêà
extern int      StopLoss         = 30; // 4-õ ðàçðÿäíàÿ êîòèðîâêà
extern int      Stop_0           = 10; // 4-õ ðàçðÿäíàÿ êîòèðîâêà, ïðè äîñòèæåíèå òàêîãî ïðîôèòà StopLoss ïåðåíîñèòñÿ â áåçóáûòîê.
                                       // Åñëè Stoplevel íå ïîçâîëÿåò ýòîãî ñäåëàòü, âûäàåòñÿ ñîîáùåíèå è çâóêîâîé ñèãíàë òðåâîãè.
int             Stoplevel;             // çäåñü áóäåò õðàíèòüñÿ òåêóùèé Stoplevel = MarketInfo(Symbol(),MODE_STOPLEVE)                                      

string          Indicator_Name = "ISHIMOKU_IND";
static bool     BUY_Sign, BUY_Stop, SELL_Sign, SELL_Stop;
static datetime LastBar;
int             bar2, bar1, bar0;

int _ExpertOrdersTotal;    //îáùåå êîëè÷åñòâî îðäåðîâ, ïðèíàäëåæàùèõ ýêñïåðòó
int _ExpertOrdersBuy;     
int _ExpertOrdersSell;     
int _ExpertOrdersBuyStop;    
int _ExpertOrdersSellStop;     
int _ExpertOrdersBuyLimit;    
int _ExpertOrdersSellLimit;     

// ìàññèâû, â êîòîðûõ áóäóò õðàíèòñüÿ õàðàêòåðèñòèêè îðäåðîâ ïðè âõîäå ïî òåêóùåìó òèêó:
int      _OrderTicket[], _OrderType[];
double   _OrderLots[], _OrderOpenPrice[], _OrderStopLoss[], _OrderTakeProfit[];
double   _OrderProfit[], _OrderSwap[], _OrderCommission[];
datetime _OrderOpenTime[], _OrderExpiration[];
string   _OrderComment[];
int      _OrderMagicNumber[];

color   Order_Clr;
#define ORDER_BUY_CLR  Blue 
#define ORDER_SELL_CLR Red

string OrderOpenSetOkMes           = "  - Îòêðûò/óñòàíîâëåí óñïåøíî"; 
string OrderOpenSetErrorMes        = "  - Îøèáêà îòêðûòèÿ/óñòàíîâêè"; 
string OrderOpenStoplevel_ErrorMes = "  - Îøèáêà îòêðûòèÿ: StopLoss/TakeProfit ìåíüøå òåêóùåãî Stoplevel=";

string OrderModifyOkMes            = "  - Ìîäèôèöèðîâàí óñïåøíî";   
string OrderModifyErrorMes         = "  - Îøèáêà ïðè ìîäèôèêàöèè"; 
string OrderModifyStop_0_ErrorMes  = "  - Îøèáêà ïðè ìîäèôèêàöèè: Stop_0 ìåíüøå òåêóùåãî Stoplevel="; 

string OrderDeleteOkMes        = "  - Óäàëåí óñïåøíî"; 
string OrderDeleteErrorMes     = "  - Îøèáêà ïðè óäàëåíèè"; 

string OrderCloseOkMes        = "  - Çàêðûò óñïåøíî"; 
string OrderCloseErrorMes     = "  - Îøèáêà ïðè çàêðûòèè"; 

int TradeDirection;
int LastError;
int i;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
//----
    if (Digits == 5 ||Digits == 3 ) 
    {
     TakeProfit  *=10;     
     StopLoss    *=10;  
     Stop_0      *=10;       
    }
//----
    LastBar = iTime(NULL,0,0);  
    return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   AllOrdersInit(MagicNumber);
   SetSignales(BUY_Sign, BUY_Stop, SELL_Sign, SELL_Stop, LastBar, bar2, bar1, bar0 );
   if (OrdersOpenSet(BUY_Sign, SELL_Sign)) return(0); 
   
   AllOrdersInit(MagicNumber);  
   if (OrdersClose(BUY_Stop, SELL_Stop )  ) return(0);  
   
   AllOrdersInit(MagicNumber);
   if (OrdersModify()) return(0);  
   
//----
   return(0); // âîçâðàùàåì óïðàâëåíèå òåðìèíàëó
  }
// end of int start()
void SetSignales(bool& BUY_Sign, bool& BUY_Stop, bool& SELL_Sign, bool& SELL_Stop, datetime& LastBar, int& bar2, int& bar1,int& bar0 )  
  {       
   if (Bar0Mode)
   {
//---   
    BUY_Sign  = false;
    BUY_Stop  = false;
    SELL_Sign = false;
    SELL_Stop = false;
//--- 
    bar0  = iCustom(NULL,0,Indicator_Name,0,0); 
//--- 
    bar1  = iCustom(NULL,0,Indicator_Name,0,1);
//---   
    bar2  = iCustom(NULL,0,Indicator_Name,0,2); 
//---
    if (bar0 > 0 && bar1 <= 0)  BUY_Sign = true;
    if (bar0 < 0 && bar1 >= 0)  BUY_Stop = true;
                        
    if (bar0 < 0 && bar1 >= 0)  SELL_Sign = true;
    if (bar0 > 0 && bar1 <= 0)  SELL_Stop = true;
//--- 
    return;  
   }  // end of if (Bar0Mode)
//---   
    datetime IBARS = iTime(NULL,0,0); 
//---  
   if (LastBar == IBARS) return;
   LastBar  = IBARS; 
//---   
   BUY_Sign  = false;
   BUY_Stop  = false;
   SELL_Sign = false;
   SELL_Stop = false;
//--- 
//--- 
    bar0  = iCustom(NULL,0,Indicator_Name,0,0); 
//--- 
    bar1  = iCustom(NULL,0,Indicator_Name,0,1);
//---   
    bar2  = iCustom(NULL,0,Indicator_Name,0,2); 
//---
//---
   if (bar1 > 0 && bar2 <= 0)  BUY_Sign = true;
   if (bar1 < 0 && bar2 >= 0)  BUY_Stop = true;
                        
   if (bar1 < 0 && bar2 >= 0)  SELL_Sign = true;
   if (bar1 > 0 && bar2 <= 0)  SELL_Stop = true;
//--- 
   return;  
  } // end of void SetSignales ()       
//************************************************************          
//+---------------------------------------------------------------------------------------------------------------+
//| ôóíêöèÿ îòêðûâàåò îðäåðà è óñòàíàâëèâàåò ëèìèòíûå îðäåðà èñõîäÿ èç ðåçóëüòàòîâ àíàëèçà òåêóùåé ñèòóàöèþ       |
//+---------------------------------------------------------------------------------------------------------------+
bool OrdersOpenSet(bool& BUY_Sign, bool& SELL_Sign)   // return(true) -ôóíêöèÿ âûïîëíèëà âñå ÷òî ìîãëà è óïðàâëåíèå ñëåäóåò ïåðåäàòü òåðìèíàëó
   {                                      // return(false)-â âûçîâå ôóíêöèè íå áûëî íåîáõîäèìîñòè, óïðàâëåíèå ñëåäóåò ïåðåäàòü äàëåå ïî òåëó ôóíêöèè start()
//----
    if (_ExpertOrdersTotal == 0 && TradeAllowed)  
     {
       Stoplevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
       if ( (StopLoss != 0 && StopLoss < Stoplevel) || (TakeProfit != 0 && TakeProfit < Stoplevel) )
       {
        PlaySound("alert.wav");
        Print(OrderOpenStoplevel_ErrorMes+Stoplevel);
        return(false);
       }
       i = 0; // ðàäè óäîáñòâà
       TradeDirection = iif(BUY_Sign,+1,-1);
      _OrderType       [i] = iif(TradeDirection < 0,OP_SELL,OP_BUY);
      _OrderLots       [i] = Lot;
      _OrderOpenPrice  [i] = iif(_OrderType[i]==OP_BUY,Ask,Bid);

      _OrderStopLoss  [i] = iif(_OrderType[i]==OP_BUY,_OrderOpenPrice[i] - StopLoss * Point,_OrderOpenPrice[i] + StopLoss * Point);
      _OrderStopLoss  [i] = iif( _OrderStopLoss[i]==_OrderOpenPrice[i],0,_OrderStopLoss[i]);

      _OrderTakeProfit[i] = iif(_OrderType[i]==OP_BUY,_OrderOpenPrice[i] + TakeProfit*Point,_OrderOpenPrice[i] - TakeProfit*Point);
      _OrderTakeProfit[i] = iif(_OrderTakeProfit[i] == _OrderOpenPrice[i],0,_OrderTakeProfit[i]);

      _OrderMagicNumber[i] = MagicNumber;
      _OrderComment    [i] = " "; 
      Order_Clr            = iif(TradeDirection > 0,ORDER_BUY_CLR,ORDER_SELL_CLR);  
      if (_OrderSend())
      {
       BUY_Sign  = iif(TradeDirection == +1,false,BUY_Sign ); 
       SELL_Sign = iif(TradeDirection == -1,false,SELL_Sign); 
      }
      return(true);
     } // end of if (_ExpertOrdersTotal == 0 && TradeAllowed)
 //----
    return(false); // âûçîâ ôóíêöèè íå áûë íåîáõîäèì, óïðàâëåíèå ñëåäóåò ïåðåäàòü äàëåå ïî òåëó ôóíêöèè start()
   } // end of bool OrdersOpenSet(BUY_Sign, SELL_Sign)
//+------------------------------------------------------------------+
//| ôóíêöèÿ ïîñûëàåò íà ÒÎÐÃÎÂÛÉ ÑÅÐÂÅÐ êîìàíäû íà íåìåäëåííîå       |
//| îòêðûòèå îðäåðà èëè íà óñòàíîâêó ëèìèòíîãî îðäåðà                |
//+------------------------------------------------------------------+
bool _OrderSend()
  {
   if (IsTradeContextBusy()) { PlaySound("alert.wav"); return(false);} // òîðãîâûé ïîòîê çàíÿò, ïîäîæäåì ñëåäóþùåãî òèêà
   _OrderTicket[i]=  
        OrderSend(Symbol(),_OrderType       [i]
                          ,_OrderLots       [i]
                          ,_OrderOpenPrice  [i] ,3
                          ,_OrderStopLoss   [i]
                          ,_OrderTakeProfit [i]
                          ,_OrderComment    [i]
                          ,_OrderMagicNumber[i],0,Order_Clr);
   if (_OrderTicket[i] < 0)
    {
     LastError = GetLastError();
     Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+OrderOpenSetErrorMes+" : "+ LastError+" - "+ErrorDescription(LastError));
     PlaySound("alert.wav");
     return(false);
    }
   Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderOpenSetOkMes);
   PlaySound("ok.wav");
   return(true);
}    // end of bool _OrderSend()       
//+---------------------------------------------------------------------------------------+
//| ôóíêöèÿ ïðîèçâîäèò ìîäèôèêàöèþ îðäåðîâ èñõîäÿ èç ðåçóëüòàòîâ àíàëèçà òåêóùåé ñèòóàöèè |
//+---------------------------------------------------------------------------------------+
bool OrdersModify()    // return(true) -ôóíêöèÿ âûïîëíèëà âñå ÷òî ìîãëà è óïðàâëåíèå ñëåäóåò ïåðåäàòü òåðìèíàëó
   {                   // return(false)-â âûçîâå ôóíêöèè íå áûëî íåîáõîäèìîñòè, óïðàâëåíèå ñëåäóåò ïåðåäàòü äàëåå ïî òåëó ôóíêöèè start()
    if (_ExpertOrdersTotal == 0) return(false);
    i = 0; // ðàäè óäîáñòâà
    TradeDirection = iif(_OrderType[i] == OP_BUY,+1,-1);
    double CurrentPrice = iif(TradeDirection == +1,Bid,Ask);
    int Profit = iif(TradeDirection == +1,(CurrentPrice - _OrderOpenPrice[i])/Point,(_OrderOpenPrice[i] - CurrentPrice)/Point);
    if (Profit < Stop_0) return(false);
    Stoplevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
    if (Stop_0 <= Stoplevel)
    {
     PlaySound("alert.wav");
     Print("("+MagicNumber+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderModifyStop_0_ErrorMes+Stoplevel);
     return(false);
    }
    if (_OrderStopLoss  [i] >= _OrderOpenPrice [i]) return(false);
    _OrderStopLoss  [i] = _OrderOpenPrice [i]; 
    _OrderModify();
    return(true); 
   } // end of bool OrdersModify()
//+--------------------------------------------------------------------+
//| ôóíêöèÿ ïîñûëàåò íà ÒÎÐÃÎÂÛÉ ÑÅÐÂÅÐ êîìàíäó íà íåìåäëåííóþ         |
//| ìîäèôèêàöèþ îòêðûòîãî èëè ëèìèòíîãî îðäåðà                         |
//+--------------------------------------------------------------------+
bool _OrderModify()
  {
   if (IsTradeContextBusy()) { PlaySound("alert.wav"); return(false);} // òîðãîâûé ïîòîê çàíÿò, ïîäîæäåì ñëåäóþùåãî òèêà
   if (OrderModify(_OrderTicket    [i]
                  ,_OrderOpenPrice [i]
                  ,_OrderStopLoss  [i]
                  ,_OrderTakeProfit[i]
                  ,0
                  ,CLR_NONE))
    {
     Print("("+MagicNumber+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderModifyOkMes);
     PlaySound("ok.wav");
     return(true);
    }
     LastError = GetLastError(); if (LastError == ERR_NO_RESULT) return(true);
     Print("("+MagicNumber+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderModifyErrorMes+" : "+ LastError+" - "+ErrorDescription(LastError));
     PlaySound("alert.wav");
     return(false);
  }  // end of bool _OrderModify() 
//+---------------------------------------------------------------------------------------+
//| ôóíêöèÿ ïðîèçâîäèò óäàëåíèå ñòîïîâûõ îðäåðîâ, êîãäà îòêðûòûõ îðäåðîâ óæå íå îñòàëîñü  |
//+---------------------------------------------------------------------------------------+
/*
bool OrdersDelete()    // return(true) -ôóíêöèÿ âûïîëíèëà âñå ÷òî ìîãëà è óïðàâëåíèå ñëåäóåò ïåðåäàòü òåðìèíàëó
{                   // return(false)-â âûçîâå ôóíêöèè íå áûëî íåîáõîäèìîñòè, óïðàâëåíèå ñëåäóåò ïåðåäàòü äàëåå ïî òåëó ôóíêöèè start()
//----
    if (TradeCycleClose)
    {
     if ( (_ExpertOrdersSell + _ExpertOrdersBuy) != 0)  return(false);
     if (_ExpertOrdersTotal == 0) { TradeCycleClose = false; return(false); }
     
     for (i = 0; i < _ExpertOrdersTotal; i++)  
     {
 	   switch(_OrderType [i])
      {
       case OP_BUYSTOP  : _OrderDelete();   break; 
       case OP_SELLSTOP : _OrderDelete();   break;
      }
     }     
    }
  //----
    return(true);  
}
//+--------------------------------------------------------------------+
//| ôóíêöèÿ ïîñûëàåò íà ÒÎÐÃÎÂÛÉ ÑÅÐÂÅÐ êîìàíäó íà íåìåäëåííîå         |
//| óäàëåíèå ëèìèòíîãî îðäåðà                                          |
//+--------------------------------------------------------------------+
bool _OrderDelete()
  {
   if (IsTradeContextBusy()) { PlaySound("alert.wav"); return(false);} // òîðãîâûé ïîòîê çàíÿò, ïîäîæäåì ñëåäóþùåãî òèêà
   if (OrderDelete(_OrderTicket[i]
                   ,CLR_NONE))
    {
     Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderDeleteOkMes);
     PlaySound("ok.wav");
     return(true);
    }
     LastError = GetLastError();  
     Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderDeleteErrorMes+" : "+ LastError+" - "+ErrorDescription(LastError));
     PlaySound("alert.wav");
     return(false);
  }  
*/  
//+----------------------------------------------------------------------------------------------------------------------+
//| ôóíêöèÿ ïðîèçâîäèò çàêðûòèå âñåõ îòêðûòûõ îðäåðîâ, â ñëó÷àå åñëè îáíàðóæèò ñìåíó òðåíäà ïî ïðîñòîìó ïðèçíàêó Èøèìîêó |
//+----------------------------------------------------------------------------------------------------------------------+
bool OrdersClose(bool& BUY_Stop, bool& SELL_Stop )   // return(true) -ôóíêöèÿ âûïîëíèëà âñå ÷òî ìîãëà è óïðàâëåíèå ñëåäóåò ïåðåäàòü òåðìèíàëó
{                  // return(false)-â âûçîâå ôóíêöèè íå áûëî íåîáõîäèìîñòè, óïðàâëåíèå ñëåäóåò ïåðåäàòü äàëåå ïî òåëó ôóíêöèè start()
    if ( (BUY_Stop && _ExpertOrdersBuy  != 0) ||  (SELL_Stop && _ExpertOrdersSell != 0))
     {
      i = 0;
      TradeDirection = iif(BUY_Stop,+1,-1);
      _OrderOpenPrice  [i] = iif(TradeDirection == +1,Bid,Ask);
      Order_Clr            = iif(TradeDirection > 0,ORDER_BUY_CLR,ORDER_SELL_CLR);  
      if (_OrderClose())
      {
       BUY_Stop  = iif(TradeDirection == +1,false,BUY_Stop ); 
       SELL_Stop = iif(TradeDirection == -1,false,SELL_Stop); 
      }
      return(true);
     } // end of if ( (BUY_Stop && _ExpertOrdersOP_BUY  != 0) ||  (SELL_Stop && _ExpertOrdersOP_SELL != 0))  
    return(false);   
}  // end of if ( (BUY_Stop && _ExpertOrdersBuy  != 0) ||  (SELL_Stop && _ExpertOrdersSell != 0))
 //+--------------------------------------------------------------------+
//| ôóíêöèÿ ïîñûëàåò íà ÒÎÐÃÎÂÛÉ ÑÅÐÂÅÐ êîìàíäó íà íåìåäëåííîå         |
//| çàêðûòèå îòêðûòîãîî îðäåðà                                          |
//+--------------------------------------------------------------------+
bool _OrderClose()
  {
   if (IsTradeContextBusy()) { PlaySound("alert.wav"); return(false);} // òîðãîâûé ïîòîê çàíÿò, ïîäîæäåì ñëåäóþùåãî òèêà
   if (OrderClose(_OrderTicket   [i]
                 ,_OrderLots     [i]
                 ,_OrderOpenPrice[i],3
                 ,Order_Clr))
    {
     Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderCloseOkMes);
     PlaySound("ok.wav");
     return(true);
    }
     LastError = GetLastError();  
     Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderCloseErrorMes+" : "+ LastError+" - "+ErrorDescription(LastError));
     PlaySound("alert.wav");
     return(false);
  }  // end of bool _OrderClose()
//+-----------------------------------------------------------------------------------------------------+
//| ôóíêöèÿ ïðîèçâîäèò  ôîðìèðîâàíèå ìàññèâîâ, êàæäûé èç êîòîðûõ ïðåäñòàâëÿåò îäíî                      |
//| ïîëå îðäåðà, ïðèíàäëåæàùåãî ýêñïåðòó. òàêèì îáðàçîì, ìíîæåñòâî ýëåìåíòîâ ìàññèâîâ ñ                 |
//| îäíèì çíà÷åíèå èíäåêñà ïðåäñòàâëÿåò îðäåð. ìàññèâû îòñîðòèðîâàíû â ïîðÿäêå âîçðàñòàíèÿ òèêåòà       |
//| ðàçìåðíîñòü ìàññèâîâ =  _ExpertOrdersTotal + 1                                                      |
//| ïîñëåäíèå ýëåìåíòû ìàññèâîâ áóäóò èñïîëüçîâàòüñÿ íàìè äëÿ ôîðìèðîâàíèÿ äàííûõ ïðè îòêðûòèè/óñòàíîâêè|
//| íîâîãî îðäåðà                                                                                       |
 //+----------------------------------------------------------------------------------------------------+
//"mailto:komposterius@mail.ru" - Àíäðåé Õàòèìëÿíñêèé - àâòîð ýòîé ôóíêöèè
//http://www.mql4.com/ru/users/komposter Àíäðåé Õàòèìëÿíñêèé
void AllOrdersInit( int magic )
{
	int _GetLastError = 0, _OrdersTotal = OrdersTotal();
    _ExpertOrdersTotal     = 0;    //îáùåå êîëè÷åñòâî îðäåðîâ, ïðèíàäëåæàùèõ ýêñïåðòó
    _ExpertOrdersBuy       = 0;    // 
    _ExpertOrdersSell      = 0;    // 
    _ExpertOrdersBuyStop   = 0;    // 
    _ExpertOrdersSellStop  = 0;    // 
    _ExpertOrdersBuyLimit  = 0;    // 
    _ExpertOrdersSellLimit = 0;    // 
 	// èçìåíÿåì ðàçìåðû ìàññèâîâ ïîä òåêóùåå êîë-âî ïîçèöèé
	// (åñëè _OrdersTotal = 0, ìåíÿåì ðàçìåð ìàññèâîâ íà 1) 
	int temp_value = MathMax( _OrdersTotal+1, 1 );
	ArrayResize( _OrderTicket,			temp_value );
	ArrayResize( _OrderType,			temp_value );
	ArrayResize( _OrderLots,			temp_value );
	ArrayResize( _OrderOpenPrice,		temp_value );
	ArrayResize( _OrderStopLoss,		temp_value );
	ArrayResize( _OrderTakeProfit,	temp_value );
	ArrayResize( _OrderOpenTime,		temp_value );
	ArrayResize( _OrderProfit,			temp_value );
	ArrayResize( _OrderSwap,			temp_value );
	ArrayResize( _OrderCommission,	temp_value );
	ArrayResize( _OrderComment,		temp_value );
	ArrayResize( _OrderExpiration,	temp_value );
	ArrayResize( _OrderMagicNumber,	temp_value );
	

	// îáíóëÿåì ìàññèâû
	ArrayInitialize( _OrderTicket,		0 );    
	ArrayInitialize( _OrderType,			0 );
	ArrayInitialize( _OrderLots,			0 );
	ArrayInitialize( _OrderOpenPrice,	0 );
	ArrayInitialize( _OrderStopLoss,		0 );
	ArrayInitialize( _OrderTakeProfit,	0 );
	ArrayInitialize( _OrderOpenTime,		0 );
	ArrayInitialize( _OrderProfit,		0 );
	ArrayInitialize( _OrderSwap,			0 );
	ArrayInitialize( _OrderCommission,	0 );
	ArrayInitialize( _OrderExpiration,	0 );
	ArrayInitialize( _OrderMagicNumber,	0 );
   
 	for ( int z = 0;  z < _OrdersTotal;  z ++ )
 	{
		if ( !OrderSelect( z, SELECT_BY_POS ) )
		{
			_GetLastError = GetLastError();
			Print("OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError );
			continue;
		}
		if (OrderMagicNumber() == magic && OrderSymbol() == Symbol() )
		{
			// çàïîëíÿåì ìàññèâ òèêåòîâ îðäåðîâ, ïðèíàäëåæàùèõ åêñïåðòó
			_OrderTicket [_ExpertOrdersTotal] = OrderTicket();
 			_ExpertOrdersTotal ++;
 	   	switch(OrderType())
           {
            case OP_BUY       : _ExpertOrdersBuy++ ;        break; 
            case OP_SELL      : _ExpertOrdersSell++ ;       break;
            case OP_BUYSTOP   : _ExpertOrdersBuyStop++ ;    break;
            case OP_SELLSTOP  : _ExpertOrdersSellStop++ ;   break;
            case OP_BUYLIMIT  : _ExpertOrdersBuyLimit++ ;   break;
            case OP_SELLLIMIT : _ExpertOrdersSellLimit++ ;  break;
           }
		}
	}
	// èçìåíÿåì ðàçìåðû ìàññèâîâ ïîä êîë-âî ïîçèöèé, ïðèíàäëåæàùèõ ýêñïåðòó + îäíà
	// (åñëè _ExpertOrdersTotal = 0, ìåíÿåì ðàçìåð ìàññèâîâ íà 1)
	temp_value = MathMax( _ExpertOrdersTotal+1, 1 );
	ArrayResize( _OrderTicket,			temp_value );
	ArrayResize( _OrderType,			temp_value );
	ArrayResize( _OrderLots,			temp_value );
	ArrayResize( _OrderOpenPrice,		temp_value );
	ArrayResize( _OrderStopLoss,		temp_value );
	ArrayResize( _OrderTakeProfit,	temp_value );
	ArrayResize( _OrderOpenTime,		temp_value );
	ArrayResize( _OrderProfit,			temp_value );
	ArrayResize( _OrderSwap,			temp_value );
	ArrayResize( _OrderCommission,	temp_value );
	ArrayResize( _OrderComment,		temp_value );
	ArrayResize( _OrderExpiration,	temp_value );
	
	_OrderTicket[_ExpertOrdersTotal] = 99999999;// ïðè ñîðòèðîâêå ýòîò ïóñòîé ýëåìåíò áóäåò ïîñëåäíèì
   ArraySort(_OrderTicket);  // ïîëó÷èì õðîíîëîãè÷åñêèé ïîðÿäîê...
//------------------------------------------------------------------------------------------------------------------------
	for (   z = 0;  z < _ExpertOrdersTotal;  z ++ )
 	{
		if ( !OrderSelect( _OrderTicket[z], SELECT_BY_TICKET ) )
		{
			_GetLastError = GetLastError();
			Print("OrderSelect( ", _OrderTicket[z], ", SELECT_BY_TICKET ) - Error #", _GetLastError );
			continue;
		}
 			// çàïîëíÿåì îñòàëüíûå ìàññèâû
 			_OrderType			[z] = OrderType();
			_OrderLots			[z] = NormalizeDouble( OrderLots(), 2 );
			_OrderOpenPrice	[z] = NormalizeDouble( OrderOpenPrice(), Digits );
			_OrderStopLoss		[z] = NormalizeDouble( OrderStopLoss(), Digits );
			_OrderTakeProfit	[z] = NormalizeDouble( OrderTakeProfit(), Digits );
			_OrderOpenTime		[z] = OrderOpenTime();
			_OrderProfit		[z] = NormalizeDouble( OrderProfit(), 2 );
			_OrderSwap			[z] = NormalizeDouble( OrderSwap(), 2 );
			_OrderCommission	[z] = NormalizeDouble( OrderCommission(), 2 );
			_OrderComment		[z] = OrderComment();
			_OrderExpiration	[z] = OrderExpiration();
	      _OrderMagicNumber [z] = OrderMagicNumber();
			
  	}
//------------------------------------------------------------------------------------------------------------------------ 
return;	
}
//------------------------------------------------------------------------------------------------------------------------   

//http://www.mql4.com/ru/users/bstone -Êðàìàðü Ðîìàí - àâòîð ÷åòûðåõ, ñëåäóþùèõ íèæå ôóíêöèé
//+------------------------------------------------------------------+
//| helper functions   -   Êðàìàðü Ðîìàí                                     
//+------------------------------------------------------------------+

int sign( double v )
{
    if( v < 0 ) return( -1 );
    return( 1 );
}

//+------------------------------------------------------------------+
double iif( bool condition, double ifTrue, double ifFalse )
{
    if( condition ) return( ifTrue );
    
    return( ifFalse );
}

//+------------------------------------------------------------------+
string iifStr( bool condition, string ifTrue, string ifFalse )
{
    if( condition ) return( ifTrue );

    return( ifFalse );
}

//+------------------------------------------------------------------+
int orderDirection()
{
    return( 1 - 2 * ( OrderType() % 2 ) );
}
//------------------------------------------------------------------------------------------------------------------------   
 

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