TENGRI 1.4





//TENGRI ñîâåòíèê òîðãóåò íà ïàðe Åâðî äîëëàð, è Äîëëàð øâåéöàðåö, âåøàòü íà äâå ïàðû ñðàçó, ñ ðàçíûìè MagicNumber = 12345;
//äëÿ ðàáîòû ñîâåòíèêà íå îáõîäèì èíäèêàòîð Silence2_02 äîëæåí íàõîäèòñÿ â ïàïêå èíäèêàòîðîâ, âåøàòü ñîâåòíèê íà Ì1, 
//èíäèêàòîð íà ãðàôèê âåøàòü íå îáÿçàòåëüíî, òîðãóåò ñîâåòíèê â äâå ñòîðîíû ñðàçó
//Äîáàâëåíî íîðìàëèçàöèÿ îðäåðîâ, îòêðûòèå - ïðè ðåèíâåñòèðîâàíèè ïåðâîãî îðäåðà ïî ýêâèòè, íàñòðîéêè ïî ÒÔ òåïåðü ìîæíî
//îïòèìèçèðîâàòü òàéìôðåéìû ïî ïîðÿäêó î÷åðåäíîñòè ÒÔ, âûâåäåíû âñå íàñòðîéêè ïî èíäþêàì âî âíåøíèå ïåðåìåííûå.
  
extern string af4 = " fx.09@mail.ru   novakazahi@yandex.ru";

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

extern string a = "-------ïî áàðó 1-ãî îðäåðà -------";
extern int    TF_Op1      =  4;   //òàéìôðåéì äëÿ áàðà, íàïðàâëåíèå äëÿ îòêðûòèÿ 1-ãî îðäåðà, åñëè 1-Ì1, 2-Ì5, 3-Ì15...èòä
extern string b = "-------Silence 1-ãî îðäåðà -------";
extern int    TFSilence1  =  2;   //òàéìôðåéì 1-ãî îðäåðà èíäèêàòîð Silence, åñëè 1-Ì1, 2-Ì5, 3-Ì15...èòä       
extern int    PerSilence1 =  11;  //ïåðèîä Silence 1-ãî îðäåðà
extern int    BuffSilence1=  220; //BuffSize Silence 1-ãî îðäåðà
extern int    Sil_Level1  =  80;  //óðîâåíü Level èíäèêàòîðà Silence 1-ãî îðäåðà
extern string ñ = "-------Silence êîëåí -------";
extern int    TFSilence2  =  3;   //òàéìôðåéì êîëåí èíäèêàòîð Silence, åñëè 1-Ì1, 2-Ì5, 3-Ì15...èòä      
extern int    PerSilence2 =  12;  //ïåðèîä Silence êîëåí
extern int    BuffSilence2=  96;  //BuffSize Silence êîëåí
extern int    Sil_Level2  =  80;  //óðîâåíü Level èíäèêàòîðà Silence êîëåí
extern string k = "------- ÌÀ êîëåí -------";
extern int    TF_MA2      =  3;   //òàéìôðåéì êîëåí èíäèêàòîðà ÌÀ, åñëè 1-Ì1, 2-Ì5, 3-Ì15...èòä       
extern int    Per_MA2     =  30;  //ïåðèîä MA êîëåí
extern string Block = "-------Ïàðàìåòðû -------";

extern double PipStepExponent = 1;   //åñëè íóæåí ïðîãðåññèâíûé øàã

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

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

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

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

extern string  GeneralBlock = "-------Îáùèå ïàðàìåòðû-------";

extern bool    Ostanov=true;         //Âêëþ÷åíèå çàêðûòèÿ Ëîêà âñåõ îðäåðîâ ïî äîñòèæåíèè çàäàííîãî ëèìèòà
extern double  Limit = 50;           //Ëèìèò íà çàêðûòèå îðäåðîâ(â åäèíèöàõ âàëþòû) 

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

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

extern string  OfficialVariable = "-------Ñëóæåáíûå ïåðåìåíûå-------";
extern string  InformationOnChartString = "InformationOnChart - îòêëþ÷èòü äëÿ òåñòåðà (çàìåäëÿåò)";
extern bool    InformationOnChart = true; //âûâîäèòü ëè èíôîðìàöèþ íà ãðàôèê, îòêëþ÷èòü äëÿ òåñòåðà (çàìåäëÿåò)
extern int     MagicNumber = 12345;        //ïî ýòîìó íîìåðó ïðîèñõîäèò èäåíòèôèêàöèÿ îðäåðîâ íà ïðåíàäëåæíîñòü ñîâåòíèêó
extern string af5 = "-===Kazakstan treider==- ";
extern int LotDecimal = 0;

datetime timeprevMIN=0;
datetime timeprevMAX=0;
int total, ticket, CountTrades;
int mper[10]={0,1,5,15,30,60,240,1440,10080,43200};
bool LongTradeNew, ShortTradeNew;
double Buy_NextLot,Sell_NextLot, Buy_NewLot, Sell_NewLot, Buy_LastLot, Sell_LastLot, Prof;
string CommentTrades;
//===========================
int init(){
   LotDecimal = LotDecimal();
   return(0);}
//===========================
int deinit(){
   return(0);}
//============= íàïðàâëåíèå =
int ind_iOP;
int ind_iOP2;
//============= Ñòàðò =======
int start(){

//== Áàðû îòêðûòèå öåíû 1-ãî îðäåðà ====================================================   
   double i_OP = iOpen (Symbol(), mper[TF_Op1], 0);  // óñëîâèå íàïðàâëåíèÿ äëÿ ïåðâîãî îðäåðà
   if (i_OP < Bid)    ind_iOP = 1;                   // óñëîâèå äëÿ áàé
	else    if (i_OP > Bid)    ind_iOP = - 1;         // óñëîâèå äëÿ ñåëë
//======================================================================================   
   if (LotDecimal==0) LotDecimal = LotDecimal();

   Information();
   
   LongTradeNew=true;
   ShortTradeNew=true;
   
//========= Çàêðûòèå ëîêîâ ïðè ïðîôèòå =================================================   
if ((Ostanov)&&CountTrades("buy")>0&&CountTrades("sell")>0&&(Balance("buy","Balance")+Balance("sell", "Balance"))>=AccountEquity()/Limit){

   int slippage=3;
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
    if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage);
    if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage);
    }
    }
//======================================================================================     
   if(timeprevMIN!=iTime(NULL,mper[OpenNewTF],0))
   {      
      ticket=0;
      CountTrades = CountTrades("buy");
      
      if(CloseFriday==true&&DayOfWeek()==5&&TimeCurrent()>=StrToTime(CloseFridayHour+":00"))return(0); // çàïðåò â ïÿòíèöó
     
      if (ind_iOP > 0) // óñëîâèå äëÿ ïåðâîãî îðäåðà áàé åñëè öåíà íèæå óðîâíÿ îòêðûòèÿ áàðà, òî îðäåð áàé íå îòêðûâàåòñÿ
      {
      if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 0) < 70.0) {
      if (iCustom(NULL, mper[TFSilence1], "Silence2_02", PerSilence1, BuffSilence1, 2, 0) < Sil_Level1) {
      if (CountTrades==0 && LongTradeNew==true)
      {
         CommentTrades = "TENGRI "+Symbol()+" - Buy "+(CountTrades+1);
         Buy_NewLot = NewLot("buy");
         while(ticket<1)
         {  Prof = Prof("buy");
            Print("Ïîêóïàåì. Íîâûé. Ïàðàìåòðû. ñèìâîë="+Symbol()+", ëîò="+DoubleToStr(Buy_NewLot,2)+", öåíà="+DoubleToStr(Ask,4)+" ïðîôèò="+DoubleToStr(Prof,4)+", êîììåíò="+CommentTrades+" ìàäæèê="+MagicNumber);
            ticket = OrderSend(Symbol(),OP_BUY,Buy_NewLot,NormalizeDouble(Ask,Digits),3,0,Prof,CommentTrades,MagicNumber,0,Blue);
            if(ticket<1) {Print("Îøèáêà: ",GetLastError()," Íîâàÿ ïîïûòêà ïîêóïêè ÷åðåç "+(Povtor*60)+" ñåêóíä");Sleep(Povtor*60*1000);}
            RefreshRates();
            }
          }    
        }    
      } 
      }
      CountTrades = CountTrades("sell");
      if(CloseFriday==true&&DayOfWeek()==5&&TimeCurrent()>=StrToTime(CloseFridayHour+":00"))return(0); //çàïðåò â ïÿòíèöó
     
      if (ind_iOP < 0) // óñëîâèå äëÿ ïåðâîãî îðäåðà ñåëë åñëè öåíà âûøå óðîâíÿ îòêðûòèÿ áàðà, òî îðäåð ñåëë íå îòêðûâàåòñÿ
      {
      if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 0) > 30.0) {
      if (iCustom(NULL, mper[TFSilence1], "Silence2_02", PerSilence1, BuffSilence1, 2, 0) < Sil_Level1) {
      if (CountTrades==0 && ShortTradeNew==true)  
      {
         CommentTrades = "TENGRI "+Symbol()+" - Sell "+(CountTrades+1);
         Sell_NewLot = NewLot("sell");
         while(ticket<1)
         {  Prof = Prof("sell");
            Print("Ïðîäàåì. Íîâûé. Ïàðàìåòðû. ñèìâîë="+Symbol()+", ëîò="+DoubleToStr(Sell_NewLot,2)+", öåíà="+DoubleToStr(Bid,4)+" ïðîôèò="+DoubleToStr(Prof,4)+", êîììåíò="+CommentTrades+" ìàäæèê="+MagicNumber);
            ticket = OrderSend(Symbol(),OP_SELL,Sell_NewLot,NormalizeDouble(Bid,Digits),3,0,Prof,CommentTrades,MagicNumber,0,Red);
            if(ticket<1) {Print("Îøèáêà: ",GetLastError()," Íîâàÿ ïîïûòêà ïîêóïêè ÷åðåç "+(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");
         while(ticket<1)
         {
            Print("Ïîêóïàåì. Ñëåäóþùèé. Ïàðàìåòðû. ñèìâîë:"+Symbol()+", ëîò="+DoubleToStr(Buy_NextLot,2)+", öåíà ="+DoubleToStr(Ask,4)+", êîììåíò="+CommentTrades+", ìàäæèê="+MagicNumber);
            ticket = OrderSend(Symbol(),OP_BUY,Buy_NextLot,NormalizeDouble(Ask,Digits),3,0,0,CommentTrades,MagicNumber,0,Blue);
            if(ticket<1) {Print("Îøèáêà: ",GetLastError()," Íîâàÿ ïîïûòêà ïîêóïêè ÷åðåç "+(Povtor*60)+" ñåêóíä");Sleep(Povtor*60*1000);} else Ñorrect("buy");
         RefreshRates();
         }   
         
         
      } 
      CountTrades = CountTrades("sell"); 
      if (CountTrades>0 && NextOrder("sell"))
      {
         CommentTrades = "TENGRI "+Symbol()+" - Sell "+(CountTrades+1);
         Sell_NextLot = NextLot("sell");
         while(ticket<1)
         {
            Print("Ïðîäàåì. Ñëåäóþùèé. Ïàðàìåòðû. ñèìâîë:"+Symbol()+", ëîò="+DoubleToStr(Sell_NextLot,2)+", öåíà="+DoubleToStr(Bid,4)+", êîììåíò="+CommentTrades+", ìàäæèê="+MagicNumber);
            ticket = OrderSend(Symbol(),OP_SELL,Sell_NextLot,NormalizeDouble(Bid,Digits),3,0,0,CommentTrades,MagicNumber,0,Red);
            if(ticket<1) {Print("Îøèáêà: ",GetLastError()," Íîâàÿ ïîïûòêà ïðîäàæè ÷åðåç "+(Povtor*60)+" ñåêóíä");Sleep(Povtor*60*1000);} else Ñorrect("sell");
         RefreshRates();
         }   
       }
      timeprevMAX=iTime(NULL,mper[OpenNextTF],0);
   }
  
   return(0);
  }
//+------------------------------------------------------------------+
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(string OrdType) 
{
   int trade;
   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()||OrderMagicNumber()!=MagicNumber) continue;
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
         {
         //-----
            if (OrdType=="buy")
            {
               if(OrderType()==OP_BUY)
               {
                  TP_all = AveragePrice+TP*Point;
                  if (OrderTakeProfit() != TP_all)
                  {
                     Print("Ìîäèôèöèðóåì ïîêóïêó. Áåçóáûòîê = "+DoubleToStr(AveragePrice,4)+", ÒÐ = "+DoubleToStr(TP,4)+" Íîâûé óðîâåíü = "+DoubleToStr(TP_all,4));
                     OrderModify(OrderTicket(), AveragePrice, OrderStopLoss(), TP_all, 0, Yellow);
                  }
               }   
            }
            //----
            if (OrdType=="sell")
            {
               if(OrderType()==OP_SELL)
               {
                  TP_all = AveragePrice-TP*Point;
                  if (OrderTakeProfit() != TP_all)
                  {
                     Print("Ìîäèôèöèðóåì ïðîäàæó. Áåçóáûòîê = "+DoubleToStr(AveragePrice,4)+", ÒÐ = "+DoubleToStr(TP,4)+" Íîâûé óðîâåíü = "+DoubleToStr(TP_all,4));
                     OrderModify(OrderTicket(), AveragePrice, OrderStopLoss(), TP_all, 0, Yellow);
                  }
 
               }   
            }
         //----   
         }   
    }        
} 

//+------------------------------------------------------------------+
//Âû÷èñëÿåì ðàçìåð ïåðâîãî ëîòà
double NewLot(string OrdType)
{
   double tLots;
   double minlot = MarketInfo(Symbol(), MODE_MINLOT);
   
   if (OrdType=="buy")
   {
      if (FixLot) tLots = LotSize; else tLots = NormalizeDouble(LotSize * NormalizeDouble(AccountEquity()/LotStep,0), LotDecimal); 
      }
   if (OrdType=="sell")
   {
      if (FixLot) tLots = LotSize; else tLots = NormalizeDouble(LotSize * NormalizeDouble(AccountEquity()/LotStep,0), 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 NextOrder(string OrdType)
{
   double MA_30 = iMA(Symbol(), mper[TF_MA2], Per_MA2, 0, 0, PRICE_CLOSE, 0); 
   bool NextOrd = false;
   int PipStepEX;
   if (OrdType=="buy"&&MA_30<Bid)
   {
     if(iCustom(NULL, mper[TFSilence2], "Silence2_02", PerSilence2, BuffSilence2, 2, 0) < Sil_Level2) 
      PipStepEX = NormalizeDouble(PipStep*MathPow(PipStepExponent,CountTrades(OrdType)),0);
      else PipStepEX = NormalizeDouble(PipStep2*MathPow(PipStepExponent,CountTrades(OrdType)),0);
      if (FindLastOrder(OrdType, "Price") - Ask >= PipStepEX * Point && CountTrades(OrdType)<MaxTrades)
      {
         {
            NextOrd = TRUE;
         }      
      }   
   }

   if (OrdType=="sell"&&MA_30>Bid)
   {
    if(iCustom(NULL, mper[TFSilence2], "Silence2_02", PerSilence2, BuffSilence2, 2, 0) < Sil_Level2)
      PipStepEX = NormalizeDouble(PipStep*MathPow(PipStepExponent,CountTrades(OrdType)),0);
      else PipStepEX = NormalizeDouble(PipStep2*MathPow(PipStepExponent,CountTrades(OrdType)),0);
      if (Bid - FindLastOrder(OrdType, "Price") >= PipStepEX * Point && CountTrades(OrdType)<MaxTrades)
      {
         {
            NextOrd = TRUE;
         }      
      }   
   }

   return(NextOrd);
}  

//+------------------------------------------------------------------+
//Âîçâðàùàåò öåíó èëè ëîò ïîñëåäíåãî îðäåðà
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()||OrderMagicNumber()!=MagicNumber) continue;
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
         {
         //----
            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()||OrderMagicNumber()!=MagicNumber) continue;
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
      {
      //----
         if (OrdType == "buy")
         {
            if(OrderType()==OP_BUY) count++;
         }
         //----
         if (OrdType == "sell")
         {
            if(OrderType()==OP_SELL) count++;
         }
      //----
      }
   }
   return(count);
}
//+------------------------------------------------------------------+
//Âîçâðàùàåò ñðåäíþþ öåíó îòêðûòûõ ïîç ïî íàïðàâëåíèþ
double AveragePrice(string 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()||OrderMagicNumber()!=MagicNumber) continue;
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
      {
      //-----
         if (OrdType == "buy")
         {
            if(OrderType()==OP_BUY)
            {
               AveragePrice=AveragePrice+OrderOpenPrice()*OrderLots();
               Count=Count + OrderLots();
            }
         }
         //----
         if (OrdType == "sell")
         {
            if(OrderType()==OP_SELL)
            {
               AveragePrice=AveragePrice+OrderOpenPrice()*OrderLots();
               Count=Count + OrderLots();
            }
         }
      //----   
      }   
   }
   AveragePrice=NormalizeDouble(AveragePrice/Count, Digits);
      
  return(AveragePrice);    
}
//----------------------------------------------------------------------
//Ïðîöåäóðà âûâîäèò èíôîðìàöèþ ïî òîðãàì:
void Information()
{
   if (InformationOnChart)
   {
      Comment("" 
      //+ "\n"                         
      + "                              TENGRI MARTINGEIL fx.09@mail.ru "+Symbol()                         
      + "\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()||OrderMagicNumber()!=MagicNumber) continue;
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
      {
      //-----
         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);
}
//===================================================
//Çàêðûòèå âñåõ ïîçèöèé





Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:

Relative strength index

Moving average indicator


Custom Indicators Used:
Silence2_02

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

Other Features: