TENGRI_Trofi 1.4.16'

Author: Copyright � Evgeniy Trofimov, 2009
Price Data Components
Series array that contains open time of each bar
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
Indicators Used
Relative strength index
0 Views
0 Downloads
0 Favorites
TENGRI_Trofi 1.4.16'
//äëÿ ðàáîòû ñîâåòíèêà íåîáõîäèìû ñëåäóþùèå èíäèêàòîðû:
//Corridor
//Silence2_02
//NonLagAMA

#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 b = "------- íàñòðîéêè Corridor -------";
extern int    TF_Corridor =  2;    //òàéìôðåéì èíäèêàòîðà Coridor, åñëè 1-Ì1, 2-Ì5, 3-Ì15...èòä
extern int    Per_Corridor=  12;
extern int    Min_Corridor=  300;  //ìèíèìàëüíûé êîðèäîð â ïóíêòàõ
extern string d = "------- íàñòðîéêè Silence -------";
extern int    TF_Sil      =  2;    //òàéìôðåéì èíäèêàòîðà 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      =  2;    //òàéìôðåéì èíäèêàòîðà 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 = 1.00;        //ðàçìåð ëîòà 1-ãî îðäåðà åñëè FixLot = true;
extern bool   FixLot = true;        //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=false;         //Âêëþ÷åíèå çàêðûòèÿ Ëîêà âñåõ îðäåðîâ ïî äîñòèæåíèè çàäàííîãî ëèìèòà
extern double  LossLimit = 0.75;       //Ëèìèò íà çàêðûòèå îðäåðîâ(Äîëÿ Equity îò äåïîçèòà)
extern bool    Final=false;       //Åñëè true, òî ïåðâûé îðäåð îòêðûâàòüñÿ íå áóäåò

extern int     OpenNewTF = 2;        //òàéìôðåì äëÿ îòêðûòèÿ íîâûõ îðäåðîâ, åñëè 1-Ì1, 2-Ì5, 3-Ì15...èòä
extern int     OpenNextTF = 2;       //òàéìôðåéì äëÿ îòêðûòèÿ êîëåí îðäåðîâ, åñëè 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 = false; //âûâîäèòü ëè èíôîðìàöèþ íà ãðàôèê, îòêëþ÷èòü äëÿ òåñòåðà (çàìåäëÿåò)
extern int     MagicNumber = 20090919;     //ïî ýòîìó íîìåðó ïðîèñõîäèò èäåíòèôèêàöèÿ îðäåðîâ íà ïðåíàäëåæíîñòü ñîâåòíèêó
                                       //åñëè MagicNumber = 0, òî ñîâåòíèê ïðèìåò çà ñâîèõ âñå îñòàëüíûå îðäåðà íà òåêóùåì èíñòðóìåíòå!
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();
   if(IsTradeAllowed()&&!IsTradeContextBusy()) {
      Ñ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")) {
         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"))  {
         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) {
   if(Month()==12 && Year()==2008) return(false);
   double RSI = iRSI(NULL, mper[TF_RSI], Per_RSI, PRICE_CLOSE, 0);
   double UpCorridor=iCustom(NULL, mper[TF_Corridor],"Corridor", Per_Corridor, 0, 0);
   double DnCorridor=iCustom(NULL, mper[TF_Corridor],"Corridor", Per_Corridor, 1, 0);
   
   bool NewOrd = false;
   if(UpCorridor-DnCorridor>Min_Corridor*Point) {
      if(OrdType=="buy") {
         if(RSI<70) {
            if(High[0]>UpCorridor) {
               NewOrd = TRUE;
            }
         }
      }
   
      if (OrdType=="sell") {
         if(RSI>30) {
            if(Low[0]<DnCorridor) {
               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 UpCorridor=iCustom(NULL, mper[TF_Corridor],"Corridor", Per_Corridor, 0, 0);
   double DnCorridor=iCustom(NULL, mper[TF_Corridor],"Corridor", Per_Corridor, 1, 0);

   bool NextOrd = false;
   int PipStepEX;
   if(Silence<Level_Sil && UpCorridor-DnCorridor>Min_Corridor*Point) {
      if (OrdType=="buy") {
         if(High[0]>UpCorridor) {
            PipStepEX = NormalizeDouble(PipStep*MathPow(PipStepExponent,CountTrades(OrdType)),0);
            if (FindLastOrder(OrdType, "Price") - Ask >= PipStepEX * Point && CountTrades(OrdType)<MaxTrades) {
               NextOrd = TRUE;
            }
         }
      }
   
      if (OrdType=="sell") {
         if(Low[0]<DnCorridor) {
            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);
} //LotDecimal()
//===================================================
//Çàêðûòèå âñåõ ïîçèöèé
//+------------------------------------------------------------------+
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()
//+------------------------------------------------------------------+

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