Au revoir le robot - bonjour le marasme - page 5

 
Je vous propose la chose suivante : joignez l'indicateur (celui qui fonctionnait avant, sans modifications) ici ou dans mon message personnel et je le corrigerai.
 
Pavlick:
Je vous propose la chose suivante : joignez l'indicateur (la variante qui fonctionnait avant, sans modifications) ici ou dans mon message personnel, je le corrigerai.

Bonjour, Pavlik !

C'est la version.

original.

essayez de faire glisser le code

pansa

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

//| AltrTrend_Signal_v2_2.mq4

//| Ramdass - Conversion seulement

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

#property copyright "Auteur - OlegVS, GOODMAN"

#property indicator_chart_window

#property indicator_buffers 2

#propriété indicator_color1 Chartreuse

#property indicator_color2 Yellow

#property indicator_width1 2

#property indicator_width2 2

//---- paramètres d'entrée

extern int K=30 ;

extern double Kstop=0.5 ;

extern inttern Kperiod=150 ;

extern inttern PerADX=14 ;

externe interne CountBars=350 ;

external intON=1 ; //zakton's

//---- tampons

double val1[] ;

double val2[] ;

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

//| Fonction d'initialisation de l'indicateur personnalisé|

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

int init()

{

string short_name ;

//----ligne d'indicateurs

IndicatorBuffers(2) ;

SetIndexStyle(0,DRAW_ARROW) ;

SetIndexArrow(0,159) ;

SetIndexStyle(1,DRAW_ARROW) ;

SetIndexArrow(1,159) ;

SetIndexBuffer(0,val1) ;

SetIndexBuffer(1,val2) ;

//----

retour(0) ;

}

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

//| AltrTrend_Signal_v2_2|

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

int start()

{

si (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 ;

//----

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

//---- zéro initial

si(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 ;

}

//----

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

{

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

Plage=0 ;

AvgRange=0 ;

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

{AvgRange=AvgRange+MathAbs (High[i1]-Low[i1]) ;

}

Portée=AvgRange/(SSP+1) ;

SsMax=High[shift] ; SsMin=Low[shift] ;

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

{

prix=Haut[i2] ;

si(SsMax<prix) SsMax=prix ;

prix=Bas[i2] ;

si(SsMin>=prix) SsMin=prix ;

}

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

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

val1[shift]=0 ;

val2[shift]=0 ;

si (Close[shift]<smin)

{

tendance à la hausse = faux ;

}

si (Close[shift]>smax)

{

tendance à la hausse = vrai ;

}

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

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

ancien=uptrend ;

// code de zakton

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

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

}

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

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

}

}

retour(0) ;

}

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

Bonjour, Pavlik !

C'est la version.

original.

essayez de faire glisser le code

pansa


Sr. Pansa ! Porqué 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:

Bonjour, Pavlik !

C'est la version.

original.

essayez de faire glisser le code

pansa




L'indicateur fonctionne, mais le développeur y a fait une erreur de logique

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);
Voici ce dont parlait Roche
 

OK ?

//+------------------------------------------------------------------+
//|                                             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:

OK ?


Bonjour Pavlik !

J'ai installé votre code.

Il fonctionne parfaitement !

Vous êtes un grand talent -

Vous avez franchi le mur !

Bon travail -

désormais des signaux fiables et

♪ new horizons ! ♪

quelle bonne journée aujourd'hui !

J'aimerais remercier tout spécialement Integer.

Il a écrit le script d'appel des joueurs !

Il existe cependant des talents et des personnes de qualité.

Bravo à vous !

Aujourd'hui, c'est le 9/11/14 !

Panza

 
Andrei01:

La plupart des avertissements que je reçois sont générés à cause du passage parfaitement légal, correct et standard d'une variable par référence dans une fonction lorsque le nom du modèle de la fonction coïncide avec la variable elle-même, comme cela devrait être le cas dans cette construction dans son utilisation standard et typique, lorsque la variable elle-même est passée dans la fonction par son propre nom.

Donnez un exemple, s'il vous plaît.

Malheureusement, le MC n'a pas pu donner une explication compétente et logique à ce sujet, car il arrive parfois que quelqu'un puisse avoir un malentendu dans d'autres constructions lorsqu'il y a des noms similaires.

Si j'ai bien compris le cas, la réponse était à la fois logique et correcte, et a été apprise au cours de plus de deux décennies de programmation continue.


Désolé pour le commentaire accidentellement effacé - j'ai cliqué au mauvais endroit et il n'y a pas de fonction pour le restaurer.

 
Renat:

Donnez-moi un exemple, s'il vous plaît.

Si j'ai bien compris l'affaire, la réponse était à la fois logique et correcte, et a été subie pendant plus de deux décennies de programmation continue.


//--------------------------------------------------------------------
#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);
}


L'éditeur a généré l'avertissement "declaration of 'a' hides global declaration at line 4" et "declaration of 'b' hides global declaration at line 4" pour cette construction standard, légale et populaire selon les normes du langage C, qui est également incorrecte et illettrée de par son essence même, car il n'y a ni déclaration d'une nouvelle variable à l'intérieur d'une fonction ni aucune indication d'un éventuel chevauchement de variables.

Par conséquent, il y a des centaines d'avertissements inappropriés même dans un code de programme pas si grand.

 
Vinin:


L'indicateur fonctionne, mais le développeur y a fait une erreur de logique


Salut Vinin !

Vous avez vérifié l'indicateur: AltrTrend_Signal_v2_2.mq4

et a trouvé une erreur logique

dans la formule : SSP=MathCeil (Kperiod/iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_MAIN,1))

vous avez souligné 1 à la fin

Que pensez-vous qu'il devrait être ?

pansa