[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 396

 
7777877:

Sí, gracias ayudó... Pero quiero entender por qué ObjectSet(nombre_objeto,OBJPROP_TIMEFRAMES,PERIOD_H1) no funciona (como debería)? ¿Son fallos del propio idioma?

De hecho, tanto PERIOD_H1 como OBJ_PERIOD_H1 son sólo una sustitución alfa de algún valor numérico.

OBJ_PERIOD_H1 = 0x0010 (para la construcción actual) = 0001 0000 (binario)

PERIOD_H1 = 60 (para esta construcción) = 0011 1100 (binario)


Como es fácil de reemplazar, accidentalmente puso 4 marcos de tiempo en lugar de uno - H4, H1, M30 y M15


Y en lugar de llamar a ObjectSet(nombre_del_objeto,OBJPROP_TIMEFRAMES,0x0010) (que es lo que querías hacer) has llamado a

ObjectSet(nombre_objeto,OBJPROP_TIMEFRAMES,0x3C).

 
datetime last_time;   // глобальная переменная

...

int start()
{
   if (last_time != Time[0])
   {
      // Ура, новый бар!
      last_time = Time[0];      // запоминаем новый бар
      if(close[1]>open[1]) 
xBost_b=xBost_b+((close[1]-low[1])*10000);
   }

¿Qué es el Tiempo[0] y cómo afecta a 1 tiempo más? Sólo estoy un poco confundido...

 
DanLett:

¿Qué es el Tiempo[0] y cómo afecta a 1 tiempo más? Sólo estoy un poco confundido...

Hora[0] es la hora de apertura de la barra más reciente (actual). En cuanto llega un nuevo bar, cambia.

Escriba la hora en el MetaEditor y pulse F1 para ver los detalles

 
ilunga:

Hora[0] es la hora de apertura de la barra más reciente (actual). En cuanto llega un nuevo bar, cambia.

Escriba la hora en el MetaEditor y pulse F1 para ver los detalles

¡Lo leeré ahora! ¡Muchas gracias!
 
DanLett:
¡Lo leeré ahora! ¡Muchas gracias!

Entonces no olvides mirar iTime()
 
   datetime last_time;   // глобальная переменная
  int xBost_b;
  int xBost_s;
double hi=High[1];
double op=Open[1];
double cl=Close[1];
double lo=Low[1];
int Sum_xb;
int Sum_xs;
 
 if (last_time != Time[0])
   {
      // Ура, новый бар!
      last_time = Time[0];      // запоминаем новый бар
      if(Close[1]>Open[1]) 
xBost_b=(hi-cl)*10000;
Sum_xb=Sum_xb+xBost_b;<---------не плюсует,выдает такое же число как и xBost

      if(Close[1]<Open[1])
 xBost_s=(cl-lo)*10000; 
Sum_xs=Sum_xs+xBost_s;    
Comment("\n kolvo_b=",xBost_b,"\n Sum_xb=",Sum_xb,"\n kolvo_s=",xBost_s,"\n Sum_xs=",Sum_xs);

   }
¿cómo hacer que te dé un plus cada vez?
 
DanLett:
¿cómo hago para que sume cada vez?
Lasvariables globales deben estar fuera de todas las funciones. Envíe las sumas allí también. o declare estas variables como estáticas
 
DanLett:
¿cómo hago para que se añada cada vez?
Sacar last_time de start() y declararlo estático
 
¿Cómo puedo usar barras sintéticas(https://www.mql5.com/ru/articles/1353) para que la función dentro del EA trabaje sólo en precios abiertos? En las barras normales se hacía por la hora de apertura de la barra actual, así if (Time[0] == prevtime4) return;
prevtime4=Time[0]; pero las barras sintéticas son sin tiempo... en teoría se puede escribir aquí si bid es el precio de apertura, pero no sé cómo hacerlo.
 

¿Cómo puedo encontrar las colas máximas de las velas de compra?

Es decir, se construye la vela actual, la vela de compra anterior, determinamos la cola de la vela de compra, luego seguimos construyendo el gráfico, la vela de compra apareció de nuevo y de nuevo calculamos la cola,

ahora como encontrar el máximo de estas colas y escribirlas en la variable????

int Sum_xb;
int Sum_xs;
datetime last_time;   // глобальная переменная
int Kol_vo_b;
int Kol_vo_s;
int Sr_zn_b;
int Sr_zn_s;
extern int Num_kolvo_b=10;
extern int Num_kolvo_s=10;
int Zn_b;
int Max_b;

int start()
  {
   
  int xBost_b;
  int xBost_s;
double hi=High[1];
double op=Open[1];
double cl=Close[1];
double lo=Low[1];


   if (last_time != Time[0])
   {
      // Ура, новый бар!
      last_time = Time[0];      // запоминаем новый бар
      if(Close[1]>Open[1])
      { 
xBost_b=(hi-cl)*10000;
Kol_vo_b++;
}
      if(Close[1]<Open[1])
      {
 xBost_s=(cl-lo)*10000; 
 Kol_vo_s++;
 
   }
   
if (Kol_vo_b==Num_kolvo_b)
{
Kol_vo_b=0;
Sum_xb=0;
}
if (Kol_vo_s==Num_kolvo_s)
{
Kol_vo_s=0;
Sum_xs=0;
}  
 
Sum_xb=Sum_xb+xBost_b;
Sr_zn_b=Sum_xb/Kol_vo_b;

Sum_xs=Sum_xs+xBost_s;
Sr_zn_s=Sum_xs/Kol_vo_s;

Zn_b=xBost_b;
if(xBost_b>Zn_b)
Max_b=xBost_b;
}




Comment("\n xBost_b=",xBost_b,"\n Sum_xb=",Sum_xb,"\n Kol_vo_b=",Kol_vo_b,"\n Sr_zn_b=",Sr_zn_b,
"\n\n\n\n kolvo_s=",xBost_s,"\n Sum_xs=",Sum_xs,"\n Kol_vo_s=",Kol_vo_s,"\n Sr_zn_s=",Sr_zn_s,"\n\n\n\n Max_b=",Max_b);

return(0);
  }

cómo escribir correctamente esta parte del código para encontrar el máximo

Zn_b=xBost_b;
if(xBost_b>Zn_b)
Max_b=xBost_b;

Razón de la queja: