Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1033

 
abeiks:

Hola.

La hora no se devuelve correctamente en este momento. Por ejemplo, si la hora es 12.04, devuelve 12.4. ¿Pueden decirme cómo hacer que esta función sea correcta?

Pues bien, Hour() y Minute() devuelven la hora actual y el minuto actual de la última hora del servidor en el momento de iniciar el programa. Y los valores devueltos son de tipo int. Y estos son sólo números enteros. Así que hay que formatearlos. Por ejemplo, así:

string label=IntegerToString(Hour(),2,'0')+":"+IntegerToString(Minute(),2,'0');
 
artmedia70:

Hour() y Minute() devuelven la hora actual y el minuto actual de la última hora del servidor al inicio del programa. Y los valores devueltos son de tipo int. Y estos son sólo números enteros. Así que todavía tienes que formatearlos. Por ejemplo, así:


Gracias.
 
abeiks:
Gracias.

De nada. Si no es un secreto, ¿por qué necesita una etiqueta que muestre la hora de la última ejecución de su programa?

Sólo por curiosidad...

 

¡Buenas tardes!

Por favor, indique cómo implementar correctamente la función de limitar 1 operación a 1 barra (es decir, si ya se ha abierto o cerrado una operación en una vela, no se abrirá una nueva operación en esa vela)

He encontrado muchas variantes, pero no puedo averiguar cómo escribir correctamente el código de un búho (es decir, qué parte debe escribirse en las variables globales, y qué parte debe escribirse en la condición de apertura del trato)

Por ejemplo, aquí tenemos una variante de este tipo:

int TekBar = -1; // Barra actual.

if (TekBar == Bars)return(0); // Sólo una operación por barra.
TekBar = Bars; // Sólo hay una operación en una barra.

{...}

¿qué parte de este script debe insertarse en qué zona del código del búho?

 
DuKle:

¡Buenas tardes!

Por favor, indique cómo implementar correctamente la función de limitar 1 operación a 1 barra (es decir, si ya se ha abierto o cerrado una operación en una vela, no se abrirá una nueva operación en esa vela)

He encontrado muchas variantes, pero no puedo averiguar cómo escribir correctamente el código de un búho (es decir, qué parte debe escribirse en las variables globales, y qué parte debe escribirse en la condición de apertura del trato)

Por ejemplo, aquí tenemos una variante de este tipo:

int TekBar = -1; // Barra actual.

if (TekBar == Bars)return(0); // Sólo una operación por barra.
TekBar = Bars; // Sólo hay una operación en una barra.

{...}

¿qué parte de este script debe insertarse en qué zona del código del búho?

Debe averiguar si la última operación en la barra número 0 fue abierta o cerrada.

Para ello, es necesario encontrar la última operación abierta y la última operación cerrada.

Vea la barra de la última operación abierta y la barra de la última operación cerrada.

Si alguno de estos valores (barra de la última operación abierta o barra de la última operación cerrada) es cero, no podrá abrir nuevas posiciones.

Y, sí: no es un script, es sólo un trozo de código. Y no es necesario introducir nada en el búho: el búho es una rapaz nocturna, y deja que el pájaro viva.

 

¡Hola! ¡Por favor, ayuda!

Tengo una idea, pero no sé cómo ponerla en práctica. Y lo más importante, no sé si este problema tiene solución.

La esencia es la siguiente: tenemos un indicador que dibuja alguna línea en el gráfico en un número determinado de barras.

¿Es posible cambiar el número de barras en las que se dibuja la línea arrastrando el "extremo" izquierdo de la línea con el ratón? Después de arrastrar, el indicador debería recordar el nuevo número de barras utilizadas para el cálculo. Este es un ejemplo de un indicador que quiero mejorar

//+------------------------------------------------------------------+
//|                                                      Canal__.mq4 |
//+------------------------------------------------------------------+
//----------------------------------
#property indicator_chart_window
//----------------------------------
extern int Hours=20;
extern color col=Red;
//------------------
double lr,lr0,lrp;
double sx,sy,sxy,sx2,aa,bb;
int p,fs;
ulong sName;
int f,f0,f1;
double dh,dl,dh_1,dl_1,dh_2,dl_2;
int ai_1,ai_2,bi_1,bi_2;
double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;
double price_p1,price_p0,price_p2,price_01,price_00,price_02;
int p1,p0,p2,fp;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   p=Hours*60/Period();
   if(fs==0)
     {
      sName=TimeCurrent(); 
      fs=1;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   ObjectDelete("1"+(string)sName);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int i,n;
//----
   if(f==1)
     {
      p1=iBarShift(Symbol(),Period(),(datetime)ObjectGet("1"+(string)sName,OBJPROP_TIME1));
      if(fp==0 && p!=p1) {p=p1; fp=1;}
     }
//----
   sx=0; sy=0; sxy=0; sx2=0;
   for(n=0; n<=p; n++)
     {
      sx+=n; sy+=Close[n]; sxy+=n*Close[n]; sx2+=MathPow(n,2);
     }
   aa=(sx*sy-(p+1)*sxy)/(MathPow(sx,2)-(p+1)*sx2); bb=(sy-aa*sx)/(p+1);
//----
   for(i=0; i<=p; i++)
     {
      lr=bb+aa*i;
      dh=High[i]-lr; dl=Low[i]-lr;
      //----
      if(i<p/2)
        {
         if(i==0)
           {
            dh_1=0.0; dl_1=0.0; ai_1=i; bi_1=i;
           }
         if(dh>=dh_1) {dh_1=dh; ai_1=i;}
         if(dl<=dl_1) {dl_1=dl; bi_1=i;}
        }
      //----
      if(i>=p/2)
        {
         if(i==p/2)
           {
            dh_2=0.0; dl_2=0.0; ai_2=i; bi_2=i;
           }
         if(dh>=dh_2) {dh_2=dh; ai_2=i;}
         if(dl<=dl_2) {dl_2=dl; bi_2=i;}
        }
     }
   lr0=bb; lrp=bb+aa*(i+p);
//===================================================
   if(MathAbs(ai_1-ai_2)>MathAbs(bi_1-bi_2)) f=1;
   if(MathAbs(ai_1-ai_2)<MathAbs(bi_1-bi_2)) f=2;
   if(MathAbs(ai_1-ai_2)==MathAbs(bi_1-bi_2))
     {
      if(MathAbs(dh_1-dh_2)<MathAbs(dl_1-dl_2)) f=1; if(MathAbs(dh_1-dh_2)>=MathAbs(dl_1-dl_2)) f=2;
     }
//=================================================
   if(f==1)
     {
      for(n=0; n<=20; n++)
        {
         f1=0;
         for(i=0; i<=p; i++)
           {
            hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);
            if(i==0 || i==p/2) dhm=0.0;
            if(High[i]-hai>dhm && i<p/2) {ai_1=i; f1=1;}
            if(High[i]-hai>dhm && i>=p/2) {ai_2=i; f1=1;}
           }
         if(f==0) break;
        }
      //----------------------------
      for(i=0; i<=p; i++)
        {
         hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);
         dli=Low[i]-hai;
         if(i==0) dlm=0.0; if(dli<dlm) dlm=dli;
        }
      ha0=High[ai_1]*(0-ai_2)/(ai_1-ai_2)+High[ai_2]*(0-ai_1)/(ai_2-ai_1);
      hap=High[ai_1]*(p-ai_2)/(ai_1-ai_2)+High[ai_2]*(p-ai_1)/(ai_2-ai_1);
      //----------------------------
      price_p1=hap+dlm/2;
      price_01=ha0+dlm/2;
     }
//=================================================
   if(f==2)
     {
      for(n=0; n<=20; n++)
        {
         f1=0;
         for(i=0; i<=p; i++) 
           {
            lai=Low[bi_1]*(i-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i-bi_1)/(bi_2-bi_1);
            if(i==0 || i==p/2) dlm=0.0;
            if(Low[i]-lai<dlm && i<p/2) {bi_1=i; f1=1;}
            if(Low[i]-lai<dlm && i>=p/2) {bi_2=i; f1=1;}
           }
         if(f==0) break;
        }
      //----------------------------
      for(i=0; i<=p; i++)
        {
         lai=Low[bi_1]*(i-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i-bi_1)/(bi_2-bi_1);
         dhi=High[i]-lai;
         if(i==0) dhm=0.0; if(dhi>dhm) dhm=dhi;
        }
      la0=Low[bi_1]*(0-bi_2)/(bi_1-bi_2)+Low[bi_2]*(0-bi_1)/(bi_2-bi_1);
      lap=Low[bi_1]*(p-bi_2)/(bi_1-bi_2)+Low[bi_2]*(p-bi_1)/(bi_2-bi_1);
      //----------------------------------------------------------------
      price_p1=lap+dhm/2;
      price_01=la0+dhm/2;
     }
//=================================================================================== отрисовка линий
   ObjectCreate("1"+(string)sName,2,0,Time[p],price_p1,Time[0],price_01);
//-----------------------------------------------------------------
   ObjectSet("1"+(string)sName,OBJPROP_COLOR,col);
   ObjectSet("1"+(string)sName,OBJPROP_STYLE,STYLE_DASHDOT);
   ObjectSet("1"+(string)sName,OBJPROP_RAY,false);
//---------------------------------------------
   ObjectSet("1"+(string)sName,OBJPROP_TIME1,Time[p]);
   ObjectSet("1"+(string)sName,OBJPROP_PRICE1,price_p1);
   ObjectSet("1"+(string)sName,OBJPROP_TIME2,Time[0]);
   ObjectSet("1"+(string)sName,OBJPROP_PRICE2,price_01);
   f=1; p1=p; p0=p; p2=p; fp=0;
//===================================================================================
   return(0);
  }
//+------------------------------------------------------------------+
 
Night63:

¡Hola! ¡Por favor, ayuda!

Tengo una idea, pero no sé cómo ponerla en práctica. Y lo más importante, no sé si este problema tiene solución.

La esencia es la siguiente: tenemos un indicador que dibuja alguna línea en el gráfico en un número determinado de barras.

¿Es posible cambiar el número de barras en las que se dibuja la línea arrastrando el "extremo" izquierdo de la línea con el ratón? Después de arrastrar, el indicador debería recordar el nuevo número de barras utilizadas para el cálculo. Este es un ejemplo de un indicador que quiero mejorar

Es necesario añadir OnChartEvent() al indicador y seguir el evento de cambio de tamaño de línea por su nombre: CHARTEVENT_OBJECT_CHANGE. Recalcule la nueva longitud de la línea en barras, y utilice su nuevo tamaño como parámetro para el cálculo.
 
artmedia70:

Hay que averiguar si la última operación se abrió o se cerró en la barra número 0.

Para ello, es necesario encontrar la última operación abierta y la última operación cerrada.

Vea la barra de apertura de la última operación abierta y la barra de cierre de la última operación cerrada.

Si alguno de estos valores (la barra de la última operación abierta o la barra de la última operación cerrada) es cero, no podrá abrir nuevas posiciones.

Y, sí: no tiene un guión, es sólo una parte del código de nepomyshchego. Y no es necesario introducir nada en el búho: el búho es una rapaz nocturna, y deja que el pájaro viva.

Entiendo el principio de detectar la presencia de un acuerdo, pero no sé cómo implementarlo en el código :-(
 
DuKle:
Entiendo el principio de determinar si una transacción existe, no sé cómo implementarlo en código :-(

Qué triste es todo esto...

¿Lo hago por ti?

Para empezar, y para entender mejor, lee el hilo"Funciones útiles de KimIV".

El código, por supuesto, es redundante, pero es justo para empezar y aprender.

 

¡Estimados programadores de mql4/5 !

Soy un principiante que aprendió los fundamentos del lenguaje de programación y desarrolló un EA para mi diploma.

Tengo un capítulo en mi diploma llamado "Economía".

Si estuviera desarrollando algún programa para una empresa, todo está claro con la parte económica.

Pero, ¿cómo ser en mi caso? ¿Qué puedo tener en cuenta y qué caminos seguir?

¡¡¡¡Muchas gracias!!!!

___________________________

El camino lo recorren los que caminan (c)