Auf Wiedersehen, Roboter - Hallo, Marasmus - Seite 5

 
Ich schlage Folgendes vor: Fügen Sie den Indikator (der zuvor ohne Änderungen funktioniert hat) hier oder in meiner persönlichen Nachricht an, und ich werde ihn korrigieren.
 
Pavlick:
Ich schlage Folgendes vor: Fügen Sie den Indikator (die Variante, die vorher funktioniert hat, ohne Änderungen) hier oder in meiner persönlichen Nachricht an, ich werde ihn korrigieren.

Hallo, Pawlik!

Das ist die Version.

Original.

Versuchen Sie, den Code zu ziehen

pansa

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

//| AltrTrend_Signal_v2_2.mq4

//| Ramdass - Nur Konvertierung

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

#property copyright "Autor - OlegVS, GOODMAN"

#property indicator_chart_window

#Eigenschaft indicator_buffers 2

#property indicator_color1 Chartreuse

#Eigenschaft indicator_color2 Gelb

#Eigenschaft indicator_width1 2

#property indicator_width2 2

//---- Eingabeparameter

extern int K=30;

extern double Kstop=0.5;

extern inttern Kperiod=150;

extern inttern PerADX=14;

extern inttern CountBars=350;

extern intON=1; //zakton's

//---- Puffer

double val1[];

double val2[];

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

//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren|

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

int init()

{

string kurz_name;

//----Indikatorzeile

IndikatorPuffer(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexPfeil(0,159);

SetIndexStyle(1,DRAW_ARROW);

SetIndexPfeil(1,159);

SetIndexPuffer(0,val1);

SetIndexPuffer(1,val2);

//----

zurück(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);

//---- anfänglicher Nullpunkt

if(gezählte_Balken<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));

Bereich=0;

AvgRange=0;

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

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

}

Reichweite=AvgRange/(SSP+1);

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

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

{

price=High[i2];

if(SsMax<Preis) SsMax=Preis;

price=Low[i2];

if(SsMin>=Preis) SsMin=Preis ;

}

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

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

val1[shift]=0;

val2[shift]=0;

if (Close[shift]<smin)

{

Aufwärtstrend = false;

}

wenn (Close[shift]>smax)

{

Aufwärtstrend = wahr;

}

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");

}

}

zurück(0);

}

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

Hallo, Pawlik!

Das ist die Version.

Original.

Versuchen Sie, den Code zu ziehen

pansa


Sr. Pansa! Warum wird der SRC-Button nicht zum Einfügen des Codes verwendet? 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:

Hallo, Pawlik!

Das ist die Version.

Original.

Versuchen Sie, den Code zu ziehen

pansa




Der Indikator funktioniert, aber der Entwickler hat einen logischen Fehler darin gemacht

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);
Dies ist das, was Roche meinte
 

ALLES KLAR?

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

ALLES KLAR?


Hallo Pawlik!

Ich habe Ihren Code installiert.

Es funktioniert perfekt!

Du bist ein großes Talent -

Du hast die Mauer durchbrochen!

Großartige Arbeit -

jetzt zuverlässige Signale und

♪ Neue Horizonte! ♪

Was für ein guter Tag heute!

Ich möchte mich besonders bei Integer bedanken.

Er hat das Drehbuch für den Spieleraufruf geschrieben!

Es gibt aber auch Talente und gute Menschen.

Hut ab vor Ihnen!

Heute ist der 9/11/14!

Panza

 
Andrei01:

Die meisten meiner Müllwarnungen werden aufgrund einer völlig legalen, korrekten und standardmäßigen Übergabe einer Variablen per Referenz in eine Funktion erzeugt, wenn der Name der Funktionsvorlage mit der Variablen selbst übereinstimmt, wie es in diesem Konstrukt in seiner standardmäßigen und typischen Verwendung sein sollte, wenn die Variable selbst mit ihrem eigenen Namen an die Funktion übergeben wird.

Nennen Sie bitte ein Beispiel.

Leider konnte der MC keine kompetente und logische Erklärung dafür geben, da es bei ähnlichen Namen manchmal zu Missverständnissen bei anderen Konstruktionen kommen kann.

Wenn ich den Fall richtig verstanden habe, war die Antwort sowohl logisch als auch richtig und wurde in mehr als ein paar Jahrzehnten kontinuierlicher Programmierung gelernt.


Entschuldigung für den versehentlich gelöschten Kommentar - ich habe auf die falsche Stelle geklickt und es gibt keine Funktion, um ihn wiederherzustellen.

 
Renat:

Nennen Sie mir bitte ein Beispiel.

Wenn ich den Fall richtig verstanden habe, war die Antwort sowohl logisch als auch richtig, und sie hat sich in mehr als zwei Jahrzehnten kontinuierlicher Programmierung bewährt.


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


Der Editor erzeugte die Warnung "Deklaration von 'a' versteckt globale Deklaration in Zeile 4" und "Deklaration von 'b' versteckt globale Deklaration in Zeile 4" für dieses standardmäßige, legale und populäre Konstrukt nach C-Sprachstandards, das auch von seinem Wesen her falsch und ungebildet ist, weil es weder die Deklaration einer neuen Variablen innerhalb einer Funktion noch irgendeinen Hinweis auf eine mögliche Variablenüberschneidung gibt.

Das Ergebnis sind Hunderte von unangemessenen Warnungen selbst in einem nicht allzu großen Programmcode.

 
Vinin:


Der Indikator funktioniert, aber der Entwickler hat einen logischen Fehler darin gemacht


Hallo Vinin!

Sie haben den Indikator überprüft: AltrTrend_Signal_v2_2.mq4

und fand einen logischen Fehler

in der Formel : SSP=MathCeil (Kperiod/iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_MAIN,1))

Sie haben die 1 am Ende unterstrichen

was sollte es Ihrer Meinung nach sein?

pansa