[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 174

 
tpg_k156:
Buenos días a todos. Me pueden decir cómo copiar operaciones en Metatrader 4. De modo que al abrir una operación en un terminal se podría obtener una operación abierta en otro.

Busca en CodeBase un copiador. No son los mejores, por supuesto, pero son de libre acceso
 
¿Quién sabe si es posible hacer variables globales Hour(), Minute() y Seconds() para controlar a medianoche (0.00) el cambio del indicador DailyPivotPoints a nuevos niveles de PP y otras líneas del EA? Yo lo hacía directamente en el indicador con Hour(), Minute(), Seconds(), y funcionaba sin necesidad de compilar cada noche. Pero recientemente ha dejado de cambiar por sí mismo, ¿quizás por cambiar el bild? Gracias.
 
borilunad:
¿Quién sabe si es posible hacer variables globales Hour(), Minute() y Seconds() para controlar a medianoche (0.00) el cambio del indicador DailyPivotPoints a nuevos niveles de PP y otras líneas del EA? Yo lo hacía directamente en el indicador con Hour(), Minute(), Seconds(), y funcionaba sin necesidad de compilar cada noche. Pero recientemente ha dejado de cambiar por sí mismo, ¿quizás por cambiar el bild? Gracias.

Debería funcionar en el primer tick del nuevo día.
 
borilunad:

¡Gracias, Víctor! ¿Le ha servido mi versión corta?


Sí, Boris, ¡es muy bueno, por cierto! Muchas gracias. Eso es lo que quería. Me retorcí... me retorcí... No lo hice bien. No tengo mucha experiencia y mi cerebro no piensa como un profesional. Es un poco un callejón sin salida, ¿no? :(

Al principio no quería preguntar, pero tenía que hacerlo. Porque yo mismo no podía hacerlo más corto.

 
Me podéis decir cómo construir un canal que pase por fractales, pero que esté limitado a 0 barra y que redibuje más cuando aparezca una nueva barra. El problema es la limitación.
 
beginner:
Me podéis decir cómo construir un canal que pase por fractales, pero que esté limitado a 0 barra y que redibuje más cuando aparezca una nueva barra. El problema es la limitación.

Explica el concepto de "limitado por 0 bar".
 

Esta es la función:

bool IsUpFractal(int index)
{
   double centerHigh = High[index + g_center];     // За точку отсчета берется средний..
                                                   // ..бар на участке из i_fractalPeriod
                                                   // ..баров
// - 1 - == Поиск максимумов справа от центрального бара ================================
   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh <= High[i])                   // ..максимумом. Не позволяется..
         return (false);                           // ..наличие баров с большим или..
      cnt++;                                       // ..равным максимумом.
   }
   
   if (i < 0)                                      // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 1 - == Окончание блока =============================================================

// - 2 - == Поиск максимумов слева от центрального бара =================================
   cnt = 0;
   i = index + g_center + 1;
   int total = Bars - 1;
   for (; i < total && cnt < g_center; i++)        // Слева от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh == High[i])                   // ..максимумом. Не позволяется..
         continue;                                 // ..наличие баров с большим..
      if (centerHigh < High[i])                    // ..максимумом. Равный - позволяется
         return (false);
      cnt++;                                    
   }
   
   if (i >= total)                                 // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 2 - == Окончание блока =============================================================
                                                   
   return (true);                                  // Фрактал найден                 
}
//+-------------------------------------------------------------------------------------+
//| Определение наличия нижнего фрактала на указанном баре                              |
//+-------------------------------------------------------------------------------------+
bool IsDnFractal(int index)
{
   double centerLow = Low[index + g_center];       // За точку отсчета берется средний..
                                                   // ..бар на участке из i_fractalPeriod
                                                   // ..баров
// - 1 - == Поиск минимумов справа от центрального бара =================================
   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с большим..
      if (centerLow >= Low[i])                     // ..минимумом. Не позволяется..
         return (false);                           // ..наличие баров с меньшим или..
      cnt++;                                       // .. равным минимумом
   }
   
   if (i < 0)                                      // g_center-1 больших минимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 1 - == Окончание блока =============================================================

// - 2 - == Поиск минимумов слева от центрального бара ==================================
   cnt = 0;
   i = index + g_center + 1;
   int total = Bars - 1;
   for (; i < total && cnt < g_center; i++)        // Слева от центрального бара должно
   {                                               // ..быть g_center-1 баров с большим..
      if (centerLow == Low[i])                     // ..минимумом. Не позволяется..
         continue;                                 // ..наличие баров с меньшим минимумом
      if (centerLow > Low[i])                      // ..Равный минимум - разрешается
         return (false);
      cnt++;   
   }
   
   if (i >= total)                                 // g_center-1 больших минимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 2 - == Окончание блока =============================================================
                                                   
   return (true);                                  // Фрактал найден                 
}

La función obtiene el valor delíndice que tiene un valor de barra para calcular 0 o 1. Aquí es donde el bucle se escribe de una manera interesante..:

for (; i >= 0 && cnt < g_center; i--)

Es decir, no hay un valor variable a partir del cual iniciar el cálculo. Según la lógica de la máquina, ¿a partir de qué barra en este caso comenzará el cálculo? Si hay un decrecimiento de i... entonces desde el máximo?

De nuevo allí i = índice + g_center - 1, pero aquí hay un punto. ¿Quévalordel índice llegará aquíprimero? ¿Máximo o mínimo?

 
hoz:

Es decir, no hay ningún valor variable desde el que se pueda iniciar el cálculo. Según la lógica de la máquina, ¿a partir de qué barra comenzará el cálculo? Si hay un decrecimiento de i... ¿es el máximo?


No, por el valor que tenía esa variable antes del ciclo. La entrada

   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)

es idéntica a

   int cnt,i;
   for (cnt = 0, i = index + g_center - 1; i >= 0 && cnt < g_center; i--)
 
En otras palabras, la primera expresión del bucle for puede escribirse en su lugar o antes del bucle, y el resultado es el mismo.
 
hoz:

De nuevo, i = índice + g_center - 1, pero aquí está el punto. ¿Cuál es elprimer valor delíndice que viene aquí? ¿Máximo o mínimo?


El índice será el valor pasado a la función como parámetro.
Razón de la queja: