Подскажите как оптимизировать код

 

Друзья, посмотрите, пожалуйста! Я немного разбираюсь в программировании, подскажите, может как-то можно это оптимизировать?

//+------------------------------------------------------------------+

//|                                                       мульти.mq4 |

//|                                               Александр Глухенко |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Александр Глухенко"

#property link      "https://www.mql5.com"

#property version   "1.00"

#property strict

//--- input parameters

extern double    LotsNumber= 0.01;//объем сделки

extern int Slipp = 5;//проскальзывание

extern int period = 21; //период усреднения

extern int price = 5; //расчет средней цены для индикатора 

extern int TIMEFRAMES = 0; //таймфрейм м.б 0,1,5,15,30,60,240,1440,10080,43200

extern int TIMEFRAMES_1 = 5; //таймфрейм 2 не равен таймфрейм 1

extern string  instr_1="EURUSD"; //певая пара 

extern int  Magic_1 = 1;

extern string  instr_2="EURGBP"; //вторая пара

extern int  Magic_2 = 2;

extern string  instr_3="EURAUD"; //третья пара

extern int  Magic_3 = 3;

extern string  instr_4="EURCHF"; //четвертая пара

extern int  Magic_4 = 4;

extern string  instr_5="EURJPY"; //пятая пара

extern int  Magic_5 = 5;

extern int zona = 4; //параметр для покупки/продажи 


//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int k1,k2,k3,k4,k5,i,m;

int start()

  {

//---

//---1--

   double  CCI_0_1=iCCI(instr_1,TIMEFRAMES,period,price,0);

   double  CCI_0_2=iCCI(instr_2,TIMEFRAMES,period,price,0);

   double  CCI_0_3=iCCI(instr_3,TIMEFRAMES,period,price,0);

   double  CCI_0_4=iCCI(instr_4,TIMEFRAMES,period,price,0);

   double  CCI_0_5=iCCI(instr_5,TIMEFRAMES,period,price,0);

//---2--

   double  CCI_1_1=iCCI(instr_1,TIMEFRAMES,period,price,1);

   double  CCI_1_2=iCCI(instr_2,TIMEFRAMES,period,price,1);

   double  CCI_1_3=iCCI(instr_3,TIMEFRAMES,period,price,1);

   double  CCI_1_4=iCCI(instr_4,TIMEFRAMES,period,price,1);

   double  CCI_1_5=iCCI(instr_5,TIMEFRAMES,period,price,1);

//---3--

   double  CCI_2_1=iCCI(instr_1,TIMEFRAMES,period,price,2);

   double  CCI_2_2=iCCI(instr_2,TIMEFRAMES,period,price,2);

   double  CCI_2_3=iCCI(instr_3,TIMEFRAMES,period,price,2);

   double  CCI_2_4=iCCI(instr_4,TIMEFRAMES,period,price,2);

   double  CCI_2_5=iCCI(instr_5,TIMEFRAMES,period,price,2);


//   string       symbol,           // имя символа

//   int          timeframe,        // таймфрейм

//   int          period,           // период

//   int          applied_price,    // тип цены

//   int          shift             // сдвиг

   double SPREAD_1=MarketInfo(instr_1,MODE_SPREAD);// Спрэд в пунктах

   double SPREAD_2=MarketInfo(instr_2,MODE_SPREAD);// Спрэд в пунктах

   double SPREAD_3=MarketInfo(instr_3,MODE_SPREAD);// Спрэд в пунктах

//   string           symbol,     // символ инструмента

//   int              type        // тип информации


//===условия на покупку

double rek_1=0;

if (CCI_0_1>CCI_1_1 && CCI_1_1>CCI_2_1)

   rek_1=1;

   if (CCI_0_1<CCI_1_1 && CCI_1_1<CCI_2_1)

   rek_1=-1;

double rek_2=0;

if (CCI_0_2>CCI_1_2 && CCI_1_2>CCI_2_2)

   rek_2=1;

   if (CCI_0_2<CCI_1_2 && CCI_1_2<CCI_2_2)

   rek_2=-1;

double rek_3=0;

if (CCI_0_3>CCI_1_3 && CCI_1_3>CCI_2_3)

   rek_3=1;

   if (CCI_0_3<CCI_1_3 && CCI_1_3<CCI_2_3)

   rek_3=-1;

double rek_4=0;

if (CCI_0_4>CCI_1_4 && CCI_1_4>CCI_2_4)

   rek_4=1;

   if (CCI_0_4<CCI_1_4 && CCI_1_4<CCI_2_4)

   rek_4=-1;

double rek_5=0;

if (CCI_0_5>CCI_1_5 && CCI_1_5>CCI_2_5)

   rek_5=1;

   if (CCI_0_5<CCI_1_5 && CCI_1_5<CCI_2_5)

   rek_5=-1;

   double summ_rek_1=rek_1+rek_2+rek_3+rek_4+rek_5;


//========================================================================

//---1--

   double  CCI_TF1_0_1=iCCI(instr_1,TIMEFRAMES_1,period,price,0);

   double  CCI_TF1_0_2=iCCI(instr_2,TIMEFRAMES_1,period,price,0);

   double  CCI_TF1_0_3=iCCI(instr_3,TIMEFRAMES_1,period,price,0);

   double  CCI_TF1_0_4=iCCI(instr_4,TIMEFRAMES_1,period,price,0);

   double  CCI_TF1_0_5=iCCI(instr_5,TIMEFRAMES_1,period,price,0);

//---2--

   double  CCI_TF1_1_1=iCCI(instr_1,TIMEFRAMES_1,period,price,1);

   double  CCI_TF1_1_2=iCCI(instr_2,TIMEFRAMES_1,period,price,1);

   double  CCI_TF1_1_3=iCCI(instr_3,TIMEFRAMES_1,period,price,1);

   double  CCI_TF1_1_4=iCCI(instr_4,TIMEFRAMES_1,period,price,1);

   double  CCI_TF1_1_5=iCCI(instr_5,TIMEFRAMES_1,period,price,1);

//---3--

   double  CCI_TF1_2_1=iCCI(instr_1,TIMEFRAMES_1,period,price,2);

   double  CCI_TF1_2_2=iCCI(instr_2,TIMEFRAMES_1,period,price,2);

   double  CCI_TF1_2_3=iCCI(instr_3,TIMEFRAMES_1,period,price,2);

   double  CCI_TF1_2_4=iCCI(instr_4,TIMEFRAMES_1,period,price,2);

   double  CCI_TF1_2_5=iCCI(instr_5,TIMEFRAMES_1,period,price,2);


//===условия на покупку

double rek_tf1_1=0;

if (CCI_TF1_0_1>CCI_TF1_1_1 && CCI_TF1_1_1>CCI_TF1_2_1)

   rek_tf1_1=1;

   if (CCI_TF1_0_1<CCI_TF1_1_1 && CCI_TF1_1_1<CCI_TF1_2_1)

   rek_tf1_1=-1;

double rek_tf1_2=0;

if (CCI_TF1_0_2>CCI_TF1_1_2 && CCI_TF1_1_2>CCI_TF1_2_2)

   rek_tf1_2=1;

   if (CCI_TF1_0_2<CCI_TF1_1_2 && CCI_TF1_1_2<CCI_TF1_2_2)

   rek_tf1_2=-1;

double rek_tf1_3=0;

if (CCI_TF1_0_3>CCI_TF1_1_3 && CCI_TF1_1_3>CCI_TF1_2_3)

   rek_tf1_3=1;

   if (CCI_TF1_0_3<CCI_TF1_1_3 && CCI_TF1_1_3<CCI_TF1_2_3)

   rek_tf1_3=-1;

double rek_tf1_4=0;

if (CCI_TF1_0_4>CCI_TF1_1_4 && CCI_TF1_1_4>CCI_TF1_2_4)

   rek_tf1_4=1;

   if (CCI_TF1_0_4<CCI_TF1_1_4 && CCI_TF1_1_4<CCI_TF1_2_4)

   rek_tf1_4=-1;

double rek_tf1_5=0;

if (CCI_TF1_0_5>CCI_TF1_1_5 && CCI_TF1_1_5>CCI_TF1_2_5)

   rek_tf1_5=1;

   if (CCI_TF1_0_5<CCI_TF1_1_5 && CCI_TF1_1_5<CCI_TF1_2_5)

   rek_tf1_5=-1;


double summ_rek_2=rek_tf1_1+rek_tf1_2+rek_tf1_3+rek_tf1_4+rek_tf1_5;

double summ_par=summ_rek_1+summ_rek_2;


//====================ордера на покупку=======================================================

if (summ_par>zona)

{

   {

    k1=0;

    for (i=OrdersTotal()-1;i>=0;i--)  

       {

        bool sel1=OrderSelect (i, SELECT_BY_POS, MODE_TRADES);

        if (OrderSymbol() == instr_1 && OrderMagicNumber() == Magic_1 && OrderType() == OP_BUY) k1++;

        }

    if (k1 == 0)

      {

      RefreshRates(); 

      double ASK_1=MarketInfo(instr_1,MODE_ASK);

      double send_1= OrderSend(instr_1, OP_BUY, LotsNumber, ASK_1, Slipp, 0, 0," "+instr_1+" B_"+(string)Magic_1, Magic_1, 0, Blue);

      }  

    } 

      {

    k2=0;

    for (i=OrdersTotal()-1;i>=0;i--)  

       {

        bool sel2=OrderSelect (i, SELECT_BY_POS, MODE_TRADES);

        if (OrderSymbol() == instr_2 && OrderMagicNumber() == Magic_2 && OrderType() == OP_BUY) k2++;

        }

    if (k2 == 0)

      {

      RefreshRates(); 

      double ASK_2=MarketInfo(instr_2,MODE_ASK);

      double send_2= OrderSend(instr_2, OP_BUY, LotsNumber, ASK_2, Slipp, 0, 0," "+instr_2+" B_"+(string)Magic_2, Magic_2, 0, Blue);

      }  

    } 

      {

    k3=0;

    for (i=OrdersTotal()-1;i>=0;i--)  

       {

        bool sel3=OrderSelect (i, SELECT_BY_POS, MODE_TRADES);

        if (OrderSymbol() == instr_3 && OrderMagicNumber() == Magic_3 && OrderType() == OP_BUY) k3++;

        }

    if (k3 == 0)

      {

      RefreshRates(); 

      double ASK_3=MarketInfo(instr_3,MODE_ASK);

      double send_3= OrderSend(instr_3, OP_BUY, LotsNumber, ASK_3, Slipp, 0, 0," "+instr_3+" B_"+(string)Magic_3, Magic_3, 0, Blue);

      }  

    } 

}

 

//--------------------------------------------------------------------------------------------


//====================ордера на продажу=======================================================

if (summ_par<zona*(-1))

   {

   {

 k1=0;

    for (i=OrdersTotal()-1;i>=0;i--)  

       {

        bool sel1=OrderSelect (i, SELECT_BY_POS, MODE_TRADES);

        if (OrderSymbol() == instr_1 && OrderMagicNumber() == Magic_1 && OrderType() == OP_SELL) k1++;

       } 

    if (k1 == 0)

      {

      RefreshRates(); 

      double BID_1=MarketInfo(instr_1,MODE_BID);

      double send_1= OrderSend(instr_1, OP_SELL, LotsNumber, BID_1, Slipp, 0, 0," "+instr_1+" S_"+(string)Magic_1, Magic_1, 0, Blue);

      }  

    }

   {

 k2=0;

    for (i=OrdersTotal()-1;i>=0;i--)  

       {

        bool sel2=OrderSelect (i, SELECT_BY_POS, MODE_TRADES);

        if (OrderSymbol() == instr_2 && OrderMagicNumber() == Magic_2 && OrderType() == OP_SELL) k2++;

       } 

    if (k2 == 0)

      {

      RefreshRates(); 

      double BID_2=MarketInfo(instr_2,MODE_BID);

      double send_2= OrderSend(instr_2, OP_SELL, LotsNumber, BID_2, Slipp, 0, 0," "+instr_2+" S_"+(string)Magic_2, Magic_2, 0, Blue);

      }  

    }

      {

    k3=0;

    for (i=OrdersTotal()-1;i>=0;i--)  

       {

        bool sel3=OrderSelect (i, SELECT_BY_POS, MODE_TRADES);

        if (OrderSymbol() == instr_3 && OrderMagicNumber() == Magic_3 && OrderType() == OP_SELL) k3++;

        }

    if (k3 == 0)

      {

      RefreshRates(); 

      double BID_3=MarketInfo(instr_3,MODE_BID);

      double send_3= OrderSend(instr_3, OP_SELL, LotsNumber, BID_3, Slipp, 0, 0," "+instr_3+" S_"+(string)Magic_3, Magic_3, 0, Blue);

      }  

    } 

}

//---------------------------------------------------------------------------------------------


Comment("___",instr_1,"______"," ",DoubleToStr(CCI_0_1,2),"______"," ", rek_1,"_____",rek_tf1_1,

   "\n","___",instr_2,"______"," ",DoubleToStr(CCI_0_2,2),"______"," ",rek_2,"_____",rek_tf1_2,

   "\n","___",instr_3,"______"," ",DoubleToStr(CCI_0_3,2),"______"," ",rek_3,"_____",rek_tf1_3,

   "\n","___",instr_4,"______"," ",DoubleToStr(CCI_0_4,2),"______"," ",rek_4,"_____",rek_tf1_4,

   "\n","___",instr_5,"______"," ",DoubleToStr(CCI_0_5,2),"______"," ",rek_5,"_____",rek_tf1_5,

   "\n", "____________________________________________________",summ_rek_1,"___", summ_rek_2,"___", summ_par

       );

   return(0);

  }

//+------------------------------------------------------------------+

Файлы:
 
Про массивы слышали?
 
Vinin:
Про массивы слышали?
Слышал. Но пока не могу понять, как пользоваться. Если подскажете, хотя бы примерно, буду благодарен.
 
agluhenko:
Слышал. Но пока не могу понять, как пользоваться. Если подскажете, хотя бы примерно, буду благодарен.

Вариант работы

   for (int k=0;k<2;k++)
   {
      for (int i=0;i<5;i++)
      {
         for (int j=0;j<3;i++)
         {
            CCI[0][i][j]=iCCI(instr[i],TIMEFRAME[k],period,price,j);
         }
         if (CCI[k][i][0]>CCI[k][i][1] && CCI[k][i][1]>CCI[k][i][2]) rek[k][i]=1;
         if (CCI[k][i][0]<CCI[k][i][1] && CCI[k][i][1]<CCI[k][i][2]) rek[k][i]=-1;
         summ_rek[k]+=rek[k][i];
      }
      
   }

 Заменяет около 50 строк кода. Меньше ошибок легче читается, но работает чуть-чуть медленней. Массивы еще  инициализировать надо

 
Vinin:

Вариант работы

 Заменяет около 50 строк кода. Меньше ошибок легче читается, но работает чуть-чуть медленней. Массивы еще  инициализировать надо

Спасибо. Вот о чем-то таком я думал.... но это совсем высший пилотаж!
Причина обращения: