Ilan_RSI_mm_extr07

Author:
Price Data Components
Series array that contains close prices for each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself It automatically opens orders when conditions are reached
Indicators Used
Stochastic oscillator
0 Views
0 Downloads
0 Favorites
Ilan_RSI_mm_extr07
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
#property copyright ""
#property link      ""
// äîïèñûâàë runik, ngb2008@mail.ru äëÿ èñïîëüçîâàíèÿ íåîáõîäèìî ãðóçèòü ãðàôèêè h1 h4 d1 w
//Íà÷èíàåì ðàáîòàòü âíóòðè ñåññèè, åñëè ìû âûõîäèì çà ïðåäåëû ñåññèîíûõ 
//ýêñòðåìóìîâ, òî íà÷èíàåì ðàáîòàòü ïî äíåâíûì ýêñòðåìóìàì, çàòåì ïî íåäåëüíûì, ìåñÿ÷íûì è ò.ä. 
// Ïðè ïðîáèòè ýêñòðåìóìîâ âîçðàñòàåò ïèïñòåï,  â ìàññèâå pexpo ìíîæèòåëè
// êñòàòè, êîãäà ìû ïåðåæèëè áîëüøîé òðåíä(íî ìû íå çàêðûëè ñåðèþ), òî ïîñëå ýòîãî íàñòóïèë ôëåò, ÷åðåç îäíó íåäåëþ ñäåëêè ñíîâà íà÷èíàþò îòêðûâàòüñÿ 
//áîëüøèìè ëîòàìè íî ïðè ìàëîì ïèïñòåïå è ìû áûñòðî âûõîäèì â ïðîôèò
// ñìîòðåòü òàêæå Ìíîæèòåëè ïèïñòåïà
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
double Stoploss = 5000.0;          // Ýòè òðè ïàðàìåòðà íå ðàáîòàþò
double TrailStart = 100.0;
double TrailStop = 100.0;
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
extern string ñ1 = "Îñíîâíûå ïàðàìåòðû";
extern double LotExponent = 2;  // óìíîæåíèå ëîòîâ â ñåðèè ïî ýêñïîíåíòå äëÿ âûâîäà â áåçóáûòîê. ïåðâûé ëîò 0.1, ñåðèÿ: 0.15, 0.26, 0.43 ...
extern double Lots = 0.1;         // òåïåðü ìîæíî è ìèêðîëîòû 0.01 ïðè ýòîì åñëè ñòîèò 0.1 òî ñëåäóþùèé ëîò â ñåðèè áóäåò 0.16
extern double Risk = 0;          // ïåðâàÿ ñäåëêà ðàçìåðîì â % îò äåïî
extern double TakeProfit = 20.0;  // ìèíèìàëüíûé òåéê ïðîôèò
extern double TakeProfitLast = 5.0;  // ìèíèìàëüíûé òåéê ïðîôèò
extern double PipStep = 30;     // øàã ïåðâîãî êîëåíà
extern double TrendPS = 14;     // øàã îòêðûòèÿ êîëåí ïî òðåíäó, åñëè =0 òî ïî òðåíäó íå ðàáîòàåì, íåëüçÿ äåëàòü ìåíüøå èëè ðàâíûì óðîâíþ ñòîïîâ
extern int MaxTrades = 10;                // ìàêñèìàëüíî êîëè÷åñòâî îäíîâðåìåííî îòêðûòûõ îðäåðîâ

extern string s1 = "Âñïîìîãàòåëüíûå ïàðàìåòðû";
extern int MagicNumber = 54321;    // ìàãèê
extern double slip = 3.0;          // ïðîñêàëüçûâàíèå
extern int lotdecimal = 2;         // 2 - ìèêðîëîòû 0.01, 1 - ìèíè ëîòû 0.1, 0 - íîðìàëüíûå ëîòû 1.0
extern double LastTrade=100; // ïîñëå ýòîãî îðäåðà ðàçìåðû îðäåðîâ ñòàíîâÿòüñÿ = ïîñëåäíåìó îòêðûòîìó à òåéê ïåðåíîñèòñÿ â òî÷êó áåçóáûòîê +1 ïóíêò
extern double PercUroven=0;  // Óðîâåíü â % ïîñëå êîòîðîãî èëàí íå ðàáîòàåò íàïðèìåð 600 èëè 1000
double otkat = 0;         // îòêàò â % (ñìîòðèòå ïëàí Á ) åñëè îòêàò áîëüøå 0 òî ïðîôèò 
// âûñòàâëÿåòñÿ èëè ïî óðîâíþ îòêàòà èëè ïî óðîâíþ áåçóáûòêà  ïëþñ òåéêïðîôèò (â çàâèñèìîñòè îò òîãî ÷òî áîëüøå)
// òðåíä îïðåäåëÿåòñÿ ìàêñèìàëüíàÿ öåíà ñäåëêè - ìèíèìàëüíîé öåíà ñäåëêè 
extern string s2 = "Ïàðàìåòðû ñâÿçàííûå ñ âðåìåíåì";
extern int TFIlanX=0;    // òàéìôðåéì íà êîòîðîì èëàí îòêðûâàåò ñäåëêè ñì. mper ïðè = 5 - H1
extern int TFInd=5;     // òàéìôðåéì íà êîòîðîì ðàáîòàåò èíäèêàòîð âñòðîåííûé â èëàí
extern int nH1=0;       //   =3 ïîñëå 3 ñäåëêè ïåðåêëþ÷àåìñÿ íà ÒÔ Í1
extern int nH4=0;       //   =5 ïîñëå 5 ñäåëêè ïåðåêëþ÷àåìñÿ íà òô Í4
//extern int flethour1=0; // íî÷üþ â ïåðèîä ñ 1 äî 9
//extern int flethour2=0;  // óìåíüøàåì ïèïñòåï â 
//extern double fletlotexp=2; // â äâà 
string s3 = "Ìíîæèòåëè ïèïñòåïà ïðè ïåðåõîäå ñ óðîâíÿ";
double SessionPipExpo=3;
double DayPipExpo=5;
double WeekPipExpo=8;
double MonthPipExpo=13;
double KvartalPipExpo=21;
double PolGodaPipExpo=34;
extern string ñ = "Ïàðàìåòðû CÒÎÕÀÑÒÈÊÀ";
extern int IndStep = 0;  // åñëè >0 òî íàïðèìåð ïîñëå 4 ñäåëêè ïðè îòêðûòèè øàãà ïðèíèìàåì âî âíèìàíèå èíäèêàòîð, åñëè èíäèêàòîð íå ïîêàçûâàåò íóæíîå íàïðàâëåíèå òî íå îòêðûâàåìñÿ
//----------------------------------------------------------- ýòà ÷àñòü êîäà èç ìîäèôèêàöèè èëàíà ñäåëàíîé BigGun c fx4u.ru
extern int KPeriod = 5;
extern int DPeriod = 4;
extern int Slowing = 3;
extern int Method =MODE_SMMA;
extern int Price =PRICE_CLOSE;
//-----------------------------------------------------------
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
bool UseEquityStop = FALSE;
double TotalEquityRisk = 20.0;
bool UseTrailingStop = FALSE;
bool UseTimeOut = FALSE;
double MaxTradeOpenHours = 48.0;

//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
int nt = 6; // êîëè÷åñòâî âðåìåííûõ ìàñøòàáîâ
double max[6],min[6]; // ýêñòðåìóìû öåí
int bars1[6]={8,8,5,22,13,26}; // ñêîëüêî áàðîâ äëÿ îïðåäåëåíèÿ ýêñòðåìóìîâ
int bper[6]={60,240,1440,1440,10080,10080}; // êàêèõ áàðîâ  íàäî äëÿ îïðåäåëåíèÿ ýêñòðåìóìîâ
double pexpo[6]={3,5,8,13,21,34}; // ìíîæèòåëè äëÿ ïèïñòåïà ïðè ïðîáèòèè ýêñòðåìóìîâ
int mper[10]={0,1,5,15,30,60,240,1440,10080,43200};
int TFIlan=0;
int ccc=0;
double lota[30]; // ëîòû
int modea[30];   // òèï îðäåðà OP_BUY 0 , OP_SELL 1 , OP_BUYLIMIT 2 , OP_SELLLIMIT 3 , OP_BUYSTOP 4 , OP_SELLSTOP 5 
double opa[30];       // öåíà îòêðûòèÿ
double sla[30];      // ñòîïëîññ
double tpa[30];      // ïðîôèò
string comma[30];     // êîììåíòàðèè
datetime tima[30];    // âðåìÿ îòêðûòèÿ ñäåëêè 
double profa[30];
int ticka[30]; 
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
double PriceTarget, StartEquity, BuyTarget, SellTarget ;
double AveragePrice, SellLimit, BuyLimit ;
double LastBuyPrice, LastSellPrice, Spread;
bool flag;
string EAName = "Ilan_extr07";
int timeprev = 0, expiration;
int NumOfTrades = 0;
double iLots;
int cnt = 0, total;
double Stopper = 0.0;
bool TradeNow = FALSE, LongTrade = FALSE, ShortTrade = FALSE;
int ticket;
bool NewOrdersPlaced = FALSE;
double AccountEquityHighAmt, PrevEquity;
int TrendRe=0; // ïðè =0 ðåæèì îáû÷íîãî èëàíà, ïðè =1 ðåæèì òðåíä, ò.å. äîêóïàåìñÿ ïî òðåíäó
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
int init() {
   Spread = MarketInfo(Symbol(), MODE_SPREAD) * Point;
   pexpo[0]=SessionPipExpo;
   pexpo[1]=DayPipExpo;
   pexpo[2]=WeekPipExpo;
   pexpo[3]=MonthPipExpo;
   pexpo[4]=KvartalPipExpo;
   pexpo[5]=PolGodaPipExpo;
   return (0);
}


int deinit() {
   return (0);
}
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí
int start() {

   
   if (AccountMargin()>0 && PercUroven>0)
   if (PercUroven>AccountEquity()/AccountMargin()*100) { return(0);}
   
   
   if (TrendRe==0)
     {
        int total1 = CountTrades();
   double AveragePrice1 = 0;
   double Count1 = 0;
   double Profit1=0;
   double ProfitPoint=0;
   int dir = -1;
   for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
            AveragePrice1 += OrderOpenPrice() * OrderLots();
            Count1 += OrderLots();
            Profit1+= OrderProfit();
            if (OrderType() == OP_BUY) dir=0;
            if (OrderType() == OP_SELL) dir=1;
         }
      }
   }
   if (total1 > 2) 
     { 
     AveragePrice1 = NormalizeDouble(AveragePrice1 / Count1, Digits);
     int ProfitPips=TakeProfit;
     if (total1>LastTrade) ProfitPips=TakeProfitLast;
     if (dir==0 && TrendRe==0) {ProfitPoint=AveragePrice1+ProfitPips*Point;if (Bid>=ProfitPoint) CloseThisSymbolAll(); }
     if (dir==1 && TrendRe==0) {ProfitPoint=AveragePrice1-ProfitPips*Point;if (Ask<=ProfitPoint) CloseThisSymbolAll(); }            
     }   
     }
   
   int hbars=FillExtra();
   
 //  Print("  ",max[0],"  ",min[0],"  ",max[1],"  ",min[1],"  ",max[2],"  ",min[2],"  ",max[3],"  ",min[3],"  ",max[4],"  ",min[4],"  ",max[5],"  ",min[5]);

   double PrevCl;
   double CurrCl;
   if (UseTrailingStop) TrailingAlls(TrailStart, TrailStop, AveragePrice);
   if (UseTimeOut) {
      if (TimeCurrent() >= expiration) {
         CloseThisSymbolAll();
         Print("Closed All due to TimeOut");
      }
   }
  
   total = CountTrades();   
   if (TrendPS>0) TrenT();
   TFIlan=TFIlanX;
   if (nH1!=0 && total>=nH1) TFIlan=5;
   if (nH4!=0 && total>=nH4) TFIlan=6;
   if (timeprev == iTime(NULL,mper[TFIlan],0)) return (0);
   timeprev = iTime(NULL,mper[TFIlan],0);

  
   double CurrentPairProfit = CalculateProfit();
   if (UseEquityStop) {
      if (CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {
         CloseThisSymbolAll();
         Print("Closed All due to Stop Out");
         NewOrdersPlaced = FALSE;
      }
   }

   if (total == 0) flag = FALSE;
   for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         if (OrderType() == OP_BUY) {
            LongTrade = TRUE;
            ShortTrade = FALSE;
            break;
         }
      }
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         if (OrderType() == OP_SELL) {
            LongTrade = FALSE;
            ShortTrade = TRUE;
            break;
         }
      }
   }
   if (total > 0 && total <= MaxTrades) {
      RefreshRates();
      LastBuyPrice = FindMinBuyPrice();
      LastSellPrice = FindMaxSellPrice();
      if (LongTrade && LastBuyPrice - Ask >= PipStepX(0) * Point && alert(1)>0) TradeNow = TRUE;
      if (ShortTrade && Bid - LastSellPrice >= PipStepX(1) * Point && alert(-1)<0) TradeNow = TRUE;
   }
   if (total < 1) {
      ShortTrade = FALSE;
      LongTrade = FALSE;
      TradeNow = TRUE;
      StartEquity = AccountEquity();
   }
   if (TradeNow) {
 //     LastBuyPrice = FindLastBuyPrice();
 //     LastSellPrice = FindLastSellPrice();
      double MaxLot1=FindMaxLots();
      TrendRe=0;
      if (ShortTrade) {
         NumOfTrades = total;
         iLots = NormalizeDouble(MaxLot1*LotExponent, lotdecimal);
         if (NumOfTrades>=LastTrade && LastTrade>0) iLots = MaxLot1;
      
         RefreshRates();
         ticket = OpenPendingOrder(1, iLots, Bid, slip, Ask, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, HotPink);
         if (ticket < 0) {
            Print("Error: ", GetLastError());
            return (0);
         }
 //        LastSellPrice = FindLastSellPrice();
         TradeNow = FALSE;
         NewOrdersPlaced = TRUE;
      } else {
         if (LongTrade) {
            NumOfTrades = total;
         iLots = NormalizeDouble(MaxLot1*LotExponent, lotdecimal);
         if (NumOfTrades>=LastTrade && LastTrade>0) iLots = MaxLot1;
            ticket = OpenPendingOrder(0, iLots, Ask, slip, Bid, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime);
            if (ticket < 0) {
               Print("Error: ", GetLastError());
               return (0);
            }
  //          LastBuyPrice = FindLastBuyPrice();
            TradeNow = FALSE;
            NewOrdersPlaced = TRUE;
         }
      }
   }
   if (TradeNow && total < 1) {
      PrevCl = iClose(Symbol(), mper[TFIlan], 2);
      CurrCl = iClose(Symbol(), mper[TFIlan], 1);
      SellLimit = Bid;
      BuyLimit = Ask;
      TrendRe=1;
      if (!ShortTrade && !LongTrade) {
         NumOfTrades = total;
         iLots = NormalizeDouble(GetLots() * MathPow(LotExponent, NumOfTrades), lotdecimal);
         if (NumOfTrades>=LastTrade && LastTrade>0) iLots = NormalizeDouble(GetLots() * MathPow(LotExponent, LastTrade), lotdecimal);
         if (PrevCl > CurrCl) {
            if (iRSI(NULL, mper[TFInd], 14, PRICE_CLOSE, 1) > 30.0) { //áîëüøå  >
               ticket = OpenPendingOrder(1, iLots, SellLimit, slip, SellLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, HotPink);
               if (ticket < 0) {
                  Print("Error: ", GetLastError());
                  return (0);
               }
//               LastBuyPrice = FindLastBuyPrice();
               NewOrdersPlaced = TRUE;
            }
         } else {
            if (iRSI(NULL, mper[TFInd], 14, PRICE_CLOSE, 1) < 70.0) { // ìåíüøå  <
               ticket = OpenPendingOrder(0, iLots, BuyLimit, slip, BuyLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime);
               if (ticket < 0) {
                  Print("Error: ", GetLastError());
                  return (0);
               }
  //             LastSellPrice = FindLastSellPrice();
               NewOrdersPlaced = TRUE;
            }
         }
         if (ticket > 0) expiration = TimeCurrent() + 60.0 * (60.0 * MaxTradeOpenHours);
         TradeNow = FALSE;
      }
   }
   total = CountTrades();
   AveragePrice = 0;
   double Count = 0;double maxpr=0; double minpr=10000000;
   for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
            AveragePrice += OrderOpenPrice() * OrderLots();
            Count += OrderLots();
            if (OrderOpenPrice()>maxpr) maxpr=OrderOpenPrice();
            if (OrderOpenPrice()<minpr) minpr=OrderOpenPrice();
         }
      }
   }
   if (total > 0) AveragePrice = NormalizeDouble(AveragePrice / Count, Digits);
   if (NewOrdersPlaced) {
      for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
            if (OrderType() == OP_BUY) {
               PriceTarget = AveragePrice + TakeProfit * Point;
               double OtkatTarget=NormalizeDouble(minpr+otkat/100*(maxpr-minpr+PipStepX(0)*Point), Digits);
               if (otkat>0 && OtkatTarget>PriceTarget) PriceTarget=OtkatTarget;
               if (NumOfTrades>LastTrade+1) PriceTarget = AveragePrice + TakeProfitLast * Point;               
               BuyTarget = PriceTarget;
               Stopper = AveragePrice - Stoploss * Point;
               flag = TRUE;
            }
         }
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
            if (OrderType() == OP_SELL) {
               PriceTarget = AveragePrice - TakeProfit * Point;
               OtkatTarget=NormalizeDouble(maxpr-otkat/100*(maxpr-minpr+PipStepX(1)*Point), Digits);
               if (otkat>0 && OtkatTarget<PriceTarget) PriceTarget=OtkatTarget;
               if (NumOfTrades>LastTrade+1) PriceTarget = AveragePrice - TakeProfitLast * Point;
               SellTarget = PriceTarget;
               Stopper = AveragePrice + Stoploss * Point;
               flag = TRUE;
            }
         }
      }
   }
   if (NewOrdersPlaced && TrendRe==0) {
      if (flag == TRUE) {
         for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
            OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
            if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) OrderModify(OrderTicket(), AveragePrice, OrderStopLoss(), PriceTarget, 0, Yellow);
            NewOrdersPlaced = FALSE;
         }
      }
   }
   return (0);
}
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí

int CountTrades() {
   int count = 0;
   for (int 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 (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
   }
   return (count);
}
//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí

void CloseThisSymbolAll() {
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Symbol()) {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
            if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
            if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
         }
         Sleep(1000);
      }
   }
}

//íííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí

int OpenPendingOrder(int pType, double pLots, double pPrice, int pSlippage, double ad_24, int ai_32, int ai_36, string a_comment_40, int a_magic_48, int a_datetime_52, color a_color_56) {
   int l_ticket_60 = 0;
   int l_error_64 = 0;
   int l_count_68 = 0;
   int li_72 = 100;
   switch (pType) {
   case 2:
      for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
         l_ticket_60 = OrderSend(Symbol(), OP_BUYLIMIT, pLots, pPrice, pSlippage, StopLong(ad_24, ai_32), TakeLong(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
         l_error_64 = GetLastError();
         if (l_error_64 == 0/* NO_ERROR */) break;
         if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
         Sleep(1000);
      }
      break;
   case 4:
      for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
         l_ticket_60 = OrderSend(Symbol(), OP_BUYSTOP, pLots, pPrice, pSlippage, StopLong(ad_24, ai_32), TakeLong(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
         l_error_64 = GetLastError();
         if (l_error_64 == 0/* NO_ERROR */) break;
         if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
         Sleep(5000);
      }
      break;
   case 0:
      for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
         RefreshRates();
         l_ticket_60 = OrderSend(Symbol(), OP_BUY, pLots, Ask, pSlippage, StopLong(Bid, ai_32), TakeLong(Ask, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
         l_error_64 = GetLastError();
         if (l_error_64 == 0/* NO_ERROR */) break;
         if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
         Sleep(5000);
      }
      break;
   case 3:
      for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
         l_ticket_60 = OrderSend(Symbol(), OP_SELLLIMIT, pLots, pPrice, pSlippage, StopShort(ad_24, ai_32), TakeShort(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
         l_error_64 = GetLastError();
         if (l_error_64 == 0/* NO_ERROR */) break;
         if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
         Sleep(5000);
      }
      break;
   case 5:
      for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
         l_ticket_60 = OrderSend(Symbol(), OP_SELLSTOP, pLots, pPrice, pSlippage, StopShort(ad_24, ai_32), TakeShort(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
         l_error_64 = GetLastError();
         if (l_error_64 == 0/* NO_ERROR */) break;
         if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
         Sleep(5000);
      }
      break;
   case 1:
      for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
         l_ticket_60 = OrderSend(Symbol(), OP_SELL, pLots, Bid, pSlippage, StopShort(Ask, ai_32), TakeShort(Bid, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
         l_error_64 = GetLastError();
         if (l_error_64 == 0/* NO_ERROR */) break;
         if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
         Sleep(5000);
      }
   }
   return (l_ticket_60);
}

double StopLong(double ad_0, int ai_8) {
   if (ai_8 == 0) return (0);
   else return (ad_0 - ai_8 * Point);
}

double StopShort(double ad_0, int ai_8) {
   if (ai_8 == 0) return (0);
   else return (ad_0 + ai_8 * Point);
}

double TakeLong(double ad_0, int ai_8) {
   if (ai_8 == 0) return (0);
   else return (ad_0 + ai_8 * Point);
}

double TakeShort(double ad_0, int ai_8) {
   if (ai_8 == 0) return (0);
   else return (ad_0 - ai_8 * Point);
}

double CalculateProfit() {
   double ld_ret_0 = 0;
   for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         if (OrderType() == OP_BUY || OrderType() == OP_SELL) ld_ret_0 += OrderProfit();
   }
   return (ld_ret_0);
}

void TrailingAlls(int pType, int ai_4, double a_price_8) {
   int l_ticket_16;
   double l_ord_stoploss_20;
   double l_price_28;
   if (ai_4 != 0) {
      for (int l_pos_36 = OrdersTotal() - 1; l_pos_36 >= 0; l_pos_36--) {
         if (OrderSelect(l_pos_36, SELECT_BY_POS, MODE_TRADES)) {
            if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
            if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber) {
               if (OrderType() == OP_BUY) {
                  l_ticket_16 = NormalizeDouble((Bid - a_price_8) / Point, 0);
                  if (l_ticket_16 < pType) continue;
                  l_ord_stoploss_20 = OrderStopLoss();
                  l_price_28 = Bid - ai_4 * Point;
                  if (l_ord_stoploss_20 == 0.0 || (l_ord_stoploss_20 != 0.0 && l_price_28 > l_ord_stoploss_20)) OrderModify(OrderTicket(), a_price_8, l_price_28, OrderTakeProfit(), 0, Aqua);
               }
               if (OrderType() == OP_SELL) {
                  l_ticket_16 = NormalizeDouble((a_price_8 - Ask) / Point, 0);
                  if (l_ticket_16 < pType) continue;
                  l_ord_stoploss_20 = OrderStopLoss();
                  l_price_28 = Ask + ai_4 * Point;
                  if (l_ord_stoploss_20 == 0.0 || (l_ord_stoploss_20 != 0.0 && l_price_28 < l_ord_stoploss_20)) OrderModify(OrderTicket(), a_price_8, l_price_28, OrderTakeProfit(), 0, Red);
               }
            }
            Sleep(1000);
         }
      }
   }
}

double AccountEquityHigh() {
   if (CountTrades() == 0) AccountEquityHighAmt = AccountEquity();
   if (AccountEquityHighAmt < PrevEquity) AccountEquityHighAmt = PrevEquity;
   else AccountEquityHighAmt = AccountEquity();
   PrevEquity = AccountEquity();
   return (AccountEquityHighAmt);
}


double FindMinBuyPrice() {
   double l_ord_open_price_8;
   double l_ticket_24;
   double ld_unused_0 = 0;
   double l_ticket_20 = 1000000000;
   for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
         l_ticket_24 = OrderOpenPrice();
         if (l_ticket_24 < l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();            
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}

double FindMaxSellPrice() {
   double l_ord_open_price_8;
   double l_ticket_24;
   double ld_unused_0 = 0;
   double l_ticket_20 = 0;
   for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
         l_ticket_24 = OrderOpenPrice();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}

double GetLots() 
{
double minlot = MarketInfo(Symbol(), MODE_MINLOT);

if(Risk!=0)
 {
   double lot = NormalizeDouble(AccountBalance() * Risk/100 / 1000.0, lotdecimal);
   if(lot < minlot) lot = minlot;
  }
  else lot=Lots; 
   return(lot);
} 


int FillExtra()
{
int r=0;
if (ccc==1 && Minute()<1) ccc=0;
if (ccc==0 && Minute()<2)
 {
 ccc=1;
for (int i=0;i<nt;i++)
{
   max[i]=iHigh(NULL,bper[i],iHighest(NULL,bper[i],MODE_HIGH,bars1[i],1));
   min[i]=iLow(NULL,bper[i],iLowest(NULL,bper[i],MODE_LOW,bars1[i],1));   
}
}
return(r);
}


double PipStepX(int dir)
{
double r=PipStep;
//if (Hour()>flethour1 && Hour()<flethour2) r=MathCeil(PipStep/fletlotexp);
if (dir==0) // buy
{
for (int i=0;i<nt;i++)
{
if (Ask<min[i]) r=pexpo[i]*PipStep;
}
}

if (dir==1) // buy
{
for (i=0;i<nt;i++)
{
if (Bid>max[i]) r=pexpo[i]*PipStep;
}
}

return(r);
}


int alert(int d6) {
   int x=0;
if (IndStep==0 || IndStep<CountTrades())  return(d6);
if(iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_MAIN,0)> 20 &&
	  iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_MAIN,0)< 80 &&
	  iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_MAIN,0)>
	  iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_SIGNAL,0))  x=1;
if(iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_MAIN,0)< 80 &&
	  iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_MAIN,0)> 20 &&
	  iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_MAIN,0)<
	  iStochastic(0,mper[TFInd],KPeriod,DPeriod,Slowing,Method,Price,MODE_SIGNAL,0))  x=-1;
return(x);
}


int TrenT()
{
int t=FillArray(MagicNumber);
// ïîäñ÷èòûâåì ñêîëüêî îòêðûòî îðäåðîâ ñ îäèíàêîâûì øàãîì ïî òðåíäó è åñòü ëè îðäåðà îòêðûòûå óæå ïðîòèâ òðåíäà ñ áîëüøèì ëîòîì
double minl1=10000;
if (Risk==0) minl1=Lots;
if (Risk>0)
{
   for (int i=0;i<30;i++)
   {
   if (minl1>lota[i] && lota[i]>0) minl1=lota[i];
   }
} // Risk
if (lota[ArrayMaximum(lota)]>minl1) return(0);
ModifTrendOrders();
//double minl=FindLastSellPrice1(); 
//double maxl=FindLastBuyPrice1();
TrendRe=1;

 int ii=-1; int jj=-1; // èùåì ñàìû âåðõíèé áàé è ñàìû íèæíèé ñåëë îðäåð
 double lastb=0; double lasts=10000000;


 // äîêóïàåì ïîçèöèè ïî òðåíäó
 
for(int cnt=0;cnt<30;cnt++)
{
if (modea[cnt]==0 && opa[cnt]>lastb && opa[cnt]>0){lastb=opa[cnt];ii=cnt;}
if (modea[cnt]==1 && opa[cnt]<lasts && opa[cnt]>0){lasts=opa[cnt];jj=cnt;} 
} 

if (modea[0]==0)
 {
 if (Ask>=lastb+TrendPS*Point) 
   {
   ticket=OrderSend(Symbol(),OP_BUY,minl1,Ask,slip,0,0,"trend",MagicNumber,0,Green);
   
     Print("  ticket ",ticket, "   lastb  ",lastb, "   lasts  ",lasts,"  Bid  ",Bid, "  minl1  ",minl1);
   if (ticket>0)
      {   
         for (i=0;i<30;i++)
         {
         if ((opa[i]<=Ask-TrendPS*1.5*Point) && (sla[i]<Bid-TrendPS*Point) && opa[i]>0) 
           {
           if (ticka[i]>0) 
               {
               OrderSelect(ticka[i],SELECT_BY_TICKET);
               OrderModify(ticka[i],opa[i],Bid-TrendPS*Point,0,0,Green);           
               }
           }
         }
      Sleep(500); return(0);
      }
   }
 }
if (modea[0]==1)
 {
 if (Bid<=lasts-TrendPS*Point) 
   {
   ticket=OrderSend(Symbol(),OP_SELL,minl1,Bid,slip,0,0,"trend",MagicNumber,0,Red);   
    Print("  ticket ",ticket, "   lastb  ",lastb, "   lasts  ",lasts,"  Bid  ",Bid, "  minl1  ",minl1);      
      if (ticket>0)
      {
         for (i=0;i<30;i++)
         {
         if ((opa[i]>=Bid+TrendPS*1.5*Point) && ((sla[i]>Ask+TrendPS*Point) || (sla[i]==-1))  && opa[i]>0) 
           {
           if (ticka[i]>0) 
               {           
               OrderSelect(ticka[i],SELECT_BY_TICKET);
               OrderModify(ticka[i],opa[i],Ask+TrendPS*Point,0,0,Red);
               }
           }         
         }
      Sleep(500);return(0);
      }
   }
 } 

}

int FillArray(int mn1) // ïðîöåäóðà ïîäñ÷åòà âñåõ îðäåðîâ äàííîãî ýêñïåðòà ïî äàííîìó èíñòðóìåíòó
{
ArrayInitialize(lota,-1);
ArrayInitialize(modea,-1);
ArrayInitialize(opa,-1);
ArrayInitialize(sla,-1);
ArrayInitialize(tpa,-1);
ArrayInitialize(tima,-1);
ArrayInitialize(ticka,-1);
ArrayInitialize(profa,-0.001);
  int c=0;
  int total  = OrdersTotal();

  for (int cnt = 0 ; cnt < total ; cnt++)
  {
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
    if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
    {
    c++;
    lota[cnt]=OrderLots();
    modea[cnt]=OrderType();
    opa[cnt]=OrderOpenPrice();
    sla[cnt]=OrderStopLoss();
    tpa[cnt]=OrderTakeProfit();
    comma[cnt]=OrderComment();
    tima[cnt]=OrderOpenTime(); 
    ticka[cnt]=OrderTicket();        
    profa[cnt]=OrderProfit();
    }
  }  
  
 //   for (cnt=0;cnt<to;cnt++)  {   Print(lota[cnt],"  ", modea[cnt], "  ", opa[cnt], "   ", sla[cnt], "   ", tpa[cnt], "    ", tima[cnt], "   ", ticka[cnt]  );    }
 
 
  return(c);
}

int ModifTrendOrders()    
{
int k=0;
for (int i=0;i<OrdersTotal();i++)
{
if (profa[i]<=0 && profa[i]!=-0.001) k=k+1;
}

if (k>=2)
{
for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Symbol()) {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderProfit()>0) {
            if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
            if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
         }
         Sleep(1000);
      }
   }
}
  
 return(0);
}


double FindMaxLots() {
   double l_ord_open_price_8;
   double l_ticket_24;
   double ld_unused_0 = 0;
   double l_ticket_20 = 0;
   for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         l_ticket_24 = OrderLots();
         if (l_ticket_24 > l_ticket_20) {
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ticket_20);
}

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