[Archive!] Any rookie question, so as not to clutter up the forum. Professionals, don't pass it by. Couldn't go anywhere without you - 2. - page 28

 
Make an extra check on the percentages.
 
TheXpert:
Do an extra check for percentage.

at what stage and the ratio of what to what?

put this in start()

if (Digits==5||Digits==3) {SL=SL*10;TP=TP*10;}

because it won't work in init(),

maybe check Point (?

I'll see what happens...

 
OlegTs:

at what stage and the ratio of what to what?

put this in start()

because it won't work in init(),

maybe check Point(?

I'll see what happens...


I put Digits with Point in print() since I have the same Expert Advisor running on four windows, I got the following picture:


i.e. three windows have five digits, and one window has four digits, so it's a glitch,

I closed all the windows, reopened them, put advisors everywhere with five digits...

I feel like my brokerage company cheated when I opened the windows,

The question is closed...

 
how or where do you insert the svetniki and scripts???
 
Roman.:


You asked about the possibility to programmatically enumerate and optimize the possible TFs to get their indicator values in the Expert Advisor. This is possible in the following way - for example

Here are some code snippets from the Expert Advisor in the file where this operation is performed - everything is described there with comments.

Maybe someone else may find it useful.

Thank you ! I have changed TF values manually so far (optimization is long and analysis for each TF is done separately).

And here is another question for everyone who can help. The code for variants of non-standard fractal and for definition of potential signals from any candle after break of MA (at such design I can define the number of candle I need after the break) But....! Optimization does not "want" to go...(( If I set optimization for only ONE parameter Period_MA from 3 to 5 in one year, it goes more than a few minutes. If I set from 2 to 240, I can forget about the computer ..... it freezes and doesn't give you any indication of how long it takes... I'm not even talking about including the rest of the parameters - SL, TP, MODE, PRICE_TYPE - into the optimisation. Please, tell me, if I may, what's wrong in the code...? Why isn't the optimization going well? The code works - you can check it. Here is the code itself:

#include <stdlib.mqh>

extern int Period_MA = 5,                 // Период расчётной МА
           ПрибыльФр=10,                  // Не меньше 4
           HФр = 1,                       // Фильтр над фракталом
           Ограничение=52,
           PERIOD=1,                     // Период текущего графика (таймфрейм)
           MODE=3,                        // Метод усреднения из методов скользящего среднего
           PRICE_TYPE=0;                  // Используемая цена из ценовых констант
           
      bool Fact_вверх = false,            // Движения вверх нет
           Fact_вниз = false,             // Движения вниз нет
           Buy = false,                   // Инициализация buystop
           Sell = false,
           ПервФрвверх=false,
           ПервФрвниз=false;
           
     color вверх = SpringGreen,           // Цвет сделки вверх
           вниз = Red,                    // Цвет сделки вниз
           отмена = Yellow,               // Цвет отмены сделки
           Свеча1 C=Blue;                  // Цвет номера 1С свечи
           
       int ticketup,                      // Ордер вверх
           ticketdown,                    // Ордер вниз
           BarTime,                       // Время текущего бара
           Tвверх,                        // Время сделки вверх
           Tвниз,                         // Время сделки вниз
           A,                             // Переменная массива вверх
           B;                             // Переменная массива вниз
           
          
   double SL,
          TP,
          PointX;
int init()
  {
   if(Digits==5 || Digits==3) PointX = Point * 10; // Корректировка Point под трёх- пятизнак
   if(Digits==4 || Digits==2) PointX = Point;
   
   return(0);
  }
//--------------------------------------------------------------------
int start()                      // Спец. функция start
  {
   double MAC1,                  // Значение МА на n баре
          MAC2,                  // Значение МА на следующей свече
          Разность,
          Lot=0.01;              // Лот
          
   string Symb=Symbol(),         // Финанс. инструмент
          С1 = "C1",             // Текст для обозначения ордера
          Пусто = " ";           // Текст для обозначения ордера
     
      int n=1,                   // Номер свечи, с которой начинается проверка
          Фр;
          
     bool Движ_вниз = false,
          Движ_вверх = false;
          
  if(BarTime!=Time[0])           // Условие для того, чтобы программа считала только на начале бара, а не на каждом тике
    {          
//--------------------------------------------------------------------
   while(true)                                                        // Цикл по перебору свечей вверх до изгиба МА Синей 
      {
                                                                      // Обращение к функции техн.инд. MA
     MAC1  = iMA(Symbol(),PERIOD,Period_MA,0,MODE,PRICE_TYPE,n);         // Первая сравниваемая свеча
      n++;                                                            // Переход на следующую свечу
     MAC2  = iMA(Symbol(),PERIOD,Period_MA,0,MODE,PRICE_TYPE,n);         // Последующая сравниваемая свеча
     Разность = (MAC1 - MAC2)/PointX;                              // Разница МА между соседними свечами
      
//--------------------------------------------------------------------
      if (NormalizeDouble(Разность,Digits) >= 1 )                  // Условие движения вверх
        {
          Движ_вверх = true;
          Движ_вниз = false;
          ПервФрвниз=false;
        } 
      if(NormalizeDouble(Разность,Digits)<-1)                      // Выход на противоположное движение  
        break;                                                        // Выход из цикла while (перебора свечей)
      }                                                               // Конец цикла while (перебора свечей)
//--------------------------------------------------------------------
  if (Движ_вверх == true)
    { 
      Print("Движ_вверх");
      int Количество = OrdersTotal();                               // Количество ордеров на данный момент      
      for(int i=Количество-1; i>=0;i--)                             // Цикл перебора ордер
          {
           if (OrderSelect(i,SELECT_BY_POS)==true)                    // Если есть следующий
            {
              int Tip=OrderType();                                    // Определения типа ордера
//--------------------------------------------------------------------                
              switch(Tip)                                             // Переключатель на типы ордеров
                {
                   case 5: int N = OrderTicket();                     // Метка удаляемого ордера SELLSTOP
                               Закрыть(N);                            // Вызов функции удаления отложенного ордера
                   continue;        
                }                                         
            } 
          }
   for(i=2;i<=n-2;i++)
       {
         if(NormalizeDouble(High[i],Digits)>NormalizeDouble(High[i+1],Digits)
         && NormalizeDouble(High[i],Digits)>NormalizeDouble(High[i-1],Digits))
           {
             if(ПервФрвверх==false)
               {
                 ПервФрвверх=true;
                 Фр=i;
               }else
                 {
                   Фр=i;
                 }
           }
         if(NormalizeDouble(High[i],Digits)==NormalizeDouble(High[i+1],Digits)
         && NormalizeDouble(High[i],Digits)>NormalizeDouble(High[i+2],Digits)
         && NormalizeDouble(High[i],Digits)>NormalizeDouble(High[i-1],Digits))
           {
             if(ПервФрвверх==false)
               {
                 ПервФрвверх=true;
                 Фр=i;
               }else
                 {
                   Фр=i;
                 }
           }  
       }
    if (ПервФрвверх==true)
      {   
         A++;
         Print("n = ",n);
         double ОткрФрвверх=High[Фр]+HФр*PointX;
             SL=Bid-Ограничение*PointX;
             TP=Bid+ПрибыльФр*PointX;                        // Заявленная цена TP
             int Ind_max =ArrayMaximum(High,n,0);                               // Индекс бара макс.ц. 
             double max = High[Ind_max];                                        // Искомая макс цена
             int Min_Dist=MarketInfo(Symbol(),MODE_STOPLEVEL);                  // Мин. дистанция
             int Время_фрактала=Time[Фр];
             double Цена_рисунка=Open[Фр];
             if (Tвверх!=Time[Фр])                                                           // Если цена ещё не достигла ТP(при включении сов.)
               {
                 Tвверх=Time[Фр];                                           // Определение времени для этого условия открытия
                 while(true)                                  // Цикл открытия орд.
                  {
                    ticketup=OrderSend(Symb, OP_BUY, Lot, Ask,0, SL, TP,NULL,A,0,вверх); // Ордер вверх
                        int Error=GetLastError();
                        Print("Error = ",Error);
                        switch(Error)                             // Преодолимые ошибки
                          {
                           case 6: Alert("Нет связи с торговым сервером. Пробуем ещё раз..");
                           RefreshRates();                     // Обновим данные
                           Sleep(1);                           // Задержка в цикле до нового тика
                         continue;                                   // На след. итерацию
                          }
                         break;                                    // Выход из цикла
                   }
               }
      }
    }        


I can't get everything here. I'll add more.

What's the problem, can you tell me who knows...?

 

Here :

//*********************************************************************************************************                         
   n=1;

   while(true)                                                             // Цикл по перебору свечей вниз до изгиба МА Синей
    {
                                                                           // Обращение к функции техн.инд.
     MAC1  = iMA(Symbol(),PERIOD,Period_MA,0,MODE,PRICE_TYPE,n);              // Первая сравниваемая свеча
      n++;                                                                 // Переход на следующую свечу
     MAC2  = iMA(Symbol(),PERIOD,Period_MA,0,MODE,PRICE_TYPE,n);              // Последующая сравниваемая свеча
     Разность = (MAC1 - MAC2)/PointX;                                   // Разница МА между соседними свечами
//--------------------------------------------------------------------
      if (NormalizeDouble(Разность,Digits) <= -1 )                      // Условие движения вниз
       {
         Движ_вниз = true;
         Движ_вверх = false;
         ПервФрвверх=false; 
         continue;
       }
      if(NormalizeDouble(Разность,Digits)>1)                            // Выход на противоположное движение  
        break;                                                             //Выход из цикла while (перебора свечей)
    }                                                                      //Конец цикла while (перебора свечей)
//-------------------------------------------------------------------- 
    if (Движ_вниз == true)
      {
         Print("Движ_вниз");
         Количество = OrdersTotal();                                        // Количество ордеров на данный момент      
         for(i=Количество-1; i>=0;i--)                                      // Цикл перебора ордер
          {
           if (OrderSelect(i,SELECT_BY_POS)==true)                          // Если есть следующий
            {
              Tip=OrderType();                                             // Определения типа ордера
//--------------------------------------------------------------------                
              switch(Tip)                                                  // Переключатель на типы ордеров
                {
                   case 4: N = OrderTicket();                          // Метка удаляемого ордера BUYSTOP
                               Закрыть(N);                                 // Вызов функции удаления отложенного ордера
                   continue;        
                }                                         
            } 
          }
  for(i=2;i<=n-2;i++)
       {
         if(NormalizeDouble(Low[i],Digits)<NormalizeDouble(Low[i+1],Digits)
        &&  NormalizeDouble(Low[i],Digits)<NormalizeDouble(Low[i-1],Digits))
           {
             if(ПервФрвниз==false)
               {
                 ПервФрвниз=true;
                 Фр=i;
                 
               }else
                 {
                   Фр=i;
                 }
           }
         if(NormalizeDouble(Low[i],Digits)==NormalizeDouble(Low[i+1],Digits)
         && NormalizeDouble(Low[i],Digits)<NormalizeDouble(Low[i+2],Digits)
         && NormalizeDouble(Low[i],Digits)<NormalizeDouble(Low[i-1],Digits))
           {
             if(ПервФрвниз==false)
               {
                 ПервФрвниз=true;
                 Фр=i;
                 
               }else
                 {
                   Фр=i;
                 }
           }  
       }
       if (ПервФрвниз==true)
         {
           B++;
             Print("n = ",n);
             double ОткрФрвниз=Low[Фр]-HФр*PointX;
             SL=Bid+Ограничение*PointX-3*PointX;
             TP=Bid-ПрибыльФр*PointX-3*PointX;                        // Заявленная цена TP
             int Ind_min =ArrayMinimum(Low,n,0);                                   // Индекс бара мин.ц. 
             double min = Low[Ind_min];                                               // Искомая мин цена
             Время_фрактала=Time[Фр];
             Цена_рисунка=Open[Фр];
             if (Tвниз!=Time[Фр])                                         // Если цена ещё не достигла ТP(при включении сов.)
               {
                 Tвниз=Time[Фр];                              // Определение времени для этого условия открытия
                 while(true)                                  // Цикл открытия орд.
                   {
                        Alert("Bid = ",Bid);
                        ticketdown=OrderSend(Symb, OP_SELL, Lot, Bid,0, SL,TP,NULL,B,0,вниз); // Ордер вверх
                        Error=GetLastError();
                        Print("Error = ",Error);
                        
                         switch(Error)                             // Преодолимые ошибки
                          {
                           case 6: Alert("Нет связи с торговым сервером. Пробуем ещё раз..");
                           RefreshRates();                     // Обновим данные
                           Sleep(1);                           // Задержка в цикле до нового тика
                         continue;                                   // На след. итерацию
                          }
                         break;                                    // Выход из цикла
                   }
               }
         }
      }  
 BarTime=Time[0];
    }
return(0);                                                                 // Выход из start()
  }

 

And the ending :

//+------------------------------------------------------------------+
int deinit()
  {
    int Количество = OrdersTotal();                                        // Количество ордеров на момент закрытия советника
     Alert("Количество ордеров перед циклом = ",Количество); 
    for(int i=Количество-1; i>=0;i--)                                      // Цикл перебора ордеров
     {
     Alert("Количество ордеров в цикле = ",Количество, ", i=",i);
       if (OrderSelect(i,SELECT_BY_POS)==true)                             // Если есть следующий
         {                                                                 // Анализ ордеров:
           bool Ордер = OrderSelect(i,SELECT_BY_POS);                      // Присвоение имени
//------------------------------------------------------ 
            Alert("Количество ордеров в цикле внутри if= ",Количество,", OrderSelect = ",Ордер);
           int Tip=OrderType();                                            // Тип ордера
           if (Tip<2) continue;                                            // Рыночный ордер
           int N = OrderTicket();                                          // Присвоение имени
            Alert("Попытка удалить ордер",Tip,", Номер ",N);
           bool Ans=OrderDelete(N);                                        // Удаление ордера
//--------------------------------------------------------- 
            if (Ans==true)                                                 // Получилось :)
             {
              Alert ("Удалён ордер ",Tip," ",N);
              continue;                                                    // Продолжение удаления оставшихся ордеров 
             }
      //--------------------------------------------------------- 
             int Error=GetLastError();                                     // Не получилось :(
             switch(Error)                                                 // Преодолимые ошибки
              {
              case  4: Alert("Торговый сервер занят. Пробуем ещё раз..");
                Sleep(3000);                                               // Простое решение
                continue;                                                  // На след. итерацию
              case 137:Alert("Брокер занят. Пробуем ещё раз..");
                Sleep(3000);                                               // Простое решение
                continue;                                                  // На след. итерацию
              case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
                continue;                                                  // На след. итерацию
              case 145:Alert("Модификация запрещена. ",
                              "Ордер слишком близок к рынку");
                      Sleep(3000);                                         // Простое решение
                      continue;                                            // На след. итерацию  
              }
             switch(Error)                                                 // Критические ошибки
              {
               case 2 : Alert("Общая ошибка.");
                break;                                                     // Выход из switch
               case 64: Alert("Счет заблокирован.");
                break;                                                     // Выход из switch
               case 133:Alert("Торговля запрещена");
                break;                                                     // Выход из switch
               case 139:Alert("Ордер заблокирован и уже обрабатывается");
                break;                                                     // Выход из switch
               case 145:Alert("Модификация запрещена. ",
                              "Ордер слишком близок к рынку");
              break;                                                       // Выход из switch
              default: Alert("Возникла ошибка ",Error);//Другие варианты   
              }
         }else
         {
          Alert("Количество ордеров в цикле после if= ",Количество,", OrderSelect = ",Ордер, ", i=",i);
         }
        
     }
//----
   return(0);
  }
//***************************************************************************
      // Описание пользоват. ф-ии закрытия ордеров
      
             void Закрыть(int N)                                   
              {
                bool Ans=OrderDelete(N,отмена);                         // Удаление ордера
 
how or where do you insert the svetniki and scripts???
 
DKD1000:

how or where do you insert the svetniki and scripts???

https://docs.mql4.com/ru/ the directories where what is stored are written
 
abolk:

https://docs.mql4.com/ru/ the directories where what is stored are written

cp