[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 28

 
Haz una comprobación adicional de los porcentajes.
 
TheXpert:
Haz una comprobación adicional del porcentaje.

¿en qué fase y en qué proporción?

poner esto en start()

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

porque no funcionará en init(),

tal vez comprobar Punto (?

Veré qué pasa...

 
OlegTs:

¿en qué fase y la proporción de qué a qué?

pon esto en start()

porque no funcionará en init(),

tal vez comprobar Punto(?

Veré qué pasa...


Puse Dígitos con Punto en print() ya que tengo el mismo Asesor Experto corriendo en cuatro ventanas, obtuve la siguiente imagen:


Es decir, tres ventanas tienen cinco dígitos, y una ventana tiene cuatro dígitos, por lo que es un fallo,

Cerré todas las ventanas, las volví a abrir, puse asesores en todas partes con cinco dígitos...

Siento que mi empresa de corretaje me engañó al abrir las ventanas,

La pregunta está cerrada...

 
¿cómo o dónde se insertan los svetniki y los guiones?
 
Roman.:


Has preguntado por la posibilidad de enumerar y optimizar mediante programación los posibles TFs para obtener sus valores de indicador en el Asesor Experto. Esto es posible, por ejemplo, de la siguiente manera

Aquí hay algunos fragmentos de código del Asesor Experto en el archivo donde se realiza esta operación - todo se describe allí con comentarios.

Tal vez alguien más pueda encontrarlo útil.

Gracias. Hasta ahora he cambiado los valores de la TF manualmente (la optimización es larga y el análisis de cada TF se hace por separado).

Y aquí hay otra pregunta para todos los que puedan ayudar. El código para las variantes del fractal no estándar y para la definición de las señales potenciales de cualquier vela después de la ruptura de la MA (en tal diseño puedo definir el número de velas que necesito después de la ruptura) ¡Pero....! La optimización no "quiere" ir...(( Si pongo la optimización para un solo parámetro Periodo_MA de 3 a 5 en un año, va más de unos minutos. Si pongo de 2 a 240, puedo olvidarme del ordenador ..... se congela y no da ninguna indicación del tiempo que tarda... Ni siquiera estoy hablando de incluir el resto de los parámetros - SL, TP, MODE, PRICE_TYPE - en la optimización. Por favor, dígame, si es posible, qué es lo que está mal en el código... ¿Por qué no va bien la optimización? El código funciona - puedes comprobarlo. Aquí está el código en sí:

#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;                                    // Выход из цикла
                   }
               }
      }
    }        


No puedo poner todo aquí. Añadiré más.

¿Cuál es el problema, puede decirme quién sabe...?

 

Aquí :

//*********************************************************************************************************                         
   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()
  }

 

Y el final :

//+------------------------------------------------------------------+
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,отмена);                         // Удаление ордера
 
¿cómo o dónde se insertan los svetniki y los guiones?
 
DKD1000:

¿cómo o dónde se insertan los svetniki y los guiones?

https://docs.mql4.com/ru/ los directorios en los que se escribe lo que se almacena
 
abolk:

https://docs.mql4.com/ru/ los directorios en los que se escribe lo que se almacena

cp