Author: Ivan Katsko
Price Data Components
Series array that contains open time of each bar
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategy
Indicators Used
MACD HistogramMoving average indicatorStochastic oscillator
Miscellaneous
It issuies visual alerts to the screen
2 Views
0 Downloads
0 Favorites
iK_3D
//+------------------------------------------------------------------+
//|                                                        iK_3D.mq4 |
//|                                                      Ivan Katsko |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Ivan Katsko"
#property link      "ICQ:372739628"
//--------------------------------------------------------------- 1 --
#define NONE 0

extern bool Shift = true;              // Çàäàâàåìûé ôëàã ñäâèãà îðäåðà
extern int TrendMode = 1;        
//extern bool MACD = true;             // Èñïîëüçîâàòü MACD êàê èíäèêàòîð òðåíäà
//extern bool MA = true;               // Èñïîëüçîâàòü MA êàê èíäèêàòîð òðåíäà
//extern bool Silense = true;          // Èñïîëüçîâàòü Silense êàê èíäèêàòîð òðåíäà
//extern bool iKTrend = true;          // Èñïîëüçîâàòü iKTrend êàê èíäèêàòîð òðåíäà
extern int SilenseLevel = 10;        // Ïåðîä ÌÀ/MACD
extern int PeriodMA = 12;            // Ïåðîä ÌÀ/MACD
extern int PeriodStoch = 3;          // Çàìåäëåíèå Stochastic
extern double Lots   = 1;            // Æåñòêî çàäàííîå êîëè÷. ëîòîâ ("0" - ñîâåòíèê âûáèðàåò ñàì)
//extern int Discret=1;                // Äèñêðåòíîñòü ïîäáîðà: 1 - êàæäàÿ ïîçèöèÿ; 2 - ÷åðåç ïîçèöèþ è ò.ä.
extern double Stop   = 0; 
extern double Profit = 0; 
extern int Level     = 10;           // Ìèíèìàëüíûé óðîâåíü áëèçîñòè ê ðûíêó
extern datetime StartDateTime = D'01.01.2011';  //Íà÷àëî ðàáîòû
extern datetime FinishDateTime = D'31.12.2011'; //Êîíåö ðàáîòû
extern double Prots  = 0.07;         // Ïðîöåíò ñâîáîäíûõ ñðåäñòâ
extern int SlipPage     = 3;         // Ïðîñêàëüçûâàíèå êîòèðîêîê - â ïóíêòàõ
 
bool 
     MACD = true,
     MA = true,
     Silense = true,
     iKTrend = true,
     New_Bar=false,                  // Ôëàã íîâîãî áàðà 
     End_Bar=false,                  // Ôëàã êîíöà áàðà
     Cls=false,                      // Êðèòåðèé äëÿ çàêðûòèÿ
     Work=true,                      // Ýêñïåðò áóäåò ðàáîòàòü.
     Opn_R=false,                    // Êðèòåðèé ãîòîâíîñòè ê îòêðûòèþ îðäåðîâ
     Shift_U=false,                  // Êðèòåðèé äëÿ ñäâèãà ââåðõ
     Shift_D=false,                  // Êðèòåðèé äëÿ ñäâèãà âíèç
     Scalp_Up,
     TrendUP, TrendDN,               // Òðåíä Ââåðõ, Âíèç
     FMStoch, NMStoch, SMStoch,      // Ðàçðåøåíî ïåðâîå, ñëåäóþùåå è âòîðîå èçìåðåíèå Ñòîõàñòèêà
     AllowBuy, AllowSell,            // Ðàçðåøåíî ïîêóïàòü, ïðîäàâàòü
     AllowFindForw, AllowFindBack,   // Ðàçðåøèòü ïîèê Âïåðåä, Íàçàä
     AllowFindTralingStop=false,     // Ðàçðåøèòü ïîèñê ÒðåéëèíãÑòîïà
     AllowEsc            =false,     // Ðàçðåøèòü ñáðîñ ïîñëå çàêðûòèÿ îðäåðà
     EscStoch            =false,
     EscMACD             =false,
     EscMA               =false,
     EcsSilense          =false,
     EcsSiKTrend         =false,
     Tag_msg1=false,                 // Ôëàã ñîîáùåíèÿ 1
     Tag_msg2=false,                 // Ôëàã ñîîáùåíèÿ 2
     Tag_msg3=true;

string Symb;                         // Íàçâàíèå ôèíàíñ. èíñòðóìåíòà

static datetime New_Time;

int MaxLength    = 30,               // Ê-âî îáðàáàòûâàåìûõ âàðîâ
    NPeriod, NNPeriod;               // Ñëåäóþùèé è ïîñëå-ñëåäóþùèé ïåðèîä

double TakeProfit =10,           // ÒÐ äëÿ îòêðûâàåìîãî îðäåðà
       StopLoss   =10,             // SL äëÿ îòêðûâàåìîãî îðäåðà
       OpenLevelUP, OpenLevelDN,     // Óðîâåíü äëÿ îòêðûòèÿ Ââåðõ, Âíèç
       StopTradeLevelUP, StopTradeLevelDN, // Óðîâåíü âêëþ÷åíèÿ ÑòîïÒðåéäà Ââåðõ, Âíèç
       StopTradeUP, StopTradeDN,     // ÑòîïÒðåéäà Ââåðõ, Âíèç
       algoritm      = NONE,         // Àëãîðèòì: ">0" - "ñåãîäíÿ êàê â÷åðà"; "<0" - "ñåãîäíÿ íå êàê â÷åðà"
       sum_TP,                       // Îæèäàåìàÿ àäàïòèðîâàííàÿ ñóììà äîõîäà 
       dirOpen       = NONE,         // Íàïðàâëåíèå òåêóùåå : ">0" - êóïèòü; "<0" - ïðîäàòü
       Trade2        = NONE,         // Íàïðàâëåíèå òîðãîâëè â òåêóùåì ÒÔ íà 1-îì áàðå
       MACD1        = NONE,          // 
       MACD0        = NONE,          // 
       MA0     = NONE,               // 
       MA1     = NONE,               //
       iK0     = NONE, 
       Silense0= NONE, 
       Silense1= NONE, 
       StochM  = NONE,
       StochM1 = NONE,
       StochS  = NONE,
       ScalpLevel, 
//       now_direction = NONE,         // Íàïðàâëåíèå íàñòîÿùåå: ">0" - êóïèòü; "<0" - ïðîäàòü
//       Level,                        // Ìèíèìàëüíûé óðîâåíü SL/TP
//       Discret,                      // Äèñêðåòíîñòü ïîäáîðà: 1 - êàæäàÿ ïîçèöèÿ; 2 - ÷åðåç ïîçèöèþ è ò.ä.
       New_Open,                     // Äîñòèãíóòûé óðîâåíü öåíû
       New_SL,                       // Óðîâåíü çàêðûòèÿ îðäåðà
       index_1=2,                    // Ìíîæèòåëü 1 äëÿ ñäâèãà
       index_2;                      // Ìíîæèòåëü 2 äëÿ ñäâèãà

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   Fun_New_Bar();                      // Îïðåäåëåíèå íà÷àëà íîâîãî áàðà
//----
   int
      Total,                           // Êîëè÷åñòâî îðäåðîâ â îêíå 
      Tip=-1,                          // Òèï âûáðàí. îðäåðà (B=0,S=1)
      Ticket;                          // Íîìåð îðäåðà
   datetime 
      Time_Begin,                      // Ìîìåíò íà÷àëà ðàáî÷åãî ïåðèîäà
      Op_Time;                         // Âðåìÿ îòêðûòèÿ îðäåðà
   double
      Lot,                             // Êîëè÷. ëîòîâ â âûáðàííîì îðäåðå
      Lts,                             // Êîëè÷. ëîòîâ â îòêðûâàåìîì îðäåðå
      Min_Lot,                         // Ìèíèìàëüíîå êîëè÷åñòâî ëîòîâ
      Step,                            // Øàã èçìåíåíèÿ ðàçìåðà ëîòà
      Free,                            // Òåêóùèå ñâîáîäíûå ñðåäñòâà
      One_Lot,                         // Ñòîèìîñòü îäíîãî ëîòà
      Price,                           // Öåíà âûáðàííîãî îðäåðà
      SL,                              // SL âûáðàííîãî îðäåðà 
      TP;                              // TP âûáðàííîãî îðäåðà
   bool
      Ans  =false,                     // Îòâåò ñåðâåðà ïîñëå çàêðûòèÿ
      Opn_B=false,                     // Êðèòåðèé äëÿ îòêðûòèÿ  Buy
      Opn_S=false;                     // Êðèòåðèé äëÿ îòêðûòèÿ  Sell
      
   Cls  =false;                        // Êðèòåðèé äëÿ çàêðûòèÿ
   Time_Begin=GetTickCount();          // çàñåêàåì íà÷àëî âûïîëíåíèÿ ïðîãðàììû 
   
//------------------- Îäèí  ðàç çà ïåðèîä --
   if (New_Bar)                        // Îäèí ðàç çà ïåðèîä âûïîëíÿåòñÿ ñëåäóþùåå
     {
      Tag_msg1=true;
      End_Bar=false;
//      Opn_R=true;
      
      // Ïðåäâàðèò.îáðàáîòêà
      if(TimeCurrent()<StartDateTime)            // Âðåìÿ ñòàðòà íå íàñòóïèëî
        { 
        Alert("Âðåìÿ ñòàðòà íå íàñòóïèëî. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
        return;                                  // Âûõîä èç start()
        }            
      if (TimeCurrent()>=FinishDateTime)         //Âðåìÿ ôèíèøà íàñòóïèëî
        { 
        Alert("Âðåìÿ ôèíèøà íàñòóïèëî. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
        return;                                  // Âûõîä èç start()
        }            
      if(Bars < MaxLength)                       // Íåäîñòàòî÷íî áàðîâ
        {
         Alert("Íåäîñòàòî÷íî áàðîâ â îêíå. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
         return;                                 // Âûõîä èç start()
        }
      if(Work==false)                            // Êðèòè÷åñêàÿ îøèáêà
        {
         Alert("Êðèòè÷åñêàÿ îøèáêà. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
         return;                                 // Âûõîä èç start()
        }
     }
//------------------- Êîíåö îäèí  ðàç çà ïåðèîä --

            
   if ((TimeCurrent()-Time[0]-50)>(Period()-1)*60 //Çà 10 ñåêóíä äî íà÷àëà ïåðèîäà
       && Tag_msg1
       ) 
     { 
//      Alert("Âíèìàíèå! Íà÷èíàåòñÿ íîâûé ïåðèîä!",": ",Symb,", ",Period());
      Tag_msg1=false;
      End_Bar=true;
     }
   
//----------------------- Ó÷¸ò îðäåðîâ
   Symb=Symbol();                               // Íàçâàíèå ôèí.èíñòð.
   Total=0;                                     // Êîëè÷åñòâî îðäåðîâ
   for(int i=1; i<=OrdersTotal(); i++)          // Öèêë ïåðåáîðà îðäåð
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
        {                                       // Àíàëèç îðäåðîâ:
         if (OrderSymbol()!=Symb)continue;      // Íå íàø ôèí. èíñòðóì
         if (OrderType()>1)                     // Ïîïàëñÿ îòëîæåííûé
           {
            Alert("Îáíàðóæåí îòëîæåííûé îðäåð. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
            return;                             // Âûõîä èç start()
           }
         Total++;                               // Ñ÷¸ò÷èê ðûíî÷í. îðä
         if (Total>1)                           // Íå áîëåå îäíîãî îðä
           {
            Alert("Íåñêîëüêî ðûíî÷íûõ îðäåðîâ. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
            return;                             // Âûõîä èç start()
           }
         Ticket =OrderTicket();                 // Íîìåð âûáðàíí. îðä.
         Op_Time=OrderOpenTime();               // Âðåìÿ îòêðûòèÿ âûáð.îðä.
         Tip    =OrderType();                   // Òèï âûáðàííîãî îðä.
         Price  =OrderOpenPrice();              // Öåíà âûáðàíí. îðä.
         SL     =OrderStopLoss();               // SL âûáðàííîãî îðä.
         TP     =OrderTakeProfit();             // TP âûáðàííîãî îðä.
         Lot    =OrderLots();                   // Êîëè÷åñòâî ëîòîâ
        }
     }
     
   if (New_Bar)                                  //  íà÷àëå íîâîãî ïåðèîäà
     {
      if (Total==0)                              // Åñëè íåò îòêðûòûõ îðäåðîâ
         Opn_R=true;                             // ðàçðåøèòü îòêðûòèå îðäåð
        else                                     // åñëè îðäåð áûë îòêðûò
         Opn_R=false;                            // çàïðåòèòü îòêðûòèå (ïðè çàêðûòèè òåðìèíàëîì)
     }
      
   if (Total==0)                                 // Åñëè íåò îòêðûòûõ îðäåðîâ
     {
      Cls=false;                                 // Åù¸ íå÷åãî çàêðûâàòü
      Shift_U=false;                             // Îáíóëÿåì êðèòåðèé äëÿ ñäâèãà ââåðõ
      Shift_D=false;                             // Îáíóëÿåì êðèòåðèé äëÿ ñäâèãà âíèç
      ObjectDelete("New_Open");                  // Îäàëÿåì ëèíèè
      ObjectDelete("New_SL"); 
//      NextTrade = iCustom(0, 0, "iK_trend_v01.6",PeriodMA,History,VerExtr,4,NextPeriod, 3, 0);   
     }

//---- Èñõîäíûå äàííûå
   if(MACD)
     {
     MACD0 = iMACD(0,NNPeriod,PeriodMA,PeriodMA*2,9,PRICE_MEDIAN,MODE_MAIN,0);
     MACD1 = iMACD(0,NNPeriod,PeriodMA,PeriodMA*2,9,PRICE_MEDIAN,MODE_MAIN,1); 
     }
   if(MA)
     {
     MA0   = iMA(0,NNPeriod,PeriodMA,0,MODE_EMA,PRICE_MEDIAN,0);
     MA1   = iMA(0,NNPeriod,PeriodMA,0,MODE_EMA,PRICE_MEDIAN,1);    
     }
   if(Silense)
     {  
     Silense0   = iCustom(0, NNPeriod, "Silense",PeriodMA,288, 1, 0);
     Silense1   = iCustom(0, NNPeriod, "Silense",PeriodMA,288, 1, 1);
     }
   if(iKTrend)
     iK0= iCustom(0, NNPeriod, "iK_trend_v01.6",PeriodMA,100,4,4,0, 2, 0);

   StochM = iStochastic(0,NPeriod,5,3,PeriodStoch,MODE_EMA,0,MODE_MAIN,0);
   StochM1 = iStochastic(0,NPeriod,5,3,PeriodStoch,MODE_EMA,0,MODE_MAIN,1);
   StochS = iStochastic(0,NPeriod,5,3,PeriodStoch,MODE_EMA,0,MODE_SIGNAL,0);
   
//---- Ñáðîñ ïîñëå çàêðûòèÿ îðäåðà
   if(AllowEsc && Total==0)
     {AllowEsc=false;
     TrendUP=false;
     TrendDN=false;
     AllowFindForw=false;
     }

//---- Ñáðîñ ïðè íà÷àëå èëè èçìåíåíèè òðåíäà
   if(Total==0)
     {
     if((AllowBuy && Bid<StopLoss)
        || (AllowSell && Ask>StopLoss))
       EscStoch=true;
     if(MACD
        &&((MACD0>MACD1 && TrendDN)
         ||(MACD0<MACD1 && TrendUP)
         ||(!TrendUP && !TrendDN && MACD0>MACD1)
         ||(!TrendUP && !TrendDN && MACD0<MACD1)))
       EscMACD=true;
     if(MA
        &&((MA0>MA1 && TrendDN)
         ||(MA0<MA1 && TrendUP)
         ||(!TrendUP && !TrendDN && MA0>MA1)
         ||(!TrendUP && !TrendDN && MA0<MA1)))
       EscMA=true;
     if(Silense
        && Silense0<=Silense1)
     if(iKTrend
        && iK0==0)
       EcsSiKTrend=true;
   
     if(EscStoch
        ||EcsSiKTrend
        ||(EcsSilense
          &&(MACD || MA))
        ||(EscMACD
          && MACD && !MA)
        ||(EscMA
          && !MACD && MA)
        ||(EscMACD && EscMA
          && MACD && MA)
       )
       {FMStoch            =true;
       NMStoch             =false;
       SMStoch             =false;
       TrendUP             =false;
       TrendDN             =false;
       AllowBuy            =false;
       AllowSell           =false;
       AllowFindTralingStop=false;
       EscStoch            =false;
       EscMACD             =false;
       EscMA               =false;
       EcsSilense          =false;
       EcsSiKTrend         =false;
       OpenLevelDN=0.99*Low[0];
       OpenLevelUP=1.01*High[0];
       StopLoss=NONE;
       ObjectDelete("TrendUP");
       ObjectDelete("TrendDN");
       ObjectDelete("OpenLevelUP");
       ObjectDelete("OpenLevelDN");
       ObjectDelete("StopLoss");
       }
     }
     
//---- Îïðåäåëèì òðåíä 
//Alert("TrendUP=",TrendUP," TrendDN=",TrendDN," Silense=",Silense," MACD=",MACD," MA=",MA," Silense0=",Silense0);

   if((TrendDN || (!TrendUP && !TrendDN)) 
     && ((MACD && !MA && !Silense && MACD0>MACD1) 
        ||(MA && !MACD && !Silense && MA0>MA1) 
        ||(MACD && MA && !Silense && MACD0>MACD1 && MA0>MA1)
        ||(MACD && !MA && Silense && MACD0>MACD1 && Silense0>Silense1 && Silense0>SilenseLevel)
        ||(!MACD && MA && Silense && MA0>MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
        ||(MACD && MA && Silense && MACD0>MACD1 && MA0>MA1 && Silense0>Silense1 && Silense0>SilenseLevel) 
        ||(iKTrend && !Silense && iK0>0)
        ||(iKTrend && Silense && iK0>0 && Silense0>Silense1 && Silense0>SilenseLevel))) 
     {TrendUP=true;
     TrendDN=false;
     ObjectDelete("TrendUP");
     ObjectCreate("TrendUP",OBJ_VLINE,0,Time[0],0);
     ObjectSet("TrendUP",OBJPROP_COLOR,Green);
     }
     else
     if((TrendUP || (!TrendUP && !TrendDN)) 
       && ((MACD && !MA && !Silense && MACD0<MACD1) 
          ||(MA && !MACD && !Silense && MA0<MA1)
          ||(MACD && MA && !Silense && MACD0<MACD1 && MA0<MA1)
          ||(MACD && !MA && Silense && MACD0<MACD1 && Silense0>Silense1 && Silense0>SilenseLevel)
          ||(!MACD && MA && Silense && MA0<MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
          ||(MACD && MA && Silense && MACD0<MACD1 && MA0<MA1 && Silense0>Silense1 && Silense0>SilenseLevel) 
          ||(iKTrend && !Silense && iK0<0)
          ||(iKTrend && Silense && iK0<0 && Silense0>Silense1 && Silense0>SilenseLevel))) 
       {TrendDN=true;
       TrendUP=false;
       ObjectDelete("TrendDN");
       ObjectCreate("TrendDN",OBJ_VLINE,0,Time[0],0);
       ObjectSet("TrendDN",OBJPROP_COLOR,Red);
       }
       else
       if((MACD && !MA && !Silense && MACD0==MACD1) 
          ||(MA && !MACD && !Silense && MA0==MA1)
          ||(MACD && MA && !Silense && MACD0<MACD1 && MA0>MA1)
          ||(MACD && MA && !Silense && MACD0>MACD1 && MA0<MA1)
          ||(MACD && !MA && Silense && (MACD0==MACD1 || Silense0<=Silense1))
          ||(!MACD && MA && Silense && (MA0==MA1 || Silense0<=Silense1))
          ||(MACD && MA && Silense && ((MACD0<MACD1 && MA0>MA1) || Silense0<=Silense1))
          ||(MACD && MA && Silense && ((MACD0>MACD1 && MA0<MA1) || Silense0<=Silense1))
          ||(iKTrend && !Silense && iK0==0)
          ||(iKTrend && Silense && (iK0==0 || Silense0<Silense1)))
         {TrendUP=false;
         TrendDN=false;
         ObjectDelete("TrendUP");
         ObjectDelete("TrendDN");
         }

//---- Îïðåäåëèì ñèãíàë äëÿ âõîäà â ðûíîê
   if(FMStoch                            //Æäåì âñòðå÷íóþ âîëíó
      && 
      ((TrendUP && StochM>StochS)
       ||
       (TrendDN && StochM<StochS)))
     {NMStoch=true;
     FMStoch=false;
     SMStoch=false;
     }
 
   if(NMStoch                            //Ýòî âñòðå÷íàÿ âîëíà
      &&
      ((TrendUP && StochM<StochS)
       ||
       (TrendDN && StochM>StochS)))
     {SMStoch=true;
     NMStoch=false;
     OpenLevelDN=0.99*Low[0];
     OpenLevelUP=1.01*High[0];
     }
 
   if(SMStoch)                          //Ýòî îñíîâíàÿ âîëíà
     {if(TrendUP && StochM<=80 && StochM>StochM1) AllowBuy=true;
        else
        if(TrendDN && StochM>=20 && StochM<StochM1) AllowSell=true;
          else
          {AllowBuy=false;
          AllowSell=false;
          }
     }

//---- Èùåì òî÷êè âõîäà â ðûíîê
   if(SMStoch && Total==0)
     {if(TrendUP)                         //Äëÿ âõîäà ïî BUY
       if(iHighest(NULL,0,MODE_HIGH,3,1)==2
          && !(iLowest(NULL,0,MODE_LOW,3,1)==2)
          && OpenLevelUP>High[iHighest(NULL,0,MODE_HIGH,3,1)])
         {OpenLevelUP=High[iHighest(NULL,0,MODE_HIGH,3,1)];
         StopLoss=OpenLevelUP;
         AllowFindBack=true;
         }
     if(TrendDN)                         //Äëÿ âõîäà ïî SELL
       if(iLowest(NULL,0,MODE_LOW,3,1)==2
          && !(iHighest(NULL,0,MODE_HIGH,3,1)==2)
          && OpenLevelDN<Low[iLowest(NULL,0,MODE_LOW,3,1)])
         {OpenLevelDN=Low[iLowest(NULL,0,MODE_LOW,3,1)];
         StopLoss=OpenLevelDN;
         AllowFindBack=true;
         }
     }
     
//---- Èùåì Ñòîï óðîâåíü Íàçàä
   if(AllowFindBack && Total==0)
     {if(TrendUP)
        for(i=3; i<20; i++)
          {
          if(StopLoss>Low[i])
            StopLoss=Low[i];
            else 
            {AllowFindBack=false;
            AllowFindForw=true;
            break;
            }
          }
     if(TrendDN)
        for(i=3; i<20; i++)
          {
          if(StopLoss<High[i])
            {
            StopLoss=High[i];
            }
            else 
            {AllowFindBack=false;
            AllowFindForw=true;
            break;
            }
          }
     }
     
//---- Èùåì Ñòîï óðîâåíü Âïåðåä 
   if(AllowFindForw && Total==0)
     {if(TrendUP)
        if(StopLoss>Low[0])
          StopLoss=Low[0];
     if(TrendDN)
       if(StopLoss<High[0])
         StopLoss=High[0];
     }
     
//---- Âêëþ÷åíèå ÑòîïÒðåéäà
   if(Total==1)
     {
     StopTradeLevelUP=Price+(OpenLevelUP-StopLoss);
     StopTradeLevelDN=Price-(StopLoss-OpenLevelDN);
   
     if(!AllowFindTralingStop)
       {if(Tip==0 && Bid>StopTradeLevelUP)
         {StopLoss=Price + SlipPage*Point;
         AllowFindTralingStop=true;
         AllowFindForw=false;
         }
       if(Tip==1 && Bid<StopTradeLevelDN)
         {StopLoss=Price - SlipPage*Point;
         AllowFindTralingStop=true;
         AllowFindForw=false;
         }
       }
     }
//---- Ïîèñê ÒðåéëèíãÑòîïà
   if(AllowFindTralingStop)
     {if(Tip==1)                         
       if(iHighest(NULL,0,MODE_HIGH,3,1)==2
          && StopLoss>High[iHighest(NULL,0,MODE_HIGH,3,1)])
         StopLoss=High[iHighest(NULL,0,MODE_HIGH,3,1)];
     if(Tip==0)                       
       if(iLowest(NULL,0,MODE_LOW,3,1)==2
          && StopLoss<Low[iLowest(NULL,0,MODE_LOW,3,1)])
         StopLoss=Low[iLowest(NULL,0,MODE_LOW,3,1)];
     }

//---- Îòîáðàçèòü èíôîðìàöèþ   
   if(TrendUP)
      {Comment(
              "Opn_R=",Opn_R,"\n",
              "TrendUP=",TrendUP,"\n",
              "NMStoch=",NMStoch,"\n",
              "SMStoch=",SMStoch,"\n",
              "AllowFindForw=",AllowFindForw,"\n",
              "AllowBuy=",AllowBuy,"\n",
              "Opn_B=",Opn_B,"\n",
              "SL=",(Price-StopLoss)/Point
              );
      ObjectDelete("OpenLevelUP");
      ObjectCreate("OpenLevelUP",OBJ_HLINE,0,0,OpenLevelUP);
      ObjectSet("OpenLevelUP",OBJPROP_COLOR,Green);
      
      ObjectDelete("StopLoss");
      ObjectCreate("StopLoss",OBJ_HLINE,0,Time[0],StopLoss);
      ObjectSet("StopLoss",OBJPROP_COLOR,Brown);
      }
      else
      if(TrendDN)
         {Comment(
                 "Opn_R=",Opn_R,"\n",
                 "TrendDN=",TrendDN,"\n",
                 "NMStoch=",NMStoch,"\n",
                 "SMStoch=",SMStoch,"\n",
                 "AllowFindForw=",AllowFindForw,"\n",
                 "AllowSell=",AllowSell,"\n",
                 "Opn_S=",Opn_S,"\n",
                 "SL=",(StopLoss-Price)/Point
                 );
         ObjectDelete("OpenLevelDN");
         ObjectCreate("OpenLevelDN",OBJ_HLINE,0,Time[0],OpenLevelDN);
         ObjectSet("OpenLevelDN",OBJPROP_COLOR,Red);
      
         ObjectDelete("StopLoss");
         ObjectCreate("StopLoss",OBJ_HLINE,0,0,StopLoss);
         ObjectSet("StopLoss",OBJPROP_COLOR,Brown);
         }
         else 
         {Comment("");
         ObjectDelete("OpenLevelUP");
         ObjectDelete("OpenLevelDN");
         ObjectDelete("StopLoss");
         }

//---- Óñëîâèÿ çàêðûòèÿ îðäåðà      
   if((Tip==0                                     // îðäåð îòêðûò íà ïîêóïêó
       && Bid<StopLoss)    
      ||                                          // èëè
       (Tip==1                                     // îðäåð îòêðûò íà ïðîäàæó
       && Ask>StopLoss))    
     {                                           
     Cls = true;                                 // íàäî çàêðûâàòü îðäåð
     Opn_R=false;                                // äî íà÷àëà íîâîãî ïåðèîäà îðäåðîâ íå îòêðûâàòü
     }

//---- Óñëîâèÿ îòêðûòèÿ îðäåðà
   if(Total==0                                    // îòêðûòûõ îðäåðîâ íåò,
     && AllowFindForw                            
     && Opn_R)                                   // îðäåð â ýòîì ïåðèîäå åù¸ íå îòêðûâàëñÿ
     {
     if(AllowBuy
       && Ask>OpenLevelUP)
       Opn_B=true;                               // íàäî îòêðûâàòü îðäåð íà Buy
     if(AllowSell
       && Bid<OpenLevelDN)
       Opn_S=true;                               // íà Sell
     }

//--------------------------------------------------------------- 7 --
   // Ñòîèìîñòü îðäåðîâ
   RefreshRates();                              // Îáíîâëåíèå äàííûõ
   Min_Lot=MarketInfo(Symb,MODE_MINLOT);        // Ìèíèì. êîëè÷. ëîòîâ 
   Free   =AccountFreeMargin();                 // Ñâîáîäí ñðåäñòâà
   One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Ñòîèìîñòü 1 ëîòà
   Step   =MarketInfo(Symb,MODE_LOTSTEP);       // Øàã èçìåíåí ðàçìåðà
 
   if (Lots > 0)                                // Åñëè çàäàíû ëîòû,òî 
      Lts =Lots;                                // ñ íèìè è ðàáîòàåì 
   else                                         // % ñâîáîäíûõ ñðåäñòâ
      Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Äëÿ îòêðûòèÿ
 
   if(Lts < Min_Lot) Lts=Min_Lot;               // Íå ìåíüøå ìèíèìàëüí
   
   if (Lts*One_Lot > Free &&                    // Ëîò äîðîæå ñâîáîäí.
      TimeCurrent()<(Time[0] + 2*60) &&         // íå ïðîøëî åù¸ áîëåå 2-õ ìèíóò
      Total==0)                                 // è îðäåð íå îòêðûò
     {
      Alert(" Íå õâàòàåò äåíåã íà ", Lts," ëîò",": ",Symb,", ",Period());
      return;                                   // Âûõîä èç start()
     }

//--------------------------------------------------------------- 6 --
   // Çàêðûòèå îðäåðîâ
   while(Ticket>0)                              // Öèêë çàêðûòèÿ îðä.
     {
      if(Tip==0 && Cls==true)                  // Îòêðûò îðäåð Buy..
        {                                       // è åñòü êðèòåðèé çàêð
        Alert("Ïîïûòêà çàêðûòü Buy: ",Symb,", ",Period());
        RefreshRates();                        // Îáíîâëåíèå äàííûõ
        Ans=OrderClose(Ticket,Lot,Bid,2,Blue);      // Çàêðûòèå Buy
        if(Ans==true)                         // Ïîëó÷èëîñü :)
          break;                              // Âûõîä èç öèêëà çàêð
        if(Fun_Error(GetLastError())==1)      // Îáðàáîòêà îøèáîê
          {
//            Opn_R=false;                        // äî íà÷àëà íîâîãî ïåðèîäà îðäåðîâ íå îòêðûâàòü
          Opn_R=true;                        // ìîæíî ñíîâà îòêðûâàòü
          continue;                           // Ïîâòîðíàÿ ïîïûòêà
          }
        return;                                // Âûõîä èç start()
        }
      if(Tip==1 && Cls==true)                  // Îòêðûò îðäåð Sell..
        {                                       // è åñòü êðèòåðèé çàêð
        Alert("Ïîïûòêà çàêðûòü Sell: ",Symb,", ",Period());
        RefreshRates();                        // Îáíîâëåíèå äàííûõ
        Ans=OrderClose(Ticket,Lot,Ask,2,Red);      // Çàêðûòèå Sell
        if(Ans==true)                         // Ïîëó÷èëîñü :)
          break;                              // Âûõîä èç öèêëà çàêð
        if(Fun_Error(GetLastError())==1)      // Îáðàáîòêà îøèáîê
          {
//            Opn_R=false;                        // äî íà÷àëà íîâîãî ïåðèîäà îðäåðîâ íå îòêðûâàòü
          Opn_R=true;                         // ìîæíî ñíîâà îòêðûâàòü
          continue;                           // Ïîâòîðíàÿ ïîïûòêà
          }
        return;                                // Âûõîä èç start()
        }
      break;                                    // Âûõîä èç while
     }
   
//---- Óñòàíîâèì ÑòîïËîññ è ÒåéêÏðîôèò
   if(Opn_B)
     {
     if(Stop==0)
       SL=Ask-New_Stop((Ask-StopLoss)/Point)*Point; 
       else 
       if((Ask-StopLoss)/Point>Stop)
         SL=Ask - New_Stop(Stop)*Point;
         else
         SL=StopLoss;
     if(Profit==0)
       if(Shift)
         TP=Ask+100*(Ask-StopLoss);
         else
         TP=Ask+New_Stop(2.5*(Ask-StopLoss)/Point)*Point;
     }
   if(Opn_S)
     {
     if(Stop==0)
       SL=Bid+New_Stop((StopLoss-Bid)/Point)*Point;
       else
       if((StopLoss-Bid)/Point>Stop)
         SL=Bid+New_Stop(Stop)*Point;
         else
         SL=StopLoss;
     if(Profit==0)
       if(Shift)
         TP=Bid-100*(StopLoss-Bid);
         else
         TP=Bid-New_Stop(2.5*(StopLoss-Bid)/Point)*Point;
     }
     
//---- Îòêðûòèå îðäåðîâ
   while(Opn_R)                                 // Öèêë îòêðûòèÿ îðä.
     {
      if(Total==0 && Opn_B==true)              // Îòêðûòûõ îðä. íåò +
        {                                       // êðèòåðèé îòêð. Buy
        RefreshRates();                        // Îáíîâëåíèå äàííûõ
        Alert("Ïîïûòêà îòêðûòü Buy: ",Symb,", ",Period());
        Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP,0,0,0,Blue);//Îòêðûòèå Buy
        if(Ticket > 0)                        // Ïîëó÷èëîñü :)
          {AllowEsc=true;
          return;                             // Âûõîä èç start()
          }
        if(Fun_Error(GetLastError())==1)      // Îáðàáîòêà îøèáîê
          continue;                           // Ïîâòîðíàÿ ïîïûòêà
        return;                                // Âûõîä èç start()
        }
      if(Total==0 && Opn_S==true)              // Îòêðûòûõ îðä. íåò +
        {                                       // êðèòåðèé îòêð. Sell
        RefreshRates();                        // Îáíîâëåíèå äàííûõ
        Alert("Ïîïûòêà îòêðûòü Sell: ",Symb,", ",Period());
        Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP,0,0,0,Red);//Îòêðûòèå Sel
        if(Ticket > 0)                        // Ïîëó÷èëîñü :)
          {AllowEsc=true;
          return;                             // Âûõîä èç start()
          }
        if(Fun_Error(GetLastError())==1)      // Îáðàáîòêà îøèáîê
          continue;                           // Ïîâòîðíàÿ ïîïûòêà
        return;                                // Âûõîä èç start()
        }
      break;                                    // Âûõîä èç while
     }   
//----
   return;                                      // Âûõîä èç start()
  }
//-------------------------------------------------------------- 10 --
int Fun_Error(int Error)                        // Ô-èÿ îáðàáîò îøèáîê
  {
   switch(Error)
     {                                          // Ïðåîäîëèìûå îøèáêè            
      case   4: Alert("Òîðãîâûé ñåðâåð çàíÿò. Ïðîáóåì åù¸ ðàç..",": ",Symb,", ",Period());
         Sleep(3000);                           // Ïðîñòîå ðåøåíèå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 128: Alert("Èñòåê ñðîê îæèäàíèÿ..",": ",Symb,", ",Period());
         return(1);                             // Âûõîä èç ôóíêöèè
      case 130:Alert("Ñëèøêîì áëèçêî ñòîïû",": ",Level,", ",Symb,", ",Period());
         if (Point==0.0001) Level++; else Level=Level+10; // Ïðèðàñòèòü ìèíèìàëüíûé óðîâåíü SL/TP
         Opn_R=false;                           // Îðäåðîâ â ýòîì ïåðèîäå íå îòêðûâàòü
//         Sleep(5000);                           // Ïðîñòîå ðåøåíèå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 135:Alert("Öåíà èçìåíèëàñü. Ïðîáóåì åù¸ ðàç..",": ",Symb,", ",Period());
         RefreshRates();                        // Îáíîâèì äàííûå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 136:Alert("Íåò öåí. Æä¸ì íîâûé òèê..",": ",Symb,", ",Period());
         while(RefreshRates()==false)           // Äî íîâîãî òèêà
            Sleep(1);                           // Çàäåðæêà â öèêëå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 137:Alert("Áðîêåð çàíÿò. Ïðîáóåì åù¸ ðàç..",": ",Symb,", ",Period());
         Sleep(3000);                           // Ïðîñòîå ðåøåíèå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 138:Alert("Çàïðîøåííàÿ öåíà óñòàðåëà..",": ",Symb,", ",Period());
         return(1);                             // Âûõîä èç ôóíêöèè
      case 145:Alert("Îðäåð ñëèøêîì áëèçîê ê ðûíêó . Ïðîáóåì ÷åðåç 15ñåê.",": ",Symb,", ",Period());
         Cls = false;
//         Sleep(15000);                        // Ïðîñòîå ðåøåíèå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 146:Alert("Ïîäñèñòåìà òîðãîâëè çàíÿòà. Ïðîáóåì åù¸..",": ",Symb,", ",Period());
         Sleep(500);                            // Ïðîñòîå ðåøåíèå
         return(1);                             // Âûõîä èç ôóíêöèè
         // Êðèòè÷åñêèå îøèáêè
      case  2: Alert("Îáùàÿ îøèáêà.",": ",Symb,", ",Period());
         return(0);                             // Âûõîä èç ôóíêöèè
      case  5: Alert("Ñòàðàÿ âåðñèÿ òåðìèíàëà.",": ",Symb,", ",Period());
         Work=false;                            // Áîëüøå íå ðàáîòàòü
         return(0);                             // Âûõîä èç ôóíêöèè
      case 64: Alert("Ñ÷åò çàáëîêèðîâàí.",": ",Symb,", ",Period());
         Work=false;                            // Áîëüøå íå ðàáîòàòü
         return(0);                             // Âûõîä èç ôóíêöèè
      case 133:Alert("Òîðãîâëÿ çàïðåùåíà.",": ",Symb,", ",Period());
         return(0);                             // Âûõîä èç ôóíêöèè
      case 134:Alert("Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè.",": ",Symb,", ",Period());
         return(0);                             // Âûõîä èç ôóíêöèè
      default: Alert("Âîçíèêëà îøèáêà ",Error,": ",Symb,", ",Period()); // Äðóãèå âàðèàíòû   
         return(0);                             // Âûõîä èç ôóíêöèè
     }
  }
//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr)                      // Ïðîâåðêà ñòîï-ïðèê.
  {
   int Min_Dist=MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(), MODE_SPREAD)+SlipPage;// Ìèíèì. äèñòàíöèÿ
   if (Parametr < Min_Dist)                     // Åñëè ìåíüøå äîïóñò.
     {
      Parametr=Min_Dist;                        // Óñòàíîâèì äîïóñò.
     }
   return(Parametr);                            // Âîçâðàò çíà÷åíèÿ
  }
//+------------------------------------------------------------------+
void Fun_New_Bar()                              // Ô-èÿ îáíàðóæåíèÿ íîâîãî áàðà
  {                                             
   New_Bar=false;                               // Íîâîãî áàðà íåò
   if(New_Time!=Time[0])                        // Ñðàâíèâàåì âðåìÿ
     {
      New_Time=Time[0];                         // Òåïåðü âðåìÿ òàêîå
      New_Bar=true;                             // Ïîéìàëñÿ íîâûé áàð  
     }
  }
//-------------------------------------------------------------- 12 --
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   Tag_msg1=true;                                  // Ôëàã ñîîáùåíèÿ 1
   New_Time=Time[0];                               // Âðåìÿ òåêóùåãî áàðà

   switch (Period())                               // Óñòàíîâêà NextPeriod
      {
       case    1: NPeriod = 5;     NNPeriod = 30;    break;  // Ïåðèîä 1-íî ìèíóòíûé 
       case    5: NPeriod = 30;    NNPeriod = 240;   break;  // Ïåðèîä 5-òè ìèíóòíûé 
       case   15: NPeriod = 30;    NNPeriod = 240;   break;  // Ïåðèîä 15-òè ìèíóòíûé
       case   30: NPeriod = 240;   NNPeriod = 1440;  break;  // Ïåðèîä 30-òè ìèíóòíûé
       case   60: NPeriod = 240;   NNPeriod = 1440;  break;  // Ïåðèîä ÷àñîâîé
       case  240: NPeriod = 1440;  NNPeriod = 10080; break;  // Ïåðèîä 4-õ ÷àñîâîé
       case 1440: NPeriod = 10080; NNPeriod = 43200; break;  // Ïåðèîä äíåâíîé
       default: break; 
      }
      
   switch (TrendMode)
      {
       case    1: MACD=true;  MA=true;  Silense=false; iKTrend=false;   break;
       case    2: MACD=true;  MA=false; Silense=false; iKTrend=false;   break;
       case    3: MACD=false; MA=true;  Silense=false; iKTrend=false;   break;
       case    4: MACD=true;  MA=true;  Silense=true;  iKTrend=false;   break;
       case    5: MACD=true;  MA=false; Silense=true;  iKTrend=false;   break;
       case    6: MACD=false; MA=true;  Silense=true;  iKTrend=false;   break;
       case    7: MACD=false; MA=false; Silense=false; iKTrend=true;    break;
       case    8: MACD=false; MA=false; Silense=true;  iKTrend=true;    break;
       default: break; 
      }
      
      // Ó÷¸ò îðäåðîâ ïðè èíèöèàëèçàöèè
   int 
      Total,                                       // Êîëè÷åñòâî îðäåðîâ â îêíå 
      Ticket,
      Tip=-1;                                      // Òèï âûáðàí. îðäåðà (B=0,S=1)
   double 
      TP,
      SL,
      Price;                                       // Öåíà âûáðàííîãî îðäåðà
      Symb=Symbol();                               // Íàçâàíèå ôèí.èíñòð.

   for(int i=1; i<=OrdersTotal(); i++)             // Öèêë ïåðåáîðà îðäåð
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true)    // Åñëè åñòü ñëåäóþùèé
        {                                          // Àíàëèç îðäåðîâ:
         if (OrderSymbol()!=Symb)continue;         // Íå íàø ôèí. èíñòðóì
         if (OrderType()>1)                        // Ïîïàëñÿ îòëîæåííûé
           {
            Alert("Îáíàðóæåí îòëîæåííûé îðäåð. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
            return;                                // Âûõîä èç start()
           }
         Total++;                                  // Ñ÷¸ò÷èê ðûíî÷í. îðä
         if (Total>1)                              // Íå áîëåå îäíîãî îðä
           {
            Alert("Íåñêîëüêî ðûíî÷íûõ îðäåðîâ. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
            return;                                // Âûõîä èç start()
           }
         Ticket =OrderTicket();                    // Íîìåð âûáðàíí. îðä.
         Tip    =OrderType();                      // Òèï âûáðàííîãî îðä.
         Price  =OrderOpenPrice();                 // Öåíà âûáðàíí. îðä.
         SL     =OrderStopLoss();                  // SL âûáðàííîãî îðä.
         TP     =OrderTakeProfit();                // TP âûáðàííîãî îðä.
        }
     }
  
   if (Level<MarketInfo(Symb,MODE_STOPLEVEL)) 
      Level=MarketInfo(Symb,MODE_STOPLEVEL);       // Ìèíèìàëüíûé óðîâåíü SL/TP
//   Discret=1;                                      // Ñàìàÿ òî÷íàÿ äèñêðåòèçàöèÿ
   
   if (Total==0) Opn_R=false;                      // â ñåðåäèíå ïåðèîäà îðäåðîâ íå îòêðûâàòü

   if (Ticket>0                                    // Åñëè åñòü îòêðûòûé îðäåð
       && !Shift)                            // È ñäâèã íå óñòàíîâëåí
     {
      New_Open=Price;                              // Âíà÷àëå óðîâåíü öåíû ðàâåí ÒÐ
      New_SL=SL;                                   // à óðîâåíü çàêðûòèÿ ðàâåí SL
      Alert("Èíèò. Îðäåð íå èçìåíåí. TP=",TP,", SL=",SL,": ",Symb,", ",Period());
     } 
   if (Ticket>0                                    // Åñëè åñòü îòêðûòûé îðäåð
       && Shift)                            // È óñòàíîâëåí ñäâèã
     {
         // Âîññòàíîâëåíèå ÒÐ ïðè èíèöèàëèçàöèè
      if (MathAbs(Price-TP)/Point < 500
          && Tip==0)
        TP=Price + New_Stop(TakeProfit+1000)*Point;
         
      if (MathAbs(Price-TP)/Point < 500
          && Tip==1)
        TP=Price - New_Stop(TakeProfit+1000)*Point;
         
      if (OrderModify(Ticket,Price,SL,TP,0))
        {
         Alert("Èíèò. Îðäåð èçìåíåí. TP=",TP,", SL=",SL,": ",Symb,", ",Period());
        }
        else
        {
         Alert("Èíèò. Îðäåð íå èçìåíåí, îøèáêà ",GetLastError(),": ",Symb,", ",Period());
        }
        
         // Óñòàíîâêà New_Open è New_SL ïðè èíèöèàëèçàöèè
      New_Open=0;
      New_SL=0;
       
      if (Tip==0)                                           // îðäåð îòêðûò íà ïîêóïêó
        {                                                   // ðàçðåøåí ñäâèã
         New_Open=Price + New_Stop(TakeProfit)*Point;       // Âíà÷àëå óðîâåíü öåíû ðàâåí ÒÐ
         New_SL=SL;                                         // à óðîâåíü çàêðûòèÿ ðàâåí SL
         if (Bid>New_Open)                                  // íî åñëè ñäâèã óæå íà÷àëñÿ
           {
           New_Open=Bid;                                    // íîâûé äîñòèãíóòûé óðîâåíü öåíû
           New_SL=New_Open                                  // íîâûé óðîâåíü çàêðûòèÿ îðäåðà
                  -(3*MarketInfo(Symb,MODE_SPREAD)*Point    // íèæå íîâîãî óðîâíÿ íà 2 ñòîï óðîâíÿ
                  +index_2*(New_Open-(Price+(TakeProfit     // ïëþñ 0.1 (óâåëè÷èâàåòñÿ)
                  -MarketInfo(Symb, MODE_SPREAD))*Point))); // ñ ó÷åòîì ñïðåäà
           }
        }
      if (Tip==1)                                           // îðäåð îòêðûò íà ïîêóïêó
        {                                                   // ðàçðåøåí ñäâèã
         New_Open=Price - New_Stop(TakeProfit)*Point;       // Âíà÷àëå óðîâåíü öåíû ðàâåí ÒÐ
         New_SL=SL;                                         // à óðîâåíü çàêðûòèÿ ðàâåí SL
         if (Ask<New_Open)                                  // íî åñëè ñäâèã óæå íà÷àëñÿ 
           {
            New_Open=Ask;                                   // íîâûé äîñòèãíóòûé óðîâåíü öåíû
            New_SL=New_Open                                 // íîâûé óðîâåíü çàêðûòèÿ îðäåðà
                   +(3*MarketInfo(Symb,MODE_SPREAD)*Point   // âûøå íîâîãî óðîâíÿ íà 2 ñòîï óðîâíÿ
                   -index_2*(New_Open-(Price-(TakeProfit    // ïëþñ èíäåêñ (óâåëè÷èâàåòñÿ)
                   +MarketInfo(Symb, MODE_SPREAD))*Point)));// ñ ó÷åòîì ñïðåäà
           }
        }
      Alert("Ïðè èíèöèàëèçàöèè New_Open=",New_Open,", New_SL=",New_SL,": ",Symb,", ",Period());
       
            // Îòðàçèòü íîâûå óðîâíè íà ãðàôèêå 
      ObjectDelete("New_Open"); 
      ObjectCreate("New_Open", OBJ_HLINE, 0 , 0, New_Open);
      ObjectDelete("New_SL"); 
      ObjectCreate("New_SL", OBJ_HLINE, 0 , 0, New_SL);
     }                                                      // íåò îòêðûòûõ îðäåðîâ

//---- Îïðåäåëèì òðåíä 
   if(!MACD && !MA && !iKTrend)
     {MACD = true; MA = true;}
   if((MACD || MA) && iKTrend)
     iKTrend = false;
   if(MACD)
     {
     MACD0 = iMACD(0,NNPeriod,12,26,9,PRICE_MEDIAN,MODE_MAIN,0);
     MACD1 = iMACD(0,NNPeriod,12,26,9,PRICE_MEDIAN,MODE_MAIN,1); 
     }
   if(MA)
     {
     MA0   = iMA(0,NNPeriod,12,0,MODE_EMA,PRICE_MEDIAN,0);
     MA1   = iMA(0,NNPeriod,12,0,MODE_EMA,PRICE_MEDIAN,1);    
     }
   if(Silense)
     {  
     Silense0   = iCustom(0, NNPeriod, "Silense",PeriodMA,288, 1, 0);
     Silense1   = iCustom(0, NNPeriod, "Silense",PeriodMA,288, 1, 1);
     }
   if(iKTrend)
     iK0= iCustom(0, NNPeriod, "iK_trend_v01.6",PeriodMA,100,4,4,0, 2, 0);

   if((MACD && !MA && !Silense && MACD0>MACD1)
     || (MA && !MACD && !Silense && MA0>MA1)
     || (MACD && MA && !Silense && MACD0>MACD1 && MA0>MA1)
     || (MACD && !MA && Silense && MACD0>MACD1 && Silense0>Silense1 && Silense0>SilenseLevel)
     || (!MACD && MA && Silense && MA0>MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
     || (MACD && MA && Silense && MACD0>MACD1 && MA0>MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
     || (iKTrend && !Silense && iK0>0)
     || (iKTrend && Silense && iK0>0 && Silense0>Silense1 && Silense0>SilenseLevel))
     {TrendUP=true;
     ObjectDelete("TrendUP");
     ObjectCreate("TrendUP",OBJ_VLINE,0,Time[0],0);
     ObjectSet("TrendUP",OBJPROP_COLOR,Green);
     }
     else
     if((MACD && !MA && !Silense && MACD0<MACD1)
       || (MA && !MACD && !Silense && MA0<MA1)
       || (MACD && MA && !Silense && MACD0<MACD1 && MA0<MA1)
       || (MACD && !MA && Silense && MACD0<MACD1 && Silense0>Silense1 && Silense0>SilenseLevel)
       || (!MACD && MA && Silense && MA0<MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
       || (MACD && MA && Silense && MACD0<MACD1 && MA0<MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
       || (iKTrend && !Silense && iK0<0)
       || (iKTrend && Silense && iK0<0 && Silense0>Silense1 && Silense0>SilenseLevel))
       {TrendDN=true;
       ObjectDelete("TrendDN");
       ObjectCreate("TrendDN",OBJ_VLINE,0,Time[0],0);
       ObjectSet("TrendDN",OBJPROP_COLOR,Red);
       }
       else
       {TrendUP=false;
       TrendDN=false;
       ObjectDelete("TrendUP");
       ObjectDelete("TrendDN");
       }

//---- Îïðåäåëèì ñèãíàë äëÿ âõîäà â ðûíîê
   StochM = iStochastic(0,NPeriod,5,3,3,MODE_EMA,0,MODE_MAIN,0);
   StochS = iStochastic(0,NPeriod,5,3,3,MODE_EMA,0,MODE_SIGNAL,0);

   if((TrendUP && StochM>StochS)         // Æäåì âñòðå÷íóþ âîëíó
      ||
      (TrendDN && StochM<StochS))
     {FMStoch=true;
     NMStoch=false;
     SMStoch=false;
     }
 
   if((TrendUP && StochM<StochS)         // Ýòî âñòðå÷íàÿ âîëíà
      ||
      (TrendDN && StochM>StochS))
     {FMStoch=false;
     NMStoch=true;
     SMStoch=false;
     }
   OpenLevelDN=NONE;
   OpenLevelUP=NONE;
//Alert("TrendUP=",TrendUP," TrendDN=",TrendDN," StochM=",StochM," StochS=",StochS," FMStoch=",FMStoch," NMStoch=",NMStoch," SMStoch=",SMStoch); 
   }
  
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
      // Ó÷¸ò îðäåðîâ ïðè äåèíèöèàëèçàöèè
   int 
      Total,                                       // Êîëè÷åñòâî îðäåðîâ â îêíå 
      Tip=-1,                                      // Òèï âûáðàí. îðäåðà (B=0,S=1)
      Ticket;
   double 
      TP,
      SL,
      Price;                                       // Öåíà âûáðàííîãî îðäåðà
      Symb=Symbol();                               // Íàçâàíèå ôèí.èíñòð.

   for(int i=1; i<=OrdersTotal(); i++)             // Öèêë ïåðåáîðà îðäåð
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true)    // Åñëè åñòü ñëåäóþùèé
        {                                          // Àíàëèç îðäåðîâ:
         if (OrderSymbol()!=Symb)continue;         // Íå íàø ôèí. èíñòðóì
         if (OrderType()>1)                        // Ïîïàëñÿ îòëîæåííûé
           {
            Alert("Îáíàðóæåí îòëîæåííûé îðäåð. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
            return;                                // Âûõîä èç start()
           }
         Total++;                                  // Ñ÷¸ò÷èê ðûíî÷í. îðä
         if (Total>1)                              // Íå áîëåå îäíîãî îðä
           {
            Alert("Íåñêîëüêî ðûíî÷íûõ îðäåðîâ. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
            return;                                // Âûõîä èç start()
           }
         Ticket =OrderTicket();                    // Íîìåð âûáðàíí. îðä.
         Tip    =OrderType();                      // Òèï âûáðàííîãî îðä.
         Price  =OrderOpenPrice();                 // Öåíà âûáðàíí. îðä.
         SL     =OrderStopLoss();                  // SL âûáðàííîãî îðä.
        }
     }
        
   if (Ticket>0                        // Åñëè åñòü îòêðûòûé îðäåð
       && Shift)                // È óñòàíîâëåí ñäâèã
     {
      //---- ÒÐ äëÿ îòêðûòîãî íå ñäâèíóòîãî îðäåðà
      if (Tip==0                       // Åñëè îðäåð îòêðûò íà ïîêóïêó,
          && !(Shift_U||Shift_D))      // íå íà÷àò ñäâèã,
         TP=Ask + New_Stop(TakeProfit)*Point;
         
      if (Tip==1                       // Åñëè îðäåð îòêðûò íà ïðîäàæó,
          && !(Shift_U||Shift_D))      // íå íà÷àò ñäâèã,
         TP=Bid -  New_Stop(TakeProfit)*Point;
        
      //---- ÒÐ äëÿ îòêðûòîãî è ñäâèíóòîãî îðäåðà
      if (Tip==0                       // Åñëè îðäåð îòêðûò íà ïîêóïêó,
          && (Shift_U||Shift_D))       // íà÷àò ñäâèã,
        {
         TP=New_Open + New_Stop(TakeProfit)*Point;
         SL=New_SL;
        }
      if (Tip==1                       // Åñëè îðäåð îòêðûò íà ïðîäàæó,
          && (Shift_U||Shift_D))       // íà÷àò ñäâèã,
        {
         TP=New_Open -  New_Stop(TakeProfit)*Point;
         SL=New_SL;
        }
        
      //---- Óñòàíîâèòü ðåàëüíûé ÒÐ äëÿ îòêðûòîãî îðäåðà
      if (OrderModify(Ticket,Price,SL,TP,0))
        {
         Alert("Äåèíèò. Îðäåð èçìåíåí. TP=",TP,", SL=",SL,": ",Symb,", ",Period());
         return;
        }
         else
        {
         Alert("Äåèíèò. Îðäåð íå èçìåíåí, îøèáêà ",GetLastError(),": ",Symb,", ",Period());
        }
     }                                 // íåò îòêðûòûõ îðäåðîâ
   ObjectDelete("New_Open"); 
   ObjectDelete("New_SL"); 
   return(0);
  }


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