Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 159

 
hoz:

Es gibt eine Funktion. Hier sind seine Anfänge:

Das ist der Kern der Sache. Der zweite formale Parameter der Funktion hat einen Standardwert von 0. Der Dokumentation zufolge kann ich diese Funktion also ohne den zweiten Parameter aufrufen, da dieser standardmäßig auf 0 gesetzt wird.

Ich nenne es so:

Der Compiler runzelt die Stirn:

Und warum?

Verschieben Sie es von der Bibliothek in den Was-du-tust-Code. Wenn der Fehler verschwindet, bedeutet das, dass es ein Problem mit der korrekten Bibliotheksverbindung im wha-tam-do Code gibt. Zuallererst.

Wenn das Problem nicht verschwindet, schauen Sie nach, welche Parameter an die Funktion übergeben werden. Im Idealfall sollte es einen Parameter vom Typ String mit dem Namen des Währungspaares geben. Übergeben Sie einfach Symbol()

 
artmedia70:

Verschieben Sie ihn von der Bibliothek in den Wha-tam-do-Code. Wenn der Fehler verschwindet, bedeutet dies, dass es ein Problem mit der korrekten Bibliotheksverbindung im Was-ich-tue-Code gibt. Zuallererst.

Wenn das Problem nicht verschwindet, schauen Sie nach, welche Parameter an die Funktion übergeben werden. In der Idee sollte ein Parameter vom Typ String mit dem Namen des Währungspaares vorhanden sein. Übergeben Sie einfach Symbol().



Das hilft wirklich. Ich werde darüber nachdenken.

Das ist so seltsam. Warum sollte ich in der Bibliothek nachsehen, wenn die Übergabe der Parameter korrekt ist? Der Fehler ist deutlich geschrieben. Oder gibt es nichts Bestimmtes? Ich wünschte nur, ich wüsste, was nötig war.

Diese Funktion ist geliehen, daher stelle ich sie mit den Kontakten des Autors ein:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем торговую информацию по символу                                    |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0)
{
//----
         if (fs_Symbol != bs_Symbol || fi_Ticket < 0)
         {
                  if (fi_Ticket > 0)
                  {
                     bs_Symbol = OrderSymbol();
                  }
                  else
                  {
                     bs_Symbol = fs_Symbol;
                  }
                  if (bs_Symbol == Symbol())
                  {
                      bi_SymDigits = Digits;
                      bd_SymPoint = Point;
                  }
                  else
                  {
                      bi_SymDigits = MarketInfo (fs_Symbol, MODE_DIGITS);
                      bd_SymPoint = MarketInfo (fs_Symbol, MODE_POINT);
                  }
        if (bd_SymPoint == 0.0)
        {
           bd_SymPoint = fGet_Point (fs_Symbol);
        }
                  bd_ProfitMIN = NDP (ProfitMIN_Pips);
         }
         if (fi_Ticket > 0)
         {
            fGet_OrderDetails (fi_Ticket);
         }
    //---- Получаем текущие цены по инструменту
    RefreshRates();
    bda_Price[0] = NDD (fGet_TradePrice (0, bb_RealTrade, bs_Symbol));
    bda_Price[1] = NDD (fGet_TradePrice (1, bb_RealTrade, bs_Symbol));
    bd_Spread = NDD (bda_Price[1] - bda_Price[0]);
//----
}

So habe ich es importiert:

#import "hoz_Base@Library.ex4"
    double ND (double v);
    string DToS (double v);
    string DToSByLots (double v);
    void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0);
#import

Die Aufforderung lautet nun wie folgt:

fGet_MarketInfo (fs_Symbol);

Wie kann man solche Probleme lösen?

 
hoz: Wie werden solche Probleme gelöst?

Studieren Sie die Dokumentation. Kompilierte Bibliotheken übergeben standardmäßig keine Parameter - Sie müssen ALLE Parameter übergeben, wenn Sie eine Funktion aufrufen. Lesen Sie es sorgfältig. Auszug:

Da die importierten Funktionen außerhalb des zu kompilierenden Moduls liegen, kann der Compiler nicht überprüfen, ob die übergebenen Parameter korrekt sind. Daher muss die Zusammensetzung und Reihenfolge der an importierte Funktionen übergebenen Parameter genau beschrieben werden, um Laufzeitfehler zu vermeiden. Parameter, die an importierte Funktionen (sowohl von EX4- als auch von DLL-Modulen) übergeben werden, können keine Standardwerte haben.
 
TarasBY:

An kompilierte Bibliotheken werden keine Standardparameter übergeben - Sie müssen ALLE Parameter übergeben, wenn Sie eine Funktion aufrufen. Lesen Sie es sorgfältig. Auszug:

Da die importierten Funktionen außerhalb des zu kompilierenden Moduls liegen, kann der Compiler nicht überprüfen, ob die übergebenen Parameter korrekt sind. Daher muss die Zusammensetzung und Reihenfolge der an importierte Funktionen übergebenen Parameter genau beschrieben werden, um Laufzeitfehler zu vermeiden. Parameter, die an importierte Funktionen (sowohl von EX4- als auch von DLL-Modulen) übergeben werden, können keine Standardwerte haben.

Ah, das ist es. Lebe und lerne! Danke, das werde ich im Hinterkopf behalten.
 

Wenn wir die Optimierung in MT4 durchführen, müssen wir auf der Registerkarte "Optimierungsergebnisse" Informationen über einen Durchgang erhalten, die denen eines einzelnen Durchgangs auf der Registerkarte "Bericht" ähneln.

Wie kann dies umgesetzt werden?

 

Ich beschloss, mich mit der Bibliothek vertraut zu machen. Ich habe einen Teil des Codes aus meinem Indikator genommen und ihn in die Funktion eingefügt, und ich habe diese Funktion multipliziert und in zwei Bibliotheksdateien eingefügt.

Ich habe die erste Datei "indi.mqh" und die zweite einfach "djo.mq4" genannt.

int countbars(int& hist, int obrax, bool tikk)
{ 
 int z=0;
 static int PreBars=0; 
 static datetime BarTime=0;
 if (Bars == PreBars && tikk==false)return(-1);
 if (Bars < hist+obrax)  
 {
  if (Bars-obrax<=1) {Alert (" Недостатьньо історії");return(-1);}
  hist=Bars-obrax;
 }
 
 if (Bars-PreBars == 0 && BarTime==Time[0] && tikk==true) return(0);
 else  
 {
  if (Bars-PreBars == 1 && BarTime==Time[1]) z=1;
  else  z=hist;
 }
 PreBars = Bars;  
 BarTime=Time[0];
 return (z);
}

Auf den Punkt gebracht: Bei der ersten funktioniert alles wie geplant;

 include <indi.mqh>

wenn die erste durch die zweite ersetzt wird und der Zugriff auf die zweite durch eine Methode erfolgt:

#import "djo.ex4"  int countbars(int& hist, int obrax, bool tikk);  #import

Aber nichts funktioniert, nicht einmal Benachrichtigungen - nach dem Start nicht mehr. Und gerade jetzt und das Terminal schloss sich selbst ))

Ich vermute, dass alle Konstanten bei jedem Zugriff auf die importierte Funktion neu initialisiert werden?

Wo kann ich über den mql4-Import im Detail nachlesen, welche Bugs entweder behoben sind oder nicht und so weiter?

Danke, ich werde schlafen gehen............

 
ALXIMIKS:

Ich beschloss, mich mit der Bibliothek vertraut zu machen. Ich habe einen Teil des Codes aus meinem Indikator genommen und ihn in die Funktion eingefügt, und ich habe diese Funktion multipliziert und in zwei Bibliotheksdateien eingefügt.

Ich habe die erste Datei "indi.mqh" und die zweite einfach "djo.mq4" genannt.

Auf den Punkt gebracht: Bei der ersten funktioniert alles wie geplant;

wenn die erste durch die zweite ersetzt wird und der Zugriff auf die zweite durch eine Methode erfolgt:

Aber nichts funktioniert, nicht einmal Benachrichtigungen - nach dem Start nicht mehr. Und gerade jetzt und das Terminal schloss sich selbst ))

Ich vermute, dass alle Konstanten bei jedem Zugriff auf die importierte Funktion neu initialisiert werden?

Wo kann ich über den mql4-Import im Detail nachlesen, welche Bugs entweder behoben sind oder nicht und so weiter?

Danke, ich werde schlafen gehen............

Es ist möglich, Parameter per Referenz zu übergeben. In diesem Fall wirkt sich die Änderung solcher Parameter auf die entsprechenden Variablen in der aufgerufenen Funktion aus, die als Referenz übergeben wird. Sie können Elemente von Arrays nicht per Referenz übergeben. Parameter können nur innerhalb der Grenzen eines einzelnen Moduls per Referenz übergeben werden, für Bibliotheksfunktionen ist eine solche Möglichkeit nicht vorgesehen. Um anzugeben, dass der Parameter als Referenz übergeben wird, muss der Modifikator & hinter dem Datentyp stehen. Und hier noch ein paar weitere Experimente.
 
Ich erhalte eine akustische Meldung, wenn ich zwei gleitende Durchschnittswerte überschreite. Beim Öffnen wird diese Tonbotschaft so oft wiederholt, wie es in der Geschichte Kreuzungen gegeben hat. Frage. Wie kann ich erreichen, dass nur für die Signale, die in der Gegenwart erzeugt wurden, eine Meldung ausgegeben wird? Das heißt, nur zu der Zeit und dem Signal, das buchstäblich in diesem Moment empfangen wurde...
 
Zolotai:
Ich erhalte eine akustische Meldung, wenn ich zwei gleitende Durchschnittswerte überschreite. Beim Öffnen wird diese Tonbotschaft so oft wiederholt, wie es in der Geschichte Kreuzungen gegeben hat. Frage. Wie kann ich erreichen, dass nur für die Signale, die in der Gegenwart erzeugt wurden, eine Meldung ausgegeben wird? Das heißt, nur zu der Zeit und dem Signal, das buchstäblich in diesem Moment empfangen wurde...
Bei der Eröffnung von was? Es fühlt sich wie ein Indikator an. Es gibt viele Lösungen. Es hängt alles vom Code ab.
 
artmedia70:
Wann wird was geöffnet? Es fühlt sich wie ein Indikator an. Es gibt viele Lösungen. Es hängt alles vom Code ab.


Das hat nichts mit dem Code zu tun. Ich brauche nur die richtige Bedingung. Die Frage ist, ob es eine Möglichkeit gibt, die Zeit des aktuellen Taktes zu erfahren? Woher kenne ich überhaupt die Uhrzeit der Bar?