Fehler, Irrtümer, Fragen - Seite 1261

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Die mobilen Anwendungen MetaTrader 4 und MetaTrader 5 für Android wurden aktualisiert

pav36krs, 2014.12.20 10:21

Meine Freunde helfen!!! Ich habe Metatrader heruntergeladen, und er startet nicht in 32 Bit auf meinem 64 Bit Windows. Das ist das erste Mal, dass ich auf ein solches Problem gestoßen bin, bevor ich Metatrader von alpha forex installiert habe, und es hat alles gut funktioniert.

 

Fehler bei bitweisen Operationen.

Print(int(1)<<34);

Wir erhalten 4, was 0 sein sollte. Wie viele Jahre MT-Polieren und immer noch solche Fehler.

 

Und was, der Compiler hat diesen Offset nicht abgeschworen? Das bezweifle ich.

Jedenfalls ist es das, was wir wollten.

00000000000000000000000000000001 << 34
00000000000000000000000000000100
 
GVladimir:

Und was, der Compiler hat diesen Offset nicht abgeschworen? Das bezweifle ich.

Jedenfalls ist es das, was wir wollten.

Offensichtlich wissen Sie nicht genau, wie Bitverschiebungen funktionieren. In den Bits niederer Ordnung kann nichts passieren. Im Zweifelsfall hilft Ihnen C++.
 
meat:
In den niederwertigen Bits kann dort nichts vorkommen.
In MQL sind, glaube ich, alle Bitverschiebungen als zyklisch (ROL/ROR) implementiert (was Sie wahrscheinlich nicht wissen, weil weder C noch C++ sie haben), nur für solche Situationen
 
GVladimir:
Ich glaube, in MQL sind alle Bitverschiebungen als zyklische Verschiebungen (ROL/ROR) implementiert (die Sie wahrscheinlich nicht kennen, weil weder C noch C++ sie haben), nur für solche Situationen

In der MQL-Dokumentation steht nichts über eine zyklische Verschiebung, also wird die übliche Verschiebung angenommen. Aber ich habe dort den folgenden Satz gefunden

Es wird nicht empfohlen, mehr oder die gleiche Anzahl von Bits zu verschieben als die Anzahl der Bits in der zu verschiebenden Variablen, da das Ergebnis dieser Operation undefiniert ist.

Dies ist falsch. Bei bitweisen Operationen kann es kein undefiniertes Ergebnis geben. Es ist nur so, dass das abgehende Bit entweder in einem speziellen Flag gespeichert wird oder nicht, was aber keine Auswirkung auf den Verschiebealgorithmus hat, d.h. die rechten Bits werden sowieso mit Nullen aufgefüllt. Wenn es sich um eine zyklische Verschiebung handelt, muss dies explizit angegeben werden (obwohl eine normale C++-kompatible Verschiebung korrekter wäre).

 

Ist es möglich, einen mit dem alten Build kompilierten Indikator als Ressource mit einem anderen Indikator zu verbinden?

Ich kann es so nicht zum Laufen bringen:

........ 

#resource "\\Indicators\\тфьу.ex4"

........ 

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

........ 

ExtLimeBuffer[i]=iCustom(_Symbol,0,"::Indicators\\тьфу.ex4",pr1,pr2,pr3,pr4,pr5,pr6,pr7,2,i);

........ 

  return(rates_total);

}


 

sagt der Compiler dies:

unknown resource type 'C:\Program Files\MT4\MQL4\Indicators\тфьу.ex4' тфьу1.mq4 10 1

 

 


 
meat:

In der MQL-Dokumentation steht nichts über eine zyklische Verschiebung, also wird eine normale Verschiebung angenommen. Allerdings habe ich dort einen solchen Satz gefunden:

Dies ist falsch. Bei bitweisen Operationen kann es kein undefiniertes Ergebnis geben. Es ist nur so, dass das abgehende Bit entweder in einem speziellen Flag gespeichert wird oder nicht, aber das hat keinen Einfluss auf den Verschiebungsalgorithmus, d.h. die rechten Bits werden sowieso mit Nullen aufgefüllt. Wenn es sich um eine zyklische Verschiebung handelt, muss man das explizit angeben (obwohl eine plain++-kompatible Verschiebung korrekter wäre).

Das mag sein.

Maximal 5 Bits bei 32-Bit-Ganzzahlen (bzw. 6 Bits bei 64-Bit-Ganzzahlen) dürfen an Verschiebeoperationen beteiligt sein. Wenn ein Verschiebungswert mehr als 5 (oder 6) Bits benötigt, behandeln verschiedene Prozessoren diese Situation unterschiedlich. In der Dokumentation haben wir diese Tatsache nur dadurch berücksichtigt, dass wir sagen, dass das Ergebnis der Operation undefiniert ist.

Документация по MQL5: Торговые функции / OrderCalcProfit
Документация по MQL5: Торговые функции / OrderCalcProfit
  • www.mql5.com
Торговые функции / OrderCalcProfit - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
sanyooooook:

...
schreibt der Compiler wie folgt:

unknown resource type 'C:\Program Files\MT4\MQL4\Indicators\тфьу.ex4' тфьу1.mq4 10 1

Offenbar ist der Compiler schlauer als er aussieht. Er möchte den Quellcode von tfu1.mq4 finden und ihn dann als Ressource anhängen.