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

 
hoz:


:) ¿Por qué no implementarlo como una nueva función de barra? Es necesario que recalcule una vez al día, es decir, a partir de las 0.00 horas. Así que lo hacemos de forma sencilla. Al principio, por supuesto:

En mi opinión, esta es la forma correcta aunque sea primitiva.
Vinin, su tocayo, me dijo que debería cambiar por sí mismo, pero nunca lo hizo, sólo con la compilación. ¡Gracias por la idea de utilizar el control de barras! Ponga una variante en un gráfico y su variante en el otro. Veré lo que funciona mañana.
 
hoz:


No es ninguno de los dos, es E . Hay un signo &&.

O. Porque la condición AND no se cumple cuando al menos uno de los operandos es falso (primero O segundo) - en lógica booleana esto se llama"ley de De Morgan".

Lo entiendo. Pero la cuestión es ésta:

La variableíndice en general por código tiene valor Bar - IndicadorContado().

Es decir, es 1 en la barra actual y 2 en la nueva.

Entra en la función IsUpFractal() con el valor 1 o 1 si la barra aún no es nueva, ¿verdad?

Así, la variable i tendrá un valor fijo ya que el índice del parámetro de entrada también es fijo. Así que el bucle siempre se romperá después de la primera iteración. ¿Cuál es entonces el objetivo del bucle?

En cada paso del ciclo, la variable i se decrementa en 1 (i--), por lo que i recorre todos los valores desde index+g_center-1 hasta cero. Además, observe que cuando el indicador comienza, IndicatorCounted() da 0, es decir, el índice se ejecutará en todas las barras, por lo que a i se le asigna index+g_center-1 cada vez y luego se ejecuta hacia abajo hasta que llegue a 0 barra O hasta que cnt sea igual a g_center, es decir, hasta que la condición del bucle no se cumpla (bueno, o hasta que se llame a return en el propio cuerpo del bucle).
 
alsu:

O. Porque la condición AND no se cumple cuando al menos uno de los operandos es falso (primero O segundo) - en la lógica de Buda esto se llama"ley de De Morgan".

Vaya. Qué lío. Cuántas veces he utilizado estos operadores... y aquí es como"estoy viendo una nueva puerta". He leído la ley, está escrita de forma extraña. Describe una situación de negación. ¿Supongo que esta técnica sólo se aplica a las situaciones de negación? Me refiero a si alguna de las variables booleanas no es igual aTrue.

Me he dado cuenta sobre la marcha de que no lo he metido. La conclusión es que la diferencia aquí es la siguiente. Es un indicador, por lo que no estoy acostumbrado a pensar así. Esto significa que en la primera llamada del indicador, las barras no se calculan y el índice será igual al número de barras en el gráfico o al valor de alguna variable limitReCalcBar, si las condiciones de cálculo de las barras son limitadas.

De hecho, la variable g_center = 2 según el código.limitReCalcBar = 5000 también basado en variables externas.

Cuando se ejecuta por primera vez el indicador en 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);                                  // Фрактал найден                 
}

se le pasa el valor de 5000 en consecuencia.

i = índice + g_center - 1 = 5000 + 2 - 1 = 5001

Veamos el bucle:

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

Tenemos que calcular 5000 barras. Después de las dos primeras barras, es decir, 0 y 1, la condicióncnt < g_center es falsa. ¿Cómo podemos entonces calcular las 5000 barras? Este es el punto que quiero dominar. Parece elemental para un profesional, pero no lo entiendo. Por supuesto, si tomamos el operador && como un OR, todo encajará... Pero de alguna manera se contradice con lo que ya he utilizado en Expert Advisors y he conocido alguna vez.

Cuando todo esté calculado, todo será sencillo. El 0 y el 1 se pasarán en cada tick por el índice, las condiciones se cumplirán en un bucle y no hay dificultades, según veo.

 

Queridos programadores Me pueden decir si es posible escribir un script que monitorice las posiciones abiertas y cuando una posición alcance un determinado nivel de pérdidas, cierre parte de la posición. El umbral de pérdida debe establecerse en la moneda del depósito o en puntos. Por lo tanto, si el precio va en contra de nosotros, reducimos la pérdida y si el precio se volvió a la ganancia, entonces en lugar de la pérdida podemos obtener algún beneficio o incluso menor pérdida, dependiendo de TP establecido. El script tiene que funcionar todo el tiempo en modo EA, es un asistente de cualquier sistema de trading o Expert Advisor.

 
destan:

Queridos programadores Me pueden decir por favor si es posible escribir un script que monitoree las posiciones abiertas y cuando una posición alcance un determinado nivel de pérdidas, cierre parte de la posición. El umbral de pérdida debe fijarse en la moneda del depósito o en puntos. Por lo tanto, si el precio va en contra de nosotros, reducimos la pérdida y si el precio se volvió a la ganancia, entonces en lugar de la pérdida podemos obtener algún beneficio o incluso menor pérdida, dependiendo de TP establecido. El script debe funcionar siempre en el modo EA, es un asistente de cualquier sistema de trading o Expert Advisor.

Tal vez. Aquí hay algo de ayuda.

 
valeryk:

Tal vez. Aquí hay ayuda.


¡¡¡Hay una cosa que se llama stop loss!!!
 

Hola, tengo una pregunta, hay varias ventanas iguales en el terminal, cada una de ellas tiene el mismo Asesor Experto, pero con diferentes configuraciones. ¿Pueden decirme si hay una función o un algoritmo listo en MQL4 que pueda detectar desde qué ventana se abre una orden de mercado?

 
badbadboy:

Hola, tengo una pregunta. Hay varias ventanas idénticas en el terminal, cada una de ellas tiene el mismo Asesor Experto, pero con diferentes configuraciones. ¿Pueden decirme si hay una función o un algoritmo listo en MQL4 que permita determinar en qué ventana está abierta una orden de mercado?

¡Tiene más sentido hacer copias del EA, nombrándolas de forma diferente y verás en el registro todo, qué lanza y, por tanto, en qué ventana lo encontrarás!
 
borilunad:
Tiene más sentido hacer copias del EA, nombrándolas de forma diferente, y ya verás en el cuaderno de bitácora qué copia y en qué ventana, respectivamente, ¡puedes averiguarlo!

Lo resolveré, pero ¿cómo informo al Asesor Experto al respecto?
 
borilunad:
¡Tiene más sentido hacer copias del EA, nombrándolas de manera diferente, y verá en el registro todo, que lanza y, en consecuencia, en qué ventana ya sabe!

Necesito esto para que el Asesor Experto pueda empezar a hacer cálculos por sí mismo.
Razón de la queja: