AYUDA !!!! convertir un indicador de MT4 a MT5. - página 4

 
George Merts:

Sí, imagínate, lo que propones cuesta cierto esfuerzo y, por tanto, dinero.

Todo el mundo entiende perfectamente el ruso, pero muy poca gente está interesada en hacerlo "para dar las gracias".

Pero si tuviera una experiencia exitosa en el comercio, en la que necesitaría un indicador, tal vez alguien aceptaría hacer algo sin dinero a cambio de una idea de comercio rentable. Mientras tanto -por pura "buena fama"- me temo que no habrá mucha gente dispuesta a hacerlo...

Mi experiencia personal no tiene nada que ver.

¿Así que el legendario Ishimoku no le resulta familiar? ¿No ha demostrado su eficacia durante muchos años?

No se trata de que un robot de trading pierda o no un depósito.

Es un Ishimoku tradicional con una alerta atornillada. La decisión depende del comerciante.

Así es como has conseguido la incomprensión de la lengua rusa, ni siquiera has leído mi post.

Incluso añadí el indicadorIchimokuAlert_v3.mq4 para mt4 y escribí que lo uso.

Aquí está el código para mt4 indicadorIchimokuAlert_v3.mq4 para aquellos que no pueden descargar

//+------------------------------------------------------------------+
//|                                             IchimokuAlert_v2.mq4 |
//|                                  Copyright © 2006, Forex-TSD.com |
//|                         Written by IgorAD,igorad2003@yahoo.co.uk |
//|                           Adapted and improved by Snowski © 2009 |  
//+------------------------------------------------------------------+

#property copyright "Copyright © 2006, Forex-TSD.com "
#property link      "http://www.forex-tsd.com/"

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 SandyBrown
#property indicator_color4 Thistle
#property indicator_color5 Lime
#property indicator_color6 SandyBrown
#property indicator_color7 Thistle

//---- input parameters
extern int Tenkan             = 9;
extern int Kijun              = 26;
extern int Senkou             = 52;
extern bool UseAlerts         = true;
extern bool MsgAlerts         = true;
extern bool SoundAlerts       = true;
extern bool eMailAlerts       = false;
extern int AlertType          = 1;
extern string Alert_Setting   = "--- Alert Type:---";
extern string A_S0            = "0 = no alert";
extern string A_S1            = "1 = Tenkan crosses Kjiun";
extern string A_S2            = "2 = Kijun crosses Price";
extern string A_S3            = "3 = both";
extern bool Show_Tenkan       = true;
extern bool Show_Kijun        = true;
extern bool Show_Senkou       = true;
extern bool Show_Kumo         = true;
//---- buffers
double Tenkan_Buffer[];
double Kijun_Buffer[];
double SpanA_Buffer[];
double SpanB_Buffer[];
double Chinkou_Buffer[];
double SpanA2_Buffer[];
double SpanB2_Buffer[];
//----
int a_begin;
bool UptrendAlert1,DntrendAlert1,UptrendAlert2,DntrendAlert2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//----
   if(Show_Tenkan==true){
      SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
      SetIndexBuffer(0,Tenkan_Buffer);
      SetIndexDrawBegin(0,Tenkan-1);
      SetIndexLabel(0,"Tenkan Sen");
   }  
//----
   if(Show_Kijun==true){
      SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
      SetIndexBuffer(1,Kijun_Buffer);
      SetIndexDrawBegin(1,Kijun-1);
      SetIndexLabel(1,"Kijun Sen");
      }
//----
   if(Show_Kumo==true){
      a_begin=Kijun; if(a_begin<Tenkan) a_begin=Tenkan;
      SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_DOT);
      SetIndexBuffer(2,SpanA_Buffer);
      SetIndexDrawBegin(2,Kijun+a_begin-1);
      SetIndexShift(2,Kijun);
      SetIndexLabel(2,NULL);
      SetIndexStyle(5,DRAW_LINE,STYLE_SOLID);
      SetIndexBuffer(5,SpanA2_Buffer);
      SetIndexDrawBegin(5,Kijun+a_begin-1);
      SetIndexShift(5,Kijun);
      SetIndexLabel(5,"Senkou Span A");
   }
//----
   if(Show_Kumo==true){
      SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_DOT);
      SetIndexBuffer(3,SpanB_Buffer);
      SetIndexDrawBegin(3,Kijun+Senkou-1);
      SetIndexShift(3,Kijun);
      SetIndexLabel(3,NULL);
      SetIndexStyle(6,DRAW_LINE,STYLE_SOLID);
      SetIndexBuffer(6,SpanB2_Buffer);
      SetIndexDrawBegin(6,Kijun+Senkou-1);
      SetIndexShift(6,Kijun);
      SetIndexLabel(6,"Senkou Span B");
   }
//----
   if(Show_Senkou==true){
      SetIndexStyle(4,DRAW_LINE);
      SetIndexBuffer(4,Chinkou_Buffer);
      SetIndexShift(4,-Kijun);
      SetIndexLabel(4,"Chinkou Span");
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Ichimoku Kinko Hyo                                               |
//+------------------------------------------------------------------+
int start()
{
   int    i,k;
   int    counted_bars=IndicatorCounted();
   double high,low,price;
//----
   if(Bars<=Tenkan || Bars<=Kijun || Bars<=Senkou) return(0);
//---- initial zero
   if(counted_bars<1)
     {
      for(i=1;i<=Tenkan;i++)    Tenkan_Buffer[Bars-i]=0;
      for(i=1;i<=Kijun;i++)     Kijun_Buffer[Bars-i]=0;
      for(i=1;i<=a_begin;i++) { SpanA_Buffer[Bars-i]=0; SpanA2_Buffer[Bars-i]=0; }
      for(i=1;i<=Senkou;i++)  { SpanB_Buffer[Bars-i]=0; SpanB2_Buffer[Bars-i]=0; }
     }
//---- Tenkan Sen
      i=Bars-Tenkan;
      if(counted_bars>Tenkan) i=Bars-counted_bars-1;
         while(i>=0)
            {
            high=High[i]; low=Low[i]; k=i-1+Tenkan;
         while(k>=i)
            {
            price=High[k];
            if(high<price) high=price;
            price=Low[k];
            if(low>price)  low=price;
            k--;
           }
         Tenkan_Buffer[i]=(high+low)/2;
         i--;
      }
//---- Kijun Sen
   i=Bars-Kijun;
   if(counted_bars>Kijun) i=Bars-counted_bars-1;
   while(i>=0)
     {
      high=High[i]; low=Low[i]; k=i-1+Kijun;
      while(k>=i)
        {
         price=High[k];
         if(high<price) high=price;
         price=Low[k];
         if(low>price)  low=price;
         k--;
        }
      Kijun_Buffer[i]=(high+low)/2;
      i--;
     }
//---- Senkou Span A
   i=Bars-a_begin+1;
   if(counted_bars>a_begin-1) i=Bars-counted_bars-1;
   while(i>=0)
     {
      price=(Kijun_Buffer[i]+Tenkan_Buffer[i])/2;
      SpanA_Buffer[i]=price;
      SpanA2_Buffer[i]=price;
      i--;
     }
//---- Senkou Span B
   i=Bars-Senkou;
   if(counted_bars>Senkou) i=Bars-counted_bars-1;
   while(i>=0)
     {
      high=High[i]; low=Low[i]; k=i-1+Senkou;
      while(k>=i)
        {
         price=High[k];
         if(high<price) high=price;
         price=Low[k];
         if(low>price)  low=price;
         k--;
        }
      price=(high+low)/2;
      SpanB_Buffer[i]=price;
      SpanB2_Buffer[i]=price;
      i--;
     }
//---- Chinkou Span
   i=Bars-1;
   if(counted_bars>1) i=Bars-counted_bars-1;
   while(i>=0) { Chinkou_Buffer[i]=Close[i]; i--; }
  
//----
   string Msg,Subj;
  
   if (AlertType == 1 || AlertType == 3)
   {
      if (Tenkan_Buffer[1]>Kijun_Buffer[1] && Tenkan_Buffer[2]<Kijun_Buffer[2] && !UptrendAlert1)
      {
         Subj = "Tenkan crosses Kijun: "+Symbol()+" on M"+Period();
         Msg = "BUY Signal --- : "+Subj+ " @ "+DoubleToStr(Close[1],Digits) + ", @ " + TimeToStr(TimeLocal(),TIME_SECONDS);
         UptrendAlert1 = true;
         DntrendAlert1 = false;
         DoAlerts(Msg,Subj);
      }
      if ( Tenkan_Buffer[1]<Kijun_Buffer[1] && Tenkan_Buffer[2]>Kijun_Buffer[2] && !DntrendAlert1)
      {  
         Subj = "Tenkan crosses Kijun: "+Symbol()+" on M"+Period();
         Msg = "SELL Signal --- : "+Subj+ " @ "+DoubleToStr(Close[1],Digits) + ", @ " + TimeToStr(TimeLocal(),TIME_SECONDS);
         UptrendAlert1 = false;
         DntrendAlert1 = true;
         DoAlerts(Msg,Subj);
      }
   }
  
   if (AlertType == 2 || AlertType == 3)
   {
      if (Close[1]>Close[1+Kijun] && Close[2]<Close[2+Kijun] && !UptrendAlert2)
      {
         Subj = "Kijun crossed Price: "+Symbol()+" on M"+Period();
         Msg = "BUY Signal --- : "+Subj+ " @ "+DoubleToStr(Close[1],Digits) + ", @ " + TimeToStr(TimeLocal(),TIME_SECONDS);
         DntrendAlert2 = false;
         UptrendAlert2 = true;
         DoAlerts(Msg,Subj);
      }
      if (Close[1]<Close[1+Kijun] && Close[2]>Close[2+Kijun] && !DntrendAlert2)
      {
         Subj = "Kijun crossed Price: "+Symbol()+" on M"+Period();
         Msg = "SELL Signal --- : "+Subj+ " @ "+DoubleToStr(Close[1],Digits) + ", @ " + TimeToStr(TimeLocal(),TIME_SECONDS);
         DntrendAlert2 = true;
         UptrendAlert2 = false;
         DoAlerts(Msg,Subj);
      }
   }
   return(0);
}

void DoAlerts(string msgText, string eMailSub)
{
   if (MsgAlerts) Alert(msgText);
   if (eMailAlerts) SendMail(eMailSub, msgText);
}
//+------------------------------------------------------------------+

 
Ваня:

Mi experiencia personal no tiene nada que ver.

¿Así que el legendario Ishimoku no le resulta familiar? ¿No ha demostrado su eficacia a lo largo de los años?

No se trata de que un robot de trading pierda o no un depósito.

Es un Ishimoku tradicional con una alerta atornillada. La decisión depende del comerciante.

¿Cuál es su pregunta?

Quieres que te rehagan. Si la mejora no es demasiado difícil, puede hacerse a cambio de una tarifa. Pero si te recomiendan ir a Freelancer, significa que tus mejoras no son tan pequeñas.

Y sólo hay dos bases para hacer revisiones importantes. O bien el comerciante paga por el trabajo, o bien proporciona una TS que realmente funciona.

Usted ofrece un indicador ishimoku - pero el indicador no es un sistema. Por lo tanto, nadie quiere molestarse en ello.

 

Así es, te dice errores.

Mira por ti mismo - cuando el control llega a la declaración if?

En ambos casos, este operador simplemente "se queda en el aire" - eso es lo que advierte el compilador. "La expresión no está permitida a nivel global".

La sentencia if debe situarse en el punto en el que quieres que se active la alerta, no "colgando en el aire".

Y, no hay diferencia si es MT4 o MT5 - no se puede hacer en ambos casos. La sentencia if pasa el control a una de las ramas, no puede "quedarse en el aire".

Sólo sus procedimientos y funciones pueden "colgar en el aire" y ser llamados por el terminal cuando se manejan eventos- OnCalculte(), o por usted mismo - DoAlerts().

 
George Merts:

Así es, te dice errores.

Mira por ti mismo - cuando el control llega a la declaración if?

En ambos casos, este operador simplemente "se queda en el aire" - eso es lo que advierte el compilador. "La expresión no está permitida a nivel global".

La sentencia if debe situarse en el punto en el que quieres que se active la alerta, no "colgando en el aire".

Y, no hay diferencia si es MT4 o MT5 - no se puede hacer en ambos casos. La sentencia if pasa el control a una de las ramas, no puede "quedarse en el aire".

Sólo sus procedimientos y funciones pueden "colgar en el aire", que serán llamados por el terminal al procesar eventos- OnCalculte(), o por usted mismo - DoAlerts().

No soy programador

Para mí, es un bosque oscuro.

 
Ваня:

No soy programador.

es un bosque oscuro para mí.

Bueno, te han indicado el servicio Freelance. Hay - programadores en vivo que no tienen ningún problema para formar el TOR en consulta con usted, y llevarlo a cabo a un precio similar.

Hay un foro donde pueden ayudar a los novatos, pero realmente ayudan a los que están tratando de crecer como programador. Bastantes comerciantes no están interesados en ello - y Freelance para ellos es una solución muy razonable.

 
George Merts:

Bueno, te han indicado el servicio Freelance. Hay programadores que fácilmente formarán el TOR en consulta con usted, y lo ejecutarán a un precio razonable.

Tengo entendido que mt5 es un verdadero desastre. Pero este es un foro donde pueden ayudar a los principiantes, pero para ayudar a aquellos, que están tratando de crecer como un programador. Bastantes comerciantes no están interesados en él, y Freelance es una solución muy razonable para ellos.

Sólo quería probar mt5.

Tengo todos los indicadores en mt4. Funcionan.

Ya que ni siquiera puedo probarlo cómodamente...

Ahora entiendo que el mt5 es un verdadero dolor de cabeza.

 
Ваня:

Sólo quería probar el mt5.

En mt4 todos los indicadores están ahí. Funcionan.

Como es imposible siquiera probarlo cómodamente...

Ahora entiendo que el mt5 es un verdadero dolor de cabeza.

Mt5 no es un dolor de cabeza, tampoco lo es mql5.

Sin embargo, no he probado el indicador. Si tienes algún problema, dímelo, yo mismo lo probaré y buscaré los problemas.
 
Alexey Viktorov:
Mt5 al igual que mql5 no es un dolor de cabeza.

Sólo que no he probado el indicador. Si tienes algún problema, házmelo saber y lo probaré yo mismo.
ArraySetAsSeries ha sido olvidado.
 
o_O:
ArraySetAsSeries olvidado
Sí... Ya lo estoy arreglando.



Ya está arreglado, comprobado. Las alertas están ahí, pero no sé si son correctas.

Vanya, por favor, hazme saber la corrección de las alertas después de comprobarlas. El indicador estará en CodeBase.
Archivos adjuntos:
 
Alexey Viktorov:
Sí... Ya lo estoy arreglando.



Ya está arreglado, probado. Las alertas están ahí, pero no sé si son correctas.

Vanya, por favor, hazme saber si las alertas son correctas después de comprobarlas. El indicador estará en CodeBase.

Gracias. ¡Buen hombre! ¡Que tengas salud y provecho por el resto de la eternidad!

Estaré probando.