TENGRI_Trofi 1.4.15





//äëÿ ðàáîòû ñîâåòíèêà íåîáõîäèìû ñëåäóþùèå èíäèêàòîðû:
//NonLagAMA
//MLS-HL4-Angle
//Silence2_02

#property copyright "Copyright © Evgeniy Trofimov, 2009"
#property link      "http://www.mql4.com/ru/users/EvgeTrofi"

//òàéìôðåéìû èñ÷èñëÿþòñÿ â ïîðÿäêå î÷åðåäíîñòè, åñëè TF =1; òî ýòî 1-M1, 2-M5, 3-M15, 4-M30, 5-H1, 6-H4, 7-D1 èòä
//ñïàñèáî ïðîãðàììèñòó runik, çà êóñîê êîäà ïî ÒÔ

extern string a = "------- íàñòðîéêè CCI -------";
extern int    TF_CCI      =  5;    //òàéìôðåéì èíäèêàòîðà CCI, åñëè 1-Ì1, 2-Ì5, 3-Ì15...èòä       
extern int    Per_CCI     =  33;   //ïåðèîä CCI 
extern int    Level_CCI   =  10;   //óðîâåíü CCI 
extern string b = "------- íàñòðîéêè AMA -------";
extern int    TF_AMA      =  6;    //òàéìôðåéì èíäèêàòîðà AMA, åñëè 1-Ì1, 2-Ì5, 3-Ì15...èòä
extern int    LenghAMA    =  60;
extern int    pipBolling  =  700;  //ìèíèìàëüíîå ïðèáëèæåíèå öåíû ê ÀÌÀ
extern string c = "------- íàñòðîéêè MLS -------";
extern int    TF_MLS      =  5;    //òàéìôðåéì èíäèêàòîðà MLS, åñëè 1-Ì1, 2-Ì5, 3-Ì15...èòä
extern int    Per_MLS     =  12;   //ïåðèîä MLS 
extern int    Level_MLS   =  10;   //óðîâåíü MLS
extern string d = "------- íàñòðîéêè Silence -------";
extern int    TF_Sil      =  6;    //òàéìôðåéì èíäèêàòîðà Silence, åñëè 1-Ì1, 2-Ì5, 3-Ì15...èòä
extern int    Per_Sil     =  12;   //ïåðèîä Silelse 
extern int    Level_Sil   =  70 ;  //óðîâåíü Silence
extern int    Buffer_Sil   =  130 ;//ðàçìåð áóôåðà óñðåäíåíèÿ Silence
extern string e = "------- íàñòðîéêè RSI -------";
extern int    TF_RSI      =  5;    //òàéìôðåéì èíäèêàòîðà RSI, åñëè 1-Ì1, 2-Ì5, 3-Ì15...èòä
extern int    Per_RSI     =  14;   //ïåðèîä RSI

extern string f = "-------Ïàðàìåòðû -------";
extern double PipStepExponent = 1;   //åñëè íóæåí ïðîãðåññèâíûé øàã

extern double LotExponent1 = 1.70;   //ïðîãðåññèâíûé ëîò äî StepX
extern double LotExponent2 = 2.08;   //ïðîãðåññèâíûé ëîò ïîñëå StepX
extern int    StepX = 3;             //Step=5, äî 5øàãà óâåëè÷èâàåò ïî ýêñïîíåíòî1, ïîñëå 5 ïî ýêñïîíåíòî2

extern double LotSize = 0.05;        //ðàçìåð ëîòà 1-ãî îðäåðà åñëè FixLot = true;
extern bool   FixLot = false;        //true - ôèêñèðîâàííûé ëîò, åñëè false - òî òîãäà ñìîòðèì LotStep
extern int    LotStep = 500000;        //øàã óâåëè÷åíèÿ ëîòà. ò.å. ñêîëüêî â äåïîçèòå LotStep âîñòîëüêî óâåëè÷èòñÿ LotSize. åñëè äåïî 2000 òî ëîò 0.01, åñëè ñòàíåò 4000 òî ëîò 0.02

extern int    PipStep =  200;         //øàã ìåæäó äîëèâêàìè. êàæäûé øàã óâèëè÷èâàåòñÿ â PipStepExponent ðàç åñëè Silence íèæå Level.

extern int    TP = 200;               //òýéêïðîôèò
extern int    MaxTrades=5;          //ìàêñèìàëüíîå êîë-âî êîëåí

extern string  l = "Limit = AccountEquity() / ProfitThisSymbol";
extern bool    Ostanov=true;         //Âêëþ÷åíèå çàêðûòèÿ Ëîêà âñåõ îðäåðîâ ïî äîñòèæåíèè çàäàííîãî ëèìèòà
extern double  Limit = 1000.0;          //Ëèìèò íà çàêðûòèå îðäåðîâ(â åäèíèöàõ âàëþòû) Åñëè Balance>=AccountEquity()/Limit òî çàêðûâàåìñÿ

extern bool    LossStop=true;         //Âêëþ÷åíèå çàêðûòèÿ Ëîêà âñåõ îðäåðîâ ïî äîñòèæåíèè çàäàííîãî ëèìèòà
extern double  LossLimit = 0.5;       //Ëèìèò íà çàêðûòèå îðäåðîâ(Äîëÿ Equity îò äåïîçèòà)
extern bool    Final=false;       //Åñëè true, òî ïåðâûé îðäåð îòêðûâàòüñÿ íå áóäåò

extern int     OpenNewTF = 5;        //òàéìôðåì äëÿ îòêðûòèÿ íîâûõ îðäåðîâ, åñëè 1-Ì1, 2-Ì5, 3-Ì15...èòä
extern int     OpenNextTF = 5;       //òàéìôðåéì äëÿ îòêðûòèÿ êîëåí îðäåðîâ, åñëè 1-Ì1, 2-Ì5, 3-Ì15...èòä
extern int     Povtor = 1;           //òàéìôðåéì äëÿ ïîâòîðà çàïðîñîâ

extern string  g = "ðàáîòà ñîâåòíèêà â ïÿòíèöó äî";
extern bool    CloseFriday=true;        // èñïîëüçîâàòü îãðàíè÷åíèå ïî âðåìåíè â ïÿòíèöó true, íå èñïîëüçîâàòü false
extern int     CloseFridayHour=19;      // âðåìÿ â ïÿòíèöó ïîñëå êîòîðîãî íå âûñòàâëÿåòñÿ ïåðâûé îðäåð

extern string  OfficialVariable = "-------Ñëóæåáíûå ïåðåìåíûå-------";
extern string  InformationOnChartString = "InformationOnChart - îòêëþ÷èòü äëÿ òåñòåðà (çàìåäëÿåò)";
extern bool    InformationOnChart = true; //âûâîäèòü ëè èíôîðìàöèþ íà ãðàôèê, îòêëþ÷èòü äëÿ òåñòåðà (çàìåäëÿåò)
extern int     MagicNumber = 20090919;     //ïî ýòîìó íîìåðó ïðîèñõîäèò èäåíòèôèêàöèÿ îðäåðîâ íà ïðåíàäëåæíîñòü ñîâåòíèêó
int LotDecimal = 0;
int Slippage=30, OldTicket = 0;
datetime timeprevMIN=0;
datetime timeprevMAX=0;
int total, ticket, CountTrades;
int mper[10]={0,1,5,15,30,60,240,1440,10080,43200};
double Buy_NextLot,Sell_NextLot, Buy_NewLot, Sell_NewLot, Buy_LastLot, Sell_LastLot, Prof;
string CommentTrades;
//===========================
int init(){
   LotDecimal = LotDecimal();
   Ñorrect(OP_BUY);
   Ñorrect(OP_SELL);
   HideTestIndicators(true);
   return(0);}
//===========================
int deinit(){
   return(0);}
//============= Ñòàðò =======
int start(){
   int LE;
   double CountLot, CurrentLoss;
   //======================================================================================   
      if (LotDecimal==0) LotDecimal = LotDecimal();
      Information();
   //========= Çàêðûòèå ëîêîâ ïðè ïðîôèòå =================================================   
   if ((Ostanov)&&CountTrades("buy")>0&&CountTrades("sell")>0&&(Balance("buy","Balance")+Balance("sell", "Balance"))>=AccountEquity()/Limit){
      CloseAllPozitions(Symbol(),MagicNumber);
   }
   ticket=AntiOrderExist();
   if(ticket!=0){
      AntiOrderModify(ticket);
      return(0);
   }
   //========= Çàêðûòèå ëîêîâ ïðè óáûòêå =================================================   
   if(LossStop){
      if(AccountBalance()*LossLimit>AccountEquity()) {
         CloseAllPozitions(Symbol(),MagicNumber);
      }
   }
   //======================================================================================     
   if(Final) {
      if(CountTrades("buy")+CountTrades("sell")==0) return(0);
   }
   
   if(timeprevMIN!=iTime(NULL,mper[OpenNewTF],0)) {      
      ticket=0;
      CountTrades = CountTrades("buy");
      if(CloseFriday==true&&DayOfWeek()==5&&TimeCurrent()>=StrToTime(CloseFridayHour+":00"))return(0); // çàïðåò â ïÿòíèöó
      if (CountTrades==0&&NewOrder("buy")) {
         if(CountTrades("sell")==MaxTrades) { //Ñîçäà¸ì çàìîê äëÿ sell
            CommentTrades = "TENGRI "+Symbol()+" - AntiSell";
            Buy_NewLot = Balance("sell" ,"Lot");
            Prof = NormalizeDouble(iCustom(NULL,PERIOD_D1,"NonLagAMA", 0,60,0,0,1,2,0.0, 0,1), Digits);
            if(Bid-Prof>MarketInfo(Symbol(), MODE_STOPLEVEL)*Point) {
               LE=135;
               while(LE>134 && LE<139) {
                  Print("Ïîêóïàåì. Çàìêîâûé. Ïàðàìåòðû. ñèìâîë="+Symbol()+", ëîò="+DoubleToStr(Buy_NewLot,2)+", öåíà="+DoubleToStr(Ask,Digits)+" ãðàíèöà óáûòêà="+DoubleToStr(Prof,Digits)+", êîììåíò="+CommentTrades+" ìàäæèê="+19811215);
                  ticket = OrderSend(Symbol(),OP_BUY,Buy_NewLot,Ask,Slippage,Prof,0,CommentTrades,19811215,0,Blue);
                  LE = GetLastError();
                  if(ticket<1) {Print("Îøèáêà: ",LE," Íîâàÿ ïîïûòêà ïîêóïêè ÷åðåç "+(Povtor*60)+" ñåêóíä");Sleep(Povtor*60*1000);}
                  RefreshRates();
               }
            }
         } else { //Îáû÷íàÿ ïåðàâÿ ïîêóïêà
            CommentTrades = "TENGRI "+Symbol()+" - Buy "+(CountTrades+1);
            Buy_NewLot = NewLot("buy");
            LE=135;
            while(LE>134 && LE<139) {
               Prof = Prof("buy");
               Print("Ïîêóïàåì. Íîâûé. Ïàðàìåòðû. ñèìâîë="+Symbol()+", ëîò="+DoubleToStr(Buy_NewLot,2)+", öåíà="+DoubleToStr(Ask,Digits)+" ïðîôèò="+DoubleToStr(Prof,Digits)+", êîììåíò="+CommentTrades+" ìàäæèê="+MagicNumber);
               ticket = OrderSend(Symbol(),OP_BUY,Buy_NewLot,Ask,Slippage,0,Prof,CommentTrades,MagicNumber,0,Blue);
               LE = GetLastError();
               if(ticket<1) {Print("Îøèáêà: ",LE," Íîâàÿ ïîïûòêà ïîêóïêè ÷åðåç "+(Povtor*60)+" ñåêóíä");Sleep(Povtor*60*1000);}
               RefreshRates();
            }
         }
      }
      CountTrades = CountTrades("sell");
      if (CountTrades==0&&NewOrder("sell"))  {
         if(CountTrades("buy")==MaxTrades) { //Ñîçäà¸ì çàìîê äëÿ buy
            CommentTrades = "TENGRI "+Symbol()+" - AntiBuy";
            Sell_NewLot = Balance("buy" ,"Lot");
            Prof = NormalizeDouble(iCustom(NULL,PERIOD_D1,"NonLagAMA", 0,60,0,0,1,2,0.0, 0,1), Digits);
            if(Prof-Ask>MarketInfo(Symbol(), MODE_STOPLEVEL)*Point) {
               LE=135;
               while(LE>134 && LE<139) {
                  Print("Ïðîäàåì. Çàìêîâûé. Ïàðàìåòðû. ñèìâîë="+Symbol()+", ëîò="+DoubleToStr(Sell_NewLot,2)+", öåíà="+DoubleToStr(Bid,Digits)+" ãðàíèöà óáûòêà="+DoubleToStr(Prof,Digits)+", êîììåíò="+CommentTrades+" ìàäæèê=19811215");
                  ticket = OrderSend(Symbol(),OP_SELL,Sell_NewLot,Bid,Slippage,Prof,0,CommentTrades,19811215,0,Red);
                  LE = GetLastError();
                  if(ticket<1) {Print("Îøèáêà: ",LE," Íîâàÿ ïîïûòêà ïðîäàæè ÷åðåç "+(Povtor*60)+" ñåêóíä");Sleep(Povtor*60*1000);} 
                  RefreshRates();
               }
            }
         } else { //Îáû÷íàÿ ïåðàâÿ ïðîäàæà
            CommentTrades = "TENGRI "+Symbol()+" - Sell "+(CountTrades+1);
            Sell_NewLot = NewLot("sell");
            LE=135;
            while(LE>134 && LE<139) {
               Prof = Prof("sell");
               Print("Ïðîäàåì. Íîâûé. Ïàðàìåòðû. ñèìâîë="+Symbol()+", ëîò="+DoubleToStr(Sell_NewLot,2)+", öåíà="+DoubleToStr(Bid,Digits)+" ïðîôèò="+DoubleToStr(Prof,Digits)+", êîììåíò="+CommentTrades+" ìàäæèê="+MagicNumber);
               ticket = OrderSend(Symbol(),OP_SELL,Sell_NewLot,Bid,Slippage,0,Prof,CommentTrades,MagicNumber,0,Red);
               LE = GetLastError();
               if(ticket<1) {Print("Îøèáêà: ",LE," Íîâàÿ ïîïûòêà ïðîäàæè ÷åðåç "+(Povtor*60)+" ñåêóíä");Sleep(Povtor*60*1000);} 
               RefreshRates();
            }
         }
      }
      timeprevMIN=iTime(NULL,mper[OpenNewTF],0);
   }//Åñëè ðèñóåòñÿ ñëåäóþùàÿ ñâå÷à
   
   if(timeprevMAX!=iTime(NULL,mper[OpenNextTF],0)) {  
      ticket=0;
      CountTrades = CountTrades("buy");
      if (CountTrades>0 && NextOrder("buy")){
         CommentTrades = "TENGRI "+Symbol()+" - Buy "+(CountTrades+1);
         Buy_NextLot = NextLot("buy");
         LE=135;
         while(LE>134 && LE<139) {         
            Print("Ïîêóïàåì. Ñëåäóþùèé. Ïàðàìåòðû. ñèìâîë:"+Symbol()+", ëîò="+DoubleToStr(Buy_NextLot,2)+", öåíà ="+DoubleToStr(Ask,Digits)+", êîììåíò="+CommentTrades+", ìàäæèê="+MagicNumber);
            ticket = OrderSend(Symbol(),OP_BUY,Buy_NextLot,Ask,Slippage,0,0,CommentTrades,MagicNumber,0,Blue);
            LE = GetLastError();
            if(ticket<1) {Print("Îøèáêà: ",LE," Íîâàÿ ïîïûòêà ïîêóïêè ÷åðåç "+(Povtor*60)+" ñåêóíä");Sleep(Povtor*60*1000);} else Ñorrect(OP_BUY);
            RefreshRates();
         }
         if(LE==134) CloseAllPozitions(Symbol(),MagicNumber); //Åñëè äåíåã íåõâàòàåò - ñäà¸ìñÿ!
      } 
      CountTrades = CountTrades("sell"); 
      if (CountTrades>0 && NextOrder("sell")){
         CommentTrades = "TENGRI "+Symbol()+" - Sell "+(CountTrades+1);
         Sell_NextLot = NextLot("sell");
         LE=135;
         while(LE>134 && LE<139) {         
            Print("Ïðîäàåì. Ñëåäóþùèé. Ïàðàìåòðû. ñèìâîë:"+Symbol()+", ëîò="+DoubleToStr(Sell_NextLot,2)+", öåíà="+DoubleToStr(Bid,Digits)+", êîììåíò="+CommentTrades+", ìàäæèê="+MagicNumber);
            ticket = OrderSend(Symbol(),OP_SELL,Sell_NextLot,Bid,Slippage,0,0,CommentTrades,MagicNumber,0,Red);
            LE = GetLastError();
            if(ticket<1) {Print("Îøèáêà: ",LE," Íîâàÿ ïîïûòêà ïðîäàæè ÷åðåç "+(Povtor*60)+" ñåêóíä");Sleep(Povtor*60*1000);} else Ñorrect(OP_SELL);
            RefreshRates();
         }
         if(LE==134) CloseAllPozitions(Symbol(),MagicNumber); //Åñëè äåíåã íåõâàòàåò - ñäà¸ìñÿ!
      }
      timeprevMAX=iTime(NULL,mper[OpenNextTF],0);
   }
   return(0);
}//start()
//+------------------------------------------------------------------+
double Prof(string OrdType)
{   double Zena=0;
    if (TP<MarketInfo(Symbol(),MODE_STOPLEVEL)) TP=MarketInfo(Symbol(),MODE_STOPLEVEL);
   
    if (OrdType=="buy")Zena=Ask+TP*Point;
    if (OrdType=="sell")Zena=Bid-TP*Point;
    return (Zena);
}
//+------------------------------------------------------------------+
void Ñorrect(int OrdType) {
   int trade, LE;
   double TP_all;
   double AveragePrice;
   AveragePrice = AveragePrice(OrdType);
   for(trade=OrdersTotal()-1;trade>=0;trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber()!=MagicNumber&&MagicNumber!=0) continue;
      if(OrdType==OrderType() && OrdType==OP_BUY) {
         TP_all = NormalizeDouble(AveragePrice+TP*Point,Digits);
         if (OrderTakeProfit() != TP_all) {  
            Print("Ìîäèôèöèðóåì ïîêóïêó. Áåçóáûòîê = "+DoubleToStr(AveragePrice,Digits)+", ÒÐ = "+DoubleToStr(TP,0)+" Íîâûé óðîâåíü = "+DoubleToStr(TP_all,Digits)); 
            LE=135;
            while(LE>127 && LE<139) {                  
               OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), NormalizeDouble(TP_all,Digits), 0);
               LE = GetLastError();
               if(LE>0) Print("Îøèáêà ¹ ", LE);
            }
         }
      }
      //----
      if (OrdType==OrderType() && OrdType==OP_SELL) {
         TP_all = NormalizeDouble(AveragePrice-TP*Point,Digits);
         if (OrderTakeProfit() != TP_all) {
            Print("Ìîäèôèöèðóåì ïðîäàæó. Áåçóáûòîê = "+DoubleToStr(AveragePrice,Digits)+", ÒÐ = "+DoubleToStr(TP,0)+" Íîâûé óðîâåíü = "+DoubleToStr(TP_all,Digits));
            LE=135;
            while(LE>127 && LE<139) {
               OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), NormalizeDouble(TP_all,Digits), 0);
               LE = GetLastError();
               if(LE>0) Print("Îøèáêà ¹ ", LE);
            }
         }
      }
      //----   
   }        
} 

//+------------------------------------------------------------------+
//Âû÷èñëÿåì ðàçìåð ïåðâîãî ëîòà
double NewLot(string OrdType)
{
   double tLots;
   double minlot = MarketInfo(Symbol(), MODE_MINLOT);
   
   if (OrdType=="buy")
   {
      if (FixLot) tLots = LotSize; else tLots = NormalizeDouble(LotSize * AccountEquity()/LotStep, LotDecimal); 
      }
   if (OrdType=="sell")
   {
      if (FixLot) tLots = LotSize; else tLots = NormalizeDouble(LotSize * AccountEquity()/LotStep, LotDecimal);  
      } 
   if(tLots < minlot) tLots = minlot; 
            
   return(tLots);
   }
//+------------------------------------------------------------------+
//Âû÷èñëÿåì ðàçìåð ñëåäóþùåãî ëîòà
double NextLot(string OrdType){
   double tLots;
   int st_P=CountTrades(OrdType);
   if (OrdType=="buy"){
    if (st_P >= StepX) tLots = NormalizeDouble(FindLastOrder(OrdType, "Lots") * LotExponent2, LotDecimal);
      else tLots = NormalizeDouble(FindLastOrder(OrdType, "Lots") * LotExponent1, LotDecimal);     
      }
   if (OrdType=="sell"){
    if (st_P >= StepX) tLots = NormalizeDouble(FindLastOrder(OrdType, "Lots") * LotExponent2, LotDecimal);
      else tLots = NormalizeDouble(FindLastOrder(OrdType, "Lots") * LotExponent1, LotDecimal);
   }
   return(tLots);
}
      
//+------------------------------------------------------------------+
//Ïðîâåðÿåì íóæíî ëè îòêðûâàòü ïåðâûé îðäåð  
bool NewOrder(string OrdType) {
   double Up=iCustom(NULL,mper[TF_AMA],"NonLagAMA", 0,LenghAMA,0,0,1,2,0.0, 1,1);
   double Dn=iCustom(NULL,mper[TF_AMA],"NonLagAMA", 0,LenghAMA,0,0,1,2,0.0, 2,1);
   double CCI = iCCI(NULL, mper[TF_CCI], Per_CCI, PRICE_TYPICAL, 1);
   double RSI = iRSI(NULL, mper[TF_RSI], Per_RSI, PRICE_CLOSE, 0);
   double Silence=iCustom(NULL, mper[TF_Sil],"Silence2_02", Per_Sil, Buffer_Sil, 2, 0);
   
   bool NewOrd = false;
   if(Silence<Level_Sil) {
      if(OrdType=="buy"&&CCI<Level_CCI) {
         if(RSI<70) {
            if(Up!=EMPTY_VALUE&&Bid-Up>pipBolling*Point) {
               NewOrd = TRUE;
            }
         }
      }
   
      if (OrdType=="sell"&&CCI>-Level_CCI) {
         if(RSI>30) {
            if(Dn!=EMPTY_VALUE&&Dn-Ask>pipBolling*Point) {
               NewOrd = TRUE;
            }
         }
      }
   }
   return(NewOrd);
}  //NewOrder()
//+------------------------------------------------------------------+
//Ïðîâåðÿåì íóæíî ëè îòêðûâàòü ñëåäóþùèé îðäåð  
bool NextOrder(string OrdType) {
   double Silence=iCustom(NULL, mper[TF_Sil],"Silence2_02", Per_Sil, Buffer_Sil, 2, 0);
   double MLSLast=iCustom(NULL, mper[TF_MLS],"MLS-HL4-Angle", Per_MLS, false, 0, 2);
   double MLS=    iCustom(NULL, mper[TF_MLS],"MLS-HL4-Angle", Per_MLS, false, 0, 1);
   bool NextOrd = false;
   int PipStepEX;
   if(Silence<Level_Sil) {
      if (OrdType=="buy") {
         if(MLSLast<-Level_MLS&&MLS>-Level_MLS) {
            PipStepEX = NormalizeDouble(PipStep*MathPow(PipStepExponent,CountTrades(OrdType)),0);
            if (FindLastOrder(OrdType, "Price") - Ask >= PipStepEX * Point && CountTrades(OrdType)<MaxTrades) {
               NextOrd = TRUE;
            }
         }
      }
   
      if (OrdType=="sell") {
         if(MLSLast>Level_MLS&&MLS<Level_MLS) {
            PipStepEX = NormalizeDouble(PipStep*MathPow(PipStepExponent,CountTrades(OrdType)),0);
            if (Bid - FindLastOrder(OrdType, "Price") >= PipStepEX * Point && CountTrades(OrdType)<MaxTrades) {
               NextOrd = TRUE;
            }   
         }
      }
   }
   return(NextOrd);
}  //NextOrder()

//+------------------------------------------------------------------+
//Âîçâðàùàåò öåíó èëè ëîò ïîñëåäíåãî îðäåðà
double FindLastOrder(string OrdType, string inf) {
   double OrderPrice;
   double LastLot;
   int trade, oldticketnumber=0;
   
   for(trade=OrdersTotal()-1;trade>=0;trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber()!=MagicNumber&&MagicNumber!=0) continue;
      if (OrdType=="buy") {
         if(OrderType()==OP_BUY) {
            if(OrderTicket()>oldticketnumber) {
               OrderPrice=OrderOpenPrice();
               LastLot = OrderLots();
               oldticketnumber=OrderTicket();
            }
         }
      }
       //---- 
      if (OrdType=="sell") {
         if(OrderType()==OP_SELL) {
            if(OrderTicket()>oldticketnumber) {
               OrderPrice=OrderOpenPrice();
               LastLot = OrderLots();
               oldticketnumber=OrderTicket();
            }
         }
      }
   }
   if (inf=="Price") return(OrderPrice);
   if (inf=="Lots")  return(LastLot);
}
//+------------------------------------------------------------------+
//Âîçâðàùàåò êîëè÷åñòâî îðäåðîâ
int CountTrades(string OrdType) {
   int count=0;
   int trade;
   for(trade=OrdersTotal()-1;trade>=0;trade--) {
      OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber()!=MagicNumber&&MagicNumber!=0) continue;
      if (OrdType == "buy") {
         if(OrderType()==OP_BUY) count++;
      }
      if (OrdType == "sell") {
         if(OrderType()==OP_SELL) count++;
      }
   }
   return(count);
}
//+------------------------------------------------------------------+
//Âîçâðàùàåò ñðåäíþþ öåíó îòêðûòûõ ïîç ïî íàïðàâëåíèþ
double AveragePrice(int OrdType) {
   double AveragePrice=0;
   double Count=0;
   int trade;
   for(trade=OrdersTotal()-1;trade>=0;trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber()!=MagicNumber&&MagicNumber!=0) continue;
      if (OrdType == OrderType()) {
         AveragePrice=AveragePrice+OrderOpenPrice()*OrderLots();
         Count=Count + OrderLots();
      }
   }
   if(Count>0) AveragePrice=NormalizeDouble(AveragePrice/Count, Digits);
      
  return(AveragePrice);    
}//AveragePrice()
//----------------------------------------------------------------------
//Ïðîöåäóðà âûâîäèò èíôîðìàöèþ ïî òîðãàì:
void Information() {
   string MeTXT;
   if (InformationOnChart) {
      if(Final) MeTXT=" (Ðåæèì çàâåðøåíèÿ)";
      Comment("" 
      //+ "\n"                         
      + "                              TENGRI MARTINGEIL EvgeTrofi "+Symbol()+MeTXT
      + "\n"                         
      + "                              ------------------------------------------------"                         
      + "\n"                         
      + "                              Broker: " + AccountCompany()+". AccountLeverage: 1:"+ DoubleToStr(AccountLeverage(), 0)                         
      + "\n"  
      + "                              ------------------------------------------------"
      + "\n"
      + "                              Buy open ->  "+CountTrades("buy")+"  MaxTrades ->  "+MaxTrades
      + "\n"
      + "                              Open balance: " + DoubleToStr(Balance("buy", "Balance"), 2)
      + "\n"
      + "                              Open lot: " + DoubleToStr(Balance("buy", "Lot"), 2)
      + "\n"
      + "                              ------------------------------------------------"
      + "\n"
      + "                              Sell open ->  "+CountTrades("sell")+"  MaxTrades ->  "+MaxTrades
      + "\n"
      + "                              Open balance: " + DoubleToStr(Balance("sell", "Balance"), 2)
      + "\n"
      + "                              Open lot: " + DoubleToStr(Balance("sell", "Lot"), 2)
      + "\n"
      + "                              ------------------------------------------------"
      + "\n"
      + "                              Close Lock:  " + DoubleToStr ((AccountEquity() / (Limit)), 2)
      + "\n"
      + "                              Balance Buy && Sell: " + DoubleToStr((Balance("buy", "Balance")+Balance("sell", "Balance")), 2)
      );
      
   }
}
//---------------------------------------------------
//ôóíêöèÿ ðàñ÷åòà èíôîðìàöèè ïî òåêóùèì òîðãàì
double Balance(string OrdType, string inf) {
   double result=0;
   int trade;
   for(trade=OrdersTotal()-1;trade>=0;trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber()!=MagicNumber&&MagicNumber!=0) continue;
      if (OrdType == "buy") {
         if(OrderType()==OP_BUY) {
            if (inf=="Balance") result=result+OrderProfit()-OrderSwap()-OrderCommission();
            if (inf=="Lot")     result=result+OrderLots();
         }
      }
      //----
      if (OrdType == "sell") {
         if(OrderType()==OP_SELL) {
            if (inf=="Balance") result=result+OrderProfit()-OrderSwap()-OrderCommission();
            if (inf=="Lot")     result=result+OrderLots();
         }
      }
   }
  return(result);    
}
//---------------------------------------------------
double LotDecimal()
{
   double steplot=MarketInfo(Symbol(), MODE_LOTSTEP);
   int LotsDigits = MathCeil(MathAbs(MathLog(steplot)/MathLog(10)));

return(LotsDigits);
}
//===================================================
//Çàêðûòèå âñåõ ïîçèöèé
//+------------------------------------------------------------------+
int CloseAllPozitions(string fSymbol="", int fMagic=0, int type=-1) {
   int LE;
   double PriceClose;
   if(IsTradeAllowed()) {
      int  total = OrdersTotal();
      for (int i = total-1; i >= 0; i--) {
         OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         if(OrderSymbol()==fSymbol || fSymbol=="") {
            if(OrderMagicNumber()==fMagic || fMagic==0) {
               if(OrderType()==type||type==-1) {
                  LE=135;
                  while(LE>134 && LE<139) {
                     if(OrderType()==OP_BUY) {
                        PriceClose=MarketInfo(OrderSymbol(),MODE_BID);
                     } else if(OrderType()==OP_SELL) {
                        PriceClose=MarketInfo(OrderSymbol(),MODE_ASK);
                     }
                     OrderClose(OrderTicket(),OrderLots(),PriceClose,Slippage);
                     LE = GetLastError();
                     if(LE>0) Print("ÑòàÔÔêà íå çàêðûâàåòñÿ ïî ïðè÷èíå îøèáêè ¹ ",LE);
                  }
               }
            }
         } // Åñëè ñâîé
      } // Next i
   } // Ñîâåòíèêó ìîæíî òîðãîâàòü
   return(0);
}//CloseAllPozitions()
//+------------------------------------------------------------------+
int AntiOrderExist() {
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol()) {
         if(OrderMagicNumber()==19811215) {
            return(OrderTicket());
         }
      }
   }
   return(0);
} //AntiOrderExist()
//+------------------------------------------------------------------+
void AntiOrderModify(int ticket) {
   static datetime LastDate;
   int CountTradesSell=CountTrades("sell");
   int CountTradesBuy=CountTrades("buy");
   bool LimitOk=false;
   if(OrderSelect(ticket, SELECT_BY_TICKET)) {
      if(OrderType()==OP_BUY && CountTradesSell==0){
         OrderClose(ticket, OrderLots(), Bid, Slippage);
         return;
      }
      if(OrderType()==OP_SELL && CountTradesBuy==0){
         OrderClose(ticket, OrderLots(), Ask, Slippage);
         return;
      }
      if(LastDate==iTime(Symbol(),PERIOD_D1,0)) return;
      double StopLoss=NormalizeDouble(iCustom(NULL,PERIOD_D1,"NonLagAMA", 0,60,0,0,1,2,0.0, 0,1), Digits);
      if(OrderType()==OP_BUY) {
         if(Bid-StopLoss>MarketInfo(Symbol(), MODE_STOPLEVEL)*Point) LimitOk=true;
      } else {
         if(StopLoss-Ask>MarketInfo(Symbol(), MODE_STOPLEVEL)*Point) LimitOk=true;
      }
      if(DoubleToStr(StopLoss,Digits)!=DoubleToStr(OrderStopLoss(),Digits) && LimitOk) {
         Print("Ìîäèôèêàöèÿ çàìêà ïî ñèìâîëó ", Symbol(), ". Ïàðàìåòðû: Íîâûé StopLoss="+DoubleToStr(StopLoss,Digits)+", Ñòàðûé StopLoss="+DoubleToStr(OrderStopLoss(),Digits)+", Ask="+DoubleToStr(Ask,Digits)+", Bid="+DoubleToStr(Bid,Digits));
         if(OrderModify(OrderTicket(), OrderOpenPrice(), StopLoss, OrderTakeProfit(), 0)) {
            LastDate=iTime(Symbol(),PERIOD_D1,0);
         } else {
            Print("Îøèáêà ¹ ", GetLastError());
         }
      } else {
         LastDate=iTime(Symbol(),PERIOD_D1,0);
      }
   }
} //AntiOrderModify()
//+------------------------------------------------------------------+





Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:


Commodity channel index
Relative strength index


Custom Indicators Used:
NonLagAMA
Silence2_02
MLS-HL4-Angle

Order Management characteristics:
It can change open orders parameters, due to possible stepping strategy
It automatically opens orders when conditions are reached
Checks for the total of open orders
It Closes Orders by itself

Other Features: