Adiós robot - hola marasmo - página 5

 
Sugiero lo siguiente: adjuntar el indicador (el que funcionaba antes, sin cambios) aquí o en mi mensaje personal y lo corregiré.
 
Pavlick:
Sugiero lo siguiente: adjuntar el indicador (la variante que funcionaba antes, sin cambios) aquí o en mi mensaje personal, lo corregiré.

¡Hola, Pavlik!

Esa es la versión.

original.

intente arrastrar el código

pansa

//+------------------------------------------------------------------+

//| AltrTrend_Signal_v2_2.mq4

//| Ramdass - Sólo conversión

//+------------------------------------------------------------------+

#property copyright "Autor - OlegVS, GOODMAN"

#propiedad ventana_del_gráfica_del_indicador

#property indicator_buffers 2

#property indicator_color1 Chartreuse

#property indicator_color2 Amarillo

#property indicator_width1 2

#property indicator_width2 2

//---- parámetros de entrada

extern int K=30;

extern double Kstop=0,5;

externo inttern Kperiod=150;

extern inttern PerADX=14;

extern inttern CountBars=350;

extern intON=1; //zakton's

//---- buffers

doble val1[];

doble val2[];

//+------------------------------------------------------------------+

//| Función de inicialización de indicadores personalizada |

//+------------------------------------------------------------------+

int init()

{

nombre_corto_de_cadena;

//----línea indicadora

IndicatorBuffers(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,159);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,159);

SetIndexBuffer(0,val1);

SetIndexBuffer(1,val2);

//----

return(0);

}

//+------------------------------------------------------------------+

//| AltrTrend_Signal_v2_2|

//+------------------------------------------------------------------+

int inicio()

{

if (CountBars>=Bars) CountBars=Bars;

SetIndexDrawBegin(0,Bars-CountBars+PerADX);

SetIndexDrawBegin(1,Bars-CountBars+PerADX);

int,shift,counted_bars=IndicatorCounted();

int i1,i2;

double Range,AvgRange,smin,smax,SsMax,SsMin,SSP,price;

bool tendencia alcista,antigua;

//----

if(Bars<=PerADX+1) return(0);

//---- cero inicial

if(counted_bars<PerADX+1)

{

for(i=1;i<=PerADX;i++) val1[CountBars-i]=0.0;

for(i=1;i<=PerADX;i++) val2[CountBars-i]=0.0;

}

//----

for (shift = CountBars-PerADX; shift>=0; shift--)

{

SSP=MathCeil(Kperiod/iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_MAIN,1));

Rango=0;

AvgRange=0;

for (i1=cambio; i1<=cambio+SSP; i1++)

{AvgRange=AvgRange+MathAbs (Alto[i1]-Bajo[i1]);

}

Alcance=AvgRange/(SSP+1);

SsMax=Alto[turno]; SsMin=Bajo[turno];

for (i2=shift;i2<=shift+SSP-1;i2++)

{

precio=Alto[i2];

if(SsMax<precio) SsMax=precio;

precio=Bajo[i2];

if(SsMin>=precio) SsMin=precio ;

}

smin = SsMin+(SsMax-SsMin)*K/100;

smax = SsMax-(SsMax-SsMin)*K/100;

val1[shift]=0;

val2[shift]=0;

if (Close[shift]<smin)

{

tendencia alcista = falso;

}

si (Close[shift]>smax)

{

Tendencia alcista = verdadero;

}

if (uptrend!=old && uptrend==true) {val1[shift]=Low[shift]-Range*Kstop;}

if (uptrend!=old && uptrend==false) {val2[shift]=High[shift]+Range*Kstop;}

old=tendencia;

// código de zakton

if ((shift == 0) && (SoundON == 1)) {

if (val1[0] > 0) PlaySound("ReadyToExit.wav");

}

if ((shift == 0) && (SoundON == 1)) {

if (val2[0] > 0) PlaySound("ReadyToExit.wav");

}

}

return(0);

}

//+--------------------------------------------------------
 
pansa:

¡Hola, Pavlik!

Esa es la versión.

original.

intente arrastrar el código

pansa


Sr. ¡Pansa! ¿Por qué no usa el botón SRC para poner su código? ¿Así mejor o Ud. tiene alguna duda?

//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2.mq4
//| Ramdass - Conversion only
//+------------------------------------------------------------------+
#property  copyright "Author - OlegVS, GOODMAN"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Chartreuse
#property indicator_color2 Yellow
#property indicator_width1 2
#property indicator_width2 2
//---- input parameters
extern int K=30;
extern double Kstop=0.5;
extern int Kperiod=150;
extern int PerADX=14;
extern int CountBars=350;
extern int SoundON=1; //zakton's
//---- buffers
double val1[];
double val2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,159);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,159);
   SetIndexBuffer(0,val1);
   SetIndexBuffer(1,val2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2                                            |
//+------------------------------------------------------------------+
int start()
  {  
   if (CountBars>=Bars) CountBars=Bars;
   SetIndexDrawBegin(0,Bars-CountBars+PerADX);
   SetIndexDrawBegin(1,Bars-CountBars+PerADX);
   int i,shift,counted_bars=IndicatorCounted();
   int i1,i2;
   double Range,AvgRange,smin,smax,SsMax,SsMin,SSP,price;
   bool uptrend,old;
//----
   if(Bars<=PerADX+1) return(0);
//---- initial zero
   if(counted_bars<PerADX+1)
   {
      for(i=1;i<=PerADX;i++) val1[CountBars-i]=0.0;
      for(i=1;i<=PerADX;i++) val2[CountBars-i]=0.0;
   }
//----
for (shift = CountBars-PerADX; shift>=0; shift--)
{
SSP=MathCeil(Kperiod/iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_MAIN,1));
                Range=0;
                AvgRange=0;
                for (i1=shift; i1<=shift+SSP; i1++)
                               {AvgRange=AvgRange+MathAbs(High[i1]-Low[i1]);
                               }
                Range=AvgRange/(SSP+1);
SsMax=High[shift]; SsMin=Low[shift];
   for (i2=shift;i2<=shift+SSP-1;i2++)
        {
         price=High[i2];
         if(SsMax<price) SsMax=price;
         price=Low[i2];
         if(SsMin>=price)  SsMin=price;
        }
smin = SsMin+(SsMax-SsMin)*K/100;
smax = SsMax-(SsMax-SsMin)*K/100;
                val1[shift]=0;
                val2[shift]=0;
                if (Close[shift]<smin)
                               {
                               uptrend = false;
                               }
                if (Close[shift]>smax)
                               {
                               uptrend = true;
                               }
   if (uptrend!=old && uptrend==true) {val1[shift]=Low[shift]-Range*Kstop;}
   if (uptrend!=old && uptrend==false) {val2[shift]=High[shift]+Range*Kstop;}
   old=uptrend;
// zakton's code  
   if ((shift == 0) && (SoundON == 1)) {
      if (val1[0] > 0) PlaySound("ReadyToExit.wav");
   }
   if ((shift == 0) && (SoundON == 1)) {
      if (val2[0] > 0) PlaySound("ReadyToExit.wav");
   }
}
   return(0);
  }
//+--------------------------------------------------------

¡Buena suerte!

 
pansa:

¡Hola, Pavlik!

Esa es la versión.

original.

intente arrastrar el código

pansa




El indicador funciona, pero el desarrollador ha cometido un error lógico en él

SSP=MathCeil(Kperiod/iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_MAIN,1));
 
//+------------------------------------------------------------------+
//|                                        sample_execute_script.mq4 |
//+------------------------------------------------------------------+
#import "user32.dll"
  int RegisterWindowMessageW(string MessageName);
  int PostMessageW(int hwnd, int msg, int wparam, string Name);
  void keybd_event(int VirtualKey, int ScanCode, int Flags, int ExtraInfo);


#import

int start()
{
  int winHandle = WindowHandle( Symbol(), Period() );
//
//
//
  if(signal < 0 && trigl==true && buy == true) 
  {
    StartScript(winHandle, "SchliesenProfitOrders" ); 
  }
//
//
//
}
void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)
{
  int MessageNumber = RegisterWindowMessageW("MetaTrader4_Internal_Message");
  PostMessageW(hWnd, MessageNumber, 16, ScriptName);
  if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }
} 
void ClearConfigDialog()
{
  Sleep(100);
  keybd_event(13, 0, 0, 0);
}
//
//
//
return(0);
A esto se refería Roche
 

¿DE ACUERDO?

//+------------------------------------------------------------------+
//|                                             AltrTREND_Signal.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|                                 AltrTrend_Signal_v2_2_alert.mq4  |
//|                                       Ramdass - Conversion only  |
//+------------------------------------------------------------------+
#property  copyright "Author - OlegVS, GOODMAN"
#property strict
#import "user32.dll"
  int RegisterWindowMessageA(uchar &lParam[]);
  int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);
  void keybd_event(int VirtualKey, int ScanCode, int Flags, int ExtraInfo);
#import

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DeepSkyBlue
#property indicator_color2 OrangeRed
#property indicator_width1 1
#property indicator_width2 1

//---- input parameters
extern bool Alert_message = true;
extern int  Time_alert_minutes = 60; // ????? ????? ?????????? ???? ??? ? 60 ?????.
extern int K = 30;
extern double Kstop = 0.5;
extern int Kperiod = 150;
extern int PeriodADX = 7;//14;
extern int CountBars = 100;
extern string script_name = "fPlayer";

//---- buffers
double val1[];
double val2[];

double AlertTime;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
    //---- indicator line
    IndicatorBuffers(1);
    SetIndexStyle(0,DRAW_ARROW);
    SetIndexArrow(0,241);
    IndicatorBuffers(2);
    SetIndexStyle(1,DRAW_ARROW);
    SetIndexArrow(1,242);
    SetIndexBuffer(0,val1);
    SetIndexBuffer(1,val2);
    if(CountBars>=Bars) 
        CountBars=Bars;
    SetIndexDrawBegin(0, Bars - CountBars + PeriodADX );
    SetIndexDrawBegin(1, Bars - CountBars + PeriodADX );
    //----
    return(0);
  }
  
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2                                            |
//+------------------------------------------------------------------+
int start()
{   
    int shift, counted_bars = IndicatorCounted();
    //---- 
    if(counted_bars<0) return(-1);
    //---- 
    int i1, i2, t_per;
    double Range, AvgRange, smin, smax, SsMax, SsMin, SSP, price;
    bool uptrend, old;
    //----
    if(Bars <=PeriodADX  + 1) 
        return(0);
    //----
    for(shift = CountBars - PeriodADX ; shift >= 0; shift--) 
    { 
        SSP = MathCeil(Kperiod / iADX(NULL, 0, PeriodADX , PRICE_CLOSE, MODE_MAIN, 1));
        Range = 0;
        AvgRange = 0;
        for(i1 = shift; i1 <= shift + SSP; i1++)
        {
            AvgRange = AvgRange + MathAbs(High[i1] - Low[i1]);
        }
        Range = AvgRange / (SSP + 1);
        //----
        SsMax = High[shift]; 
        SsMin = Low[shift]; 
        for(i2 = shift; i2 <= shift + SSP - 1; i2++)
        {
            price = High[i2];
            if(SsMax < price) 
                SsMax = price;
            price = Low[i2];
            if(SsMin >= price)  
                SsMin = price;
        }
        //----
        smin = SsMin + (SsMax - SsMin)*K / 100; 
        smax = SsMax - (SsMax - SsMin)*K / 100; 
        val1[shift] = 0.0;
        val2[shift] = 0.0;
        if(Close[shift] < smin)
        {
            uptrend = false;
        }
        if(Close[shift] > smax)
        {
            uptrend = true;
        }
        if(uptrend != old && uptrend == true) 
        {
            val1[shift] = Low[shift] - Range*Kstop;
        }
        if(uptrend != old && uptrend == false) 
        {
            val2[shift] = High[shift] + Range*Kstop;
        }
        old = uptrend;
    }  
    
//---- Alert
    if (Period()<Time_alert_minutes) t_per=Period(); else t_per=Time_alert_minutes; // ???? ??<Time_alert, ????? ????? ?????????? ???? ??? ? ??.
    if (Alert_message==true && CurTime()>AlertTime && val1[0]!=0.0)
    { 
        Alert(Symbol()," +++  BUY !!! +++" , "  //AltrTrend_Signal_v2_2_alert");
        AlertTime=CurTime() + (t_per - MathMod(TimeMinute(CurTime()), t_per))*60;
        //PlaySound("payment.wav");
        int winHandle = WindowHandle( Symbol(), Period() );
        StartScript(winHandle, script_name);
    }
    if (Alert_message==true && CurTime()>AlertTime && val2[0]!=0.0)
    { 
        Alert(Symbol()," +++  SELL !!!   +++" , "  //AltrTrend_Signal_v2_2_alert");
        AlertTime=CurTime() + (t_per - MathMod(TimeMinute(CurTime()), t_per))*60;
        // PlaySound("payment.wav");
        int winHandle = WindowHandle( Symbol(), Period() );
        StartScript(winHandle, script_name);
    }

    return(0);
}

void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)
{
    char buf[];
    StringToCharArray("MetaTrader4_Internal_Message", buf);
    int MT4InternalMsg = RegisterWindowMessageA(buf);
    StringToCharArray(ScriptName, buf);
    SendMessageA(hWnd, MT4InternalMsg, 16, buf);
    if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }
}

void ClearConfigDialog()
{
    Sleep(100);
    keybd_event(13, 0, 0, 0);
} 

//+------------------------------------------------------------------+
 
Pavlick:

¿DE ACUERDO?


¡Hola Pavlik!

Instalé su código...

Funciona perfectamente.

Eres un gran talento -

¡Has atravesado el muro!

Gran trabajo -

ahora señales fiables y

*¡Nuevos horizontes!*

¡qué buen día el de hoy!

Me gustaría dar las gracias especialmente a Integer.

¡Él escribió el guión de la llamada del jugador!

Sin embargo, hay talentos y gente buena.

Te felicito.

¡Hoy es 9/11/14!

Panza

 
Andrei01:

La mayoría de mis advertencias de basura se generan debido a un paso perfectamente legal, correcto y estándar de una variable por referencia a una función, cuando el nombre de la plantilla de la función coincide con la propia variable como debería ser en esta construcción en su uso estándar y típico, cuando la propia variable se pasa a la función por su propio nombre.

Pon un ejemplo, por favor.

Desgraciadamente, el MC no pudo dar una explicación competente y lógica de esto, ya que a veces alguien supuestamente puede tener un malentendido en otras construcciones cuando hay nombres similares.

Si entendí bien el caso, la respuesta era lógica y correcta, y fue aprendida durante más de un par de décadas de programación continua.


Perdón por el comentario borrado accidentalmente - hice clic en el lugar equivocado y no hay función para restaurarlo.

 
Renat:

Dame un ejemplo, por favor.

Si he entendido bien el caso, la respuesta era lógica y correcta, y se ha sufrido durante más de un par de décadas de programación continua.


//--------------------------------------------------------------------
#property indicator_chart_window
//--------------------------------------------------------------------
int a=1,b=2;
//--------------------------------------------------------------------
void start(){        
        int k=sum(a,b);
        Alert(k);
}
//--------------------------------------------------------------------
int sum(int& a, int& b){        
        return(a+b);
}


El editor generó la advertencia "la declaración de 'a' oculta la declaración global en la línea 4" y "la declaración de 'b' oculta la declaración global en la línea 4" para esta construcción estándar, legal y popular por los estándares del lenguaje C que además es incorrecta y analfabeta por su propia esencia porque no hay ni declaración de una nueva variable dentro de una función ni ninguna pista sobre un posible solapamiento de variables.

Como resultado, hay cientos de advertencias inapropiadas incluso en un código de programa no tan grande.

 
Vinin:


El indicador funciona, pero el desarrollador cometió un error lógico en él


¡Hola Vinin!

Ha comprobado el indicador: AltrTrend_Signal_v2_2.mq4

y encontró un error lógico

en fórmula : SSP=MathCeil (Kperiod/iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_MAIN,1))

usted subrayó 1 al final

¿qué crees que debería ser?

pansa

Razón de la queja: