Fehler, Irrtümer, Fragen - Seite 1812

 
Sergei Vladimirov:

"Herr Doktor, ich habe etwas, das weh tut!" © )

Nennen Sie mir ein Beispiel für einen solchen Ausdruck. Ein reproduzierbares Ergebnis. Dann werden Sie etwas sagen können.

ulong PackMagic(int bs, int type, int frac, int ll)//bs=0 - sell, bs=1 - buy (в смысле ll), type - это тип FPST
     {
        int d1;
        ulong i, frac1=frac, ll1=ll, type1=type;
        
        i=1; d1=10;
        while (ll>=d1) {d1=d1*10; i=i+1;}
              
        if (type==0 || type==2) return (frac1+ll1*Pow10frac_length+i*Pow10(frac_length+i)+
         type1*Pow10(frac_length+i+1)+bs*Pow10(frac_length+i+2)+Id1_class*Pow10(frac_length+i+3));
        else return(ll1+i*Pow10(i)+type1*Pow10(i+1)+bs*Pow10(i+2)+Id1_class*Pow10(i+3));
     }    
    
     ulong Pow10(ulong power) // power>0
     {
        ulong r=10;
        if (power==0) return 1;
        for (ulong i=2; i<=power; i++) r=r*10;
        return r;
     }

Das Problem liegt in der Funktion PackMagic. externe Variablen int frac_length=2; int Pow10frac_length=100; int Id1_class=1;.

 
Sergey Kudryavtsev:
Das Problem liegt in der Funktion PackMagic. externe Variablen int frac_length=2; int Pow10frac_length=100;.
Sie haben kein Beispiel für den Fehler angegeben. Bei welchen Argumenten gibt diese Funktion den falschen Wert zurück (welchen?) und was sollte das richtige Ergebnis sein?
 
Sergei Vladimirov:
Sie haben kein Beispiel für einen Fehler genannt. Bei welchen Werten der Argumente gibt die Funktion den falschen Wert zurück (welchen?) und was sollte das richtige Ergebnis sein?

Zum Beispiel:

Id1_class=1, bs=0, type=0, frac=99, ll=1, frac_length=2, Pow10frac_length=100, return ergab 11299.

Sie sollte 1001199 lauten. In Expert, Funktionen im Unterricht, Demokonto in Open.

Es ist keine Tatsache, dass im Falle eines Fehlers immer 11299 zurückgegeben wird.

 
Nicht reproduzierbar. Mit diesen Parametern liefert die Funktion stabil 1001199. Auch in der Funktion selbst gibt es keine Fehler. Es gibt also nichts zu sagen. Höchstwahrscheinlich liegt das Problem in Ihrem Expert Advisor nicht in dieser Funktion, sondern an einer anderen Stelle: Die Werte der an die Funktion übergebenen Parameter unterscheiden sich von denen, die Sie erwarten. Dementsprechend ist das Ergebnis ein anderes als das erwartete.
 

Es wird gespielt. Ich habe Ihren Code in ein Skript geschrieben, das den korrekten Wert (1001199) liefert, wenn es im Debug-Modus ausgeführt wird, aber wenn ich die Version kompiliere und sie im MT5-Baum ausführe, liefert sie ständig 11199. Ich konnte das Problem lokalisieren, hier ist der reproduzierende Code:

int frac_length = 2;

void OnStart()
{
        
        ulong i = 1;

        ulong a1 = Pow10(frac_length + i);
        ulong a2 = Pow10(frac_length + i + 1);
        ulong a3 = Pow10(frac_length + i + 2);
        ulong a4 = Pow10(frac_length + i + 3);
        
        Print(IntegerToString(a1), " ", IntegerToString(a2), " ", IntegerToString(a3), " ", IntegerToString(a4));

}  

ulong Pow10(const ulong power)
{
        ulong r = 10;
        
        if (power == 0)
                return 1;
                
        for (ulong i = 2; i <= power; i++)
                r = r*10;
                
        return r;
}

Im Debug-Modus funktioniert es korrekt. Aber beim Start der Freigabe aus dem Navigator in MT5 wird entweder Unsinn produziert ("1000 10000 100 100 100" statt "1000 10000 100000 1000000") oder MT5 hängt sich bei Volllast eines der Kerne des Prozessors auf.

Es gibt zwei Möglichkeiten, dies zu beheben. Auf eine der beiden Arten:

        ulong a1 = Pow10(frac_length + i);
        ulong a2 = Pow10(frac_length + i + (ulong)1);
        ulong a3 = Pow10(frac_length + i + (ulong)2);
        ulong a4 = Pow10(frac_length + i + (ulong)3);

Entweder durch Verschieben der globalen Variable frac_length innerhalb der Funktion Start().

Es handelt sich in der Tat um einen Compiler-Bug, schreiben Sie an den Service Desk.

 
MT4 begann, 1,8 Gigabyte (RAM) zu wiegen. Es hat die ganze UPU aufgefressen, das zweite Terminal kann nicht richtig eingeschaltet werden. Können Sie mir sagen, wie ich den Arbeitsspeicher von MT "reinigen" kann?
 

Wenn Sie den Mauszeiger über eine gerade veröffentlichte eigene Bewertung für ein Marktprodukt bewegen, werden mehrere Vorschläge/Aktionen angezeigt. Wenn Sie "Bearbeiten" wählen und die Bewertung ändern, wird nach dem Klicken auf "Aktualisieren" der Fehler "Keine Rechte" angezeigt.

Antrag an die SR kann nicht erstellt werden - Esist ein Fehler aufgetreten.

 
fxsaber:
Wenn Sie den Mauszeiger über eine gerade veröffentlichte eigene Bewertung für ein Marktprodukt bewegen, werden mehrere Vorschläge/Aktionen angezeigt. Wenn Sie "Bearbeiten" wählen und die Bewertung ändern, erscheint der Fehler "Keine Rechte", nachdem Sie auf "Aktualisieren" geklickt haben.

Bitte geben Sie den Namen und die Version Ihres Browsers an.
Unter Chrome 56.0.2924.87 funktioniert der Flug einwandfrei, sowohl mit als auch ohne manuelles Aktualisieren der Überprüfungsseite.

 
fxsaber:

Antrag an die SR kann nicht erstellt werden - Esist ein Fehler aufgetreten.

Ich sehe, Sie müssen die Cookies für www.mql5.com löschen.
Offenbar wurden die Grundsätze der Anti-CSRF-Token-Prüfung aktualisiert.

In Chrome können Sie dies folgendermaßen tun:
Drücken Sie F12 während Sie auf www.mql5.com sind => im Dashboard gehen Sie auf Anwendung => Cookies => klicken Sie auf Cookies => alle löschen von...
 
Sergey Dzyublik:

Bitte geben Sie den Namen und die Version Ihres Browsers an.
Unter Chrome 56.0.2924.87 funktioniert der Flug einwandfrei, sowohl mit als auch ohne manuelles Aktualisieren der Überprüfungsseite.

Portable ChromeVersion 45.0.2454.85 + Fregatte.