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

 
tara:
No.

Sería más útil que respondieras "diez". En caso de que no lo haga.
 
Got:

Explica dónde me equivoco, no encuentra la herramienta en Market Watch.

Prueba a poner también "=" en la condición i>=0

for(int i=SymbolsTotal(true)-1; i>=0; i--){
 
borilunad:

Haga clic en Gráficos, en la parte inferior de Propiedades y en la parte superior izquierda desmarque el Gráfico en la parte superior. Y, en general, utiliza más, ¡te será muy útil!

¡Gracias! Ha funcionado.
 

El depurador no funciona, ¿qué ocurre?

Metatrader bild 646, editor bild 934. Este es el indicador más sencillo:


Lo ejecuto en EURUSD, M1, y esto es lo que obtengo:

1

Es decir, todo es como debería ser.

Y ahora hago un breakpoint antes de la Alerta y ejecuto el Depurador:

USDCHF, aparece el gráficoH1. ¿De dónde viene? SóloEURUSD ,M1 está abierto.

Lo estoy ejecutando y esto es lo que veo:

Es decir, el indicador toma los datos exactamente de este USDCHF,H1. ¿Cuál es el problema aquí?

La segunda pregunta. El Editor no coloca el script escrito en la carpeta Scripts sino en la carpeta MQL4 y coloca el archivo compilado allí también. Tengo que arrastrar y soltar manualmente el código fuente a la carpeta Scripts, luego compilarlo y el script aparecerá en el Navigator sólo entonces. No tengo ese error con los indicadores, van a sus carpetas al instante. ¿Es algo que estoy haciendo mal o el Editor está cometiendo un error?

Tercera pregunta. Sigo teniendo el 646 de Bild, aunque alguien en el Foro dijo lo del 650 en mayo. ¿Realmente no ha habido ninguna actualización desde entonces, o de nuevo tengo algo mal?

Buena suerte a quien me responda.

 
¡Gracias por la suerte! ¡Pero sólo respondiendo a la tercera pregunta! Yo también tengo un bild 646 hasta que el servidor nos actualice a uno más nuevo. Esto sucede cuando lo enciendo después de un descanso. Lo hago una vez a la semana antes de que empiece la sesión. ¡Buena suerte para ti también!
 

¿Cómo puedo poner SendMail y Alert en el indicador para que no reaccione a las señales antiguas al recalcular los valores del indicador, sino que muestre Alert y envíe mail sólo en las nuevas?

Si va así:

//+------------------------------------------------------------------+
//|                                                       simple.mq4 |
//|                                                         evillive |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "evillive"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
double Up[];
double Down[];
extern int period = 2;
extern int method = 1;
extern int price = 0;
extern int shift = 4;
extern string _alerts_="alerts section";
input bool alert=false;//show alert
input bool mail=false;//send mail
input bool not=false;//send push notification
//////////////////

      string dir="";
      datetime tim=0;

int OnInit()
  {

   SetIndexStyle(0, DRAW_ARROW, EMPTY,3);
   SetIndexArrow(0, 176);
   SetIndexBuffer(0, Up);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,3);
   SetIndexArrow(1, 176);
   SetIndexBuffer(1, Down);
   SetIndexLabel(0,"BUY!");
   SetIndexLabel(1,"SELL!");

   return(INIT_SUCCEEDED);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int i,limit;
   double ma0,ma1,atr;
//---
      if(rates_total<=(period+shift))
      return(0);
//--- counting from 0 to rates_total
//--- initial zero
   if(prev_calculated<1)
     {
      for(i=0; i<=rates_total-(period+shift); i++)
        {
         Up[i]=0.0;
         Down[i]=0.0;
        }
     }
//--- starting calculation
   if(prev_calculated>0)
      limit=rates_total-prev_calculated; //period+shift;
   else
      limit=rates_total-(period+shift);

   for(i = 1; i < limit; i++)
  {
      ma0 = iMA(NULL,0,period,0,method,price,i);
      ma1 = iMA(NULL,0,period,0,method,price,i+shift);
      atr = iATR(NULL,0,period,i);
      if(ma0>ma1 && Close[i]<Close[i+shift] && Close[i]>Close[i+period+shift])
        {
            Up[i] = (Close[i]+Open[i])/2;
            dir="up";
            tim=Time[i];
            alerts(dir,tim);
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {   
            Down[i] = (Close[i]+Open[i])/2;
            dir="down";
            tim=Time[i];
            alerts(dir,tim);
        }
  }
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void alerts(string d, datetime t)
{
if(!IsTesting() && (TimeLocal()-t)>60)
{
if(alert==true) Alert("New ",d," arrow");
if(mail==true) SendMail("New signal",StringConcatenate("A new ",d, "signal detected by indicator"));
if(not==true) SendNotification(StringConcatenate("A new ",d, "signal detected by indicator"));
}
return;
}

entonces ante cualquier efecto en el indicador (ajuste en el gráfico, configuración, cambio de TF, salto en el lugar o sonido agudo), vuelve a mostrar las alertas e intenta enviar el mismo correo a TODAS las flechas, desde el inicio del gráfico hasta el actual.

Pregunta además - el correo en el registro está marcado como"Correo: 'Mensaje de prueba' ha sido enviado", pero no ha caído ni una sola letra en la casilla (((

 
evillive:

¿Cómo escribo SendMail y Alert en el indicador, para que no reaccione a las señales antiguas al recalcular los valores del indicador, sino que muestre Alert y envíe mail sólo en las nuevas?

Si va así:

Entonces, ante cualquier influencia sobre el indicador (instalación en el gráfico, ajuste, cambio de TF, salto en el lugar o sonido agudo), vuelve a mostrar las alertas e intenta enviarlas por correo a TODAS las flechas, desde el inicio del gráfico hasta el actual.

Pregunta además - el correo en el registro está marcado como"Correo: 'Mensaje de prueba' ha sido enviado", pero no ha caído ni una sola letra en la casilla (((.


Lo habría hecho

//+------------------------------------------------------------------+
//|                                                       simple.mq4 |
//|                                                         evillive |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "evillive"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
double Up[];
double Down[];
extern int period = 2;
extern int method = 1;
extern int price = 0;
extern int shift = 4;
extern string _alerts_="alerts section";
input bool alert=false;//show alert
input bool mail=false;//send mail
input bool not=false;//send push notification
                     //////////////////

char dir=0;
datetime tim=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {

   SetIndexStyle(0,DRAW_ARROW,EMPTY,3);
   SetIndexArrow(0,176);
   SetIndexBuffer(0,Up);
   SetIndexStyle(1,DRAW_ARROW,EMPTY,3);
   SetIndexArrow(1,176);
   SetIndexBuffer(1,Down);
   SetIndexLabel(0,"BUY!");
   SetIndexLabel(1,"SELL!");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int i,limit;
   double ma0,ma1,atr;
//---
   if(rates_total<=(period+shift))
      return(0);
//--- counting from 0 to rates_total
//--- initial zero
   if(prev_calculated<1)
     {
      for(i=0; i<=rates_total-(period+shift); i++)
        {
         Up[i]=0.0;
         Down[i]=0.0;
        }
     }
//--- starting calculation
   if(prev_calculated>0)
      limit=rates_total-prev_calculated-1; //period+shift;
   else
      limit=rates_total-(period+shift)-1;

   for(i=limit; i>=0; i--)
     {
      ma0 = iMA(NULL,0,period,0,method,price,i);
      ma1 = iMA(NULL,0,period,0,method,price,i+shift);
      atr = iATR(NULL,0,period,i);
      if(ma0>ma1 && Close[i]<Close[i+shift] && Close[i]>Close[i+period+shift])
        {
         Up[i]=(Close[i]+Open[i])/2;
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {
         Down[i]=(Close[i]+Open[i])/2;
        }
     }
      if(ma0>ma1 && Close[0]<Close[shift] && Close[0]>Close[period+shift])
        {
         if (dir!=1) {
            dir=1;
            alerts("UP",Time[0]);
         }
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {
         if (dir!=-1){
            dir=-1;
            alerts("DOWN",Time[0]);
         }
        }

   

   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void alerts(string d,datetime t)
  {
   if(!IsTesting() && (TimeLocal()-t)>60)
     {
      if(alert==true) Alert("New ",d," arrow");
      if(mail==true) SendMail("New signal",StringConcatenate("A new ",d,"signal detected by indicator"));
      if(not==true) SendNotification(StringConcatenate("A new ",d,"signal detected by indicator"));
     }
   return;
  }
//+------------------------------------------------------------------+
 
Vinin:


Lo habría hecho

¿Se supone quelas líneas añadidas están fuera del bucle o es un error tipográfico?
Vale, lo tengo, así es como debe ser.
 

Hola, ¿alguien tiene una plantilla para promediar un puesto.

Es decir, si se abre una orden y es perdedora, entonces se abre una segunda orden en la misma dirección, ponemos un stop en medio de estas órdenes y así sucesivamente, tres órdenes, cuatro...?

 
Top2n:

Hola, ¿alguien tiene una plantilla para promediar un puesto.

Es decir, si se abre una orden y es perdedora, entonces se abre una segunda orden en la misma dirección, ponemos un stop en medio de estas órdenes y así sucesivamente, tres órdenes, cuatro...?


Toma todos los precios abiertos y calcula la media aritmética