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

 
alsu:

No, de la variable que tenía antes del ciclo. Escriba

es idéntica a

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

Ahora lo entiendo. Gracias. Estaba buscando... no había ningún punto de referencia. Ahora es 0.


Hmm. Bueno, por ejemplo, el índice se pasa como 1. Veamos este trozo de código:

 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++;                                       // .. равным минимумом
   }
   

inmediatamente al llegar será:cnt = 0, i = índice + g_center - 1 = 1(valor del índice) +2(valor deg_center) - 1 = 2

Pero según la condición del bucle, éste continuará hasta que i sea igual a 0. ¿Cómo va a ocurrir esto?

La condición dice que si i tiene un valor de 2(si índice = 1), a i >= 0 ycnt tiene de 0, acnt < g_center, entonces se cumplen las condiciones anidadas.

Resulta que si la variable aquí es 1, sólo tendremos 1 iteración en el bucle, ¿no?

 
alsu:

Explique el concepto de "limitado a 0 bar"
En otras palabras, necesito dibujar una línea (no un rayo) a través de 2 fractales, pero debe terminar en la barra 0
 
beginner:
En otras palabras, necesito dibujar una línea (no un rayo) a través de 2 fractales, pero debe terminar en 0 bar


El algoritmo es el siguiente:

1. Sean las coordenadas del fractal (i1; p1) y (i2; p2), donde i1<i2 (es decir, el primer fractal está más cerca de la barra 0 que el segundo)

2. Ecuación de la línea que pasa por estos fractales p = (p1-p2)/(i1-i2) * i + (p2*i1 - p1*i2)/(i1-i2)

3. Por lo tanto, necesitamos dibujar un segmento con las siguientes coordenadas finales: (0; (p2*i1 - p1*i2)/(i1-i2)) y (i2;p2)

4. ObjectCreate(...)

5. ???

6. ¡¡¡Ganancia!!!

 
Vinin:

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

Gracias por la respuesta. Es cierto, nunca funcionó hasta que inserté al principio del inicio del indicador

if(Hour() == 0 && Minute() == 0 && Seconds() == 0) { DeleteObject() etc.

}

if(Hour() >= 0 && Minute() >= 0 && Seconds() >= 1) { código del indicador ...

Recientemente tampoco funciona con este. No sé qué hacer. ¿Qué puede aconsejar? Gracias.

Acabo de conseguir escribirlo ahora, el sábado trabajo para vivir.

 
hoz:


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

No quería preguntar de inmediato, pero tenía que hacerlo. Porque no pude hacer el corte yo mismo.

Me alegro de que te haya servido de algo. Yo mismo, al igual que usted, comenzó hace 2 años, pero desde la infancia estoy acostumbrado a venir siempre a todo por su cuenta, porque el conocimiento de los consejos no puede formar un sistema. Y lo pido sólo cuando es absolutamente necesario, cuando ya he hecho todo, he buscado por todas partes y no lo he conseguido. Muchos recién llegados quieren soldar y bombear rápidamente la pasta. La experiencia les enseñará. Ya te he dicho que es mejor hacer algo sencillo, que te quede claro, que algo complicado, que no entiendas, y es mejor evitar esas situaciones hasta que llegues al fondo. El código se puede hacer de diferentes maneras, pero la lógica debe ser tan clara como dos para usted. Por eso evito usar lo que aún no entiendo. El código es tu herramienta, que debes conocer y dominar a la perfección, para poder retocarlo fácilmente en el tiempo. Le deseo éxito.
 
hoz:

Ahora lo entiendo. Gracias. Estaba buscando... no había ningún punto de referencia. Ahora es 0.


Hmm. Bueno, por ejemplo, el índice se pasa como 1. Veamos este trozo de código:

inmediatamente al llegar será:cnt = 0, i = índice + g_center - 1 = 1(valor del índice) +2(valor deg_center) - 1 = 2

Pero según la condición del bucle, éste continuará hasta que i sea igual a 0. ¿Cómo va a ocurrir esto?

La condición dice que si i tiene un valor de 2(si índice = 1), a i >= 0 ycnt tiene de 0, acnt < g_center, entonces se cumplen las condiciones anidadas.

Resulta que si la variable aquí es 1, sólo tendremos 1 iteración en el bucle, ¿no?


El bucle termina cuando la condición escrita en el segundo lugar del operador for() deja de cumplirse, es decir, en este caso, cuando i se hace menor que 0, o cuando cnt se hace mayor o igual que g_center. Ambas variables tienen valores iniciales asignados antes del bucle y cambian durante su ejecución: la variable i como resultado de i-- (la tercera parte de la sentencia for, se ejecuta cada vez que el bucle llega al corchete de cierre }) y la variable cnt como resultado de cnt++.
 

Hola.

Intentando exportar a html mi operación desde mi cuenta demo. (Alpari, última versión). Pulso guardar como informe, se abre una ventana de selección de carpetas, pulso guardar y no pasa nada. ¿Es lo mismo para las cuentas demo? Una cosa más, mi MT4 está instalado en mi escritorio. ¿Importa?

 
borilunad:
Quien sabe, ¿es posible haciendo variables globales Hour(), Minute() y Seconds(), controlar el cambio del indicador DailyPivotPoints a los nuevos niveles de PP y otras líneas del EA a medianoche (0.00)? Yo lo hacía directamente en el indicador con Hour(), Minute(), Seconds(), y funcionaba sin tener que compilar cada noche. Pero recientemente ha dejado de cambiar por sí mismo, ¿quizás por cambiar el bild? Gracias.


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

if (lastBarTime == время с ТФ Д1)
    return(0);
// что-то тут ещё
// что-то тут ещё
// что-то тут ещё
if (lastBarTime != время с ТФ Д1)
{
    пересчитывает уровни пивотов...
    lastBarTime = время с ТФ Д1;
}
Creo que esta es la forma más correcta, ¡aunque sea primitiva!
 
alsu:

El bucle termina cuando la condición escrita en el segundo lugar del operador for() deja de cumplirse, es decir, en este caso, cuando i se hace menor que 0 o cuando cnt se hace mayor o igual que g_center.


Pero no es ninguno de los dos, es Y. El signo && también está ahí.

Entiendo todo eso. Pero la cuestión es ésta:

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 - == Окончание блока =============================================================

Elíndice de la variable en general por el 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. ¿Qué sentido tiene entonces el bucle?

 

¿Puede decirme, por favor, por qué no aparece...

double IN[111];
double PERI=33;
double KRIT;
int z;      
ArraySetAsSeries(IN,true);

   for(z=0; z<=PERI; z++)  {
IN[z]=     iClose(Symbol1.Name,0,iBarShift(Symbol1.Name,0,Time[z],false)); }

   for(z=0; z<=PERI; z++)  {
KRIT=IN[z]-iMAOnArray(IN,0,PERI,0,MODE_SMA,iBarShift(IN,0,Time[z],false)); }

Print(KRIT);
return;
Razón de la queja: