エラー、バグ、質問 - ページ 1261

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

MetaTrader 4およびMetaTrader 5のAndroid向けモバイルアプリケーションを更新しました。

pav36krs, 2014.12.20 10:21

友達が助けてくれる!!!メタトレーダーをダウンロードしたのですが、64bitのWindowsで32bitで起動しません。 アルファフォレックスからメタトレーダーをインストールする前にこのような問題に遭遇したのは初めてで、すべて問題なく動作していました。

 

ビット演算のエラー。

Print(int(1)<<34);

MTを何年も磨いてきて、まだこんな失態があるのか。

 

コンパイラは、このオフセットに悪態をつかなかったのか?そうでしょうか。

とにかく、それが私たちの望みでした。

00000000000000000000000000000001 << 34
00000000000000000000000000000100
 
GVladimir:

コンパイラは、このオフセットに悪態をつかなかったのか?そうでしょうか。

とにかく、それが私たちの望みでした。

あなたは明らかにビットシフトの仕組みをよく知らない。 そこでは低次のビットでは何も起こりえない。 疑問があれば、C++があなたの助けになる。
 
meat:
そこでは、低次のビットでは何も起こり得ない。
MQLでは、すべてのビットシフトは巡回型(ROL/ROR)として実装されていると思います。(CにもC++にもないので、おそらくあなたは知らないでしょう)このような状況のためです。
 
GVladimir:
MQLでは、すべてのビットシフトは巡回シフト(ROL/ROR)として実装されていると思います(CにもC++にもないので、おそらくご存じないでしょう)このような状況のために

MQLのドキュメントには周期的なシフトについて何も書かれていないので、通常のシフトを想定しています。しかし、そこに次のようなフレーズがあるのを発見しました。

シフトされる変数のビット数より多いか同数のビットをシフトすることは、この操作の結果が不定であるため、推奨されません。

これは誤りです。ビット演算で未定義の結果はありえない。出発ビットが特別なフラグに格納されるか、格納されないかだけで、シフトアルゴリズムには何の影響もありません、つまり、右ビットはとにかくゼロで埋められます。 周期シフトであれば、これを明示する必要があります(通常のC++互換シフトの方が正しいのですが...)。

 

は、旧ビルドでコンパイルしたインディケータをリソースとして他のインディケータに接続することは可能でしょうか?

このままではうまくいかない。

........ 

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

}


 

は、コンパイラがこう言っている。

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

 

 


 
meat:

MQLのドキュメントには周期的なシフトについて何も書かれていないので、通常のシフトを想定しています。ところが、そこにそんなフレーズがあったのです。

これは誤りです。ビット演算で未定義の結果はありえない。出発ビットが特別なフラグに格納されるか、格納されないかだけで、シフトアルゴリズムには影響しない、つまり右ビットはとにかくゼロで埋められる。 循環シフトなら明示的に指定する必要がある(plain++互換シフトならもっと正しいが)。

そうかもしれませんね。

32 ビット整数の場合は最大 5 ビット(64 ビット整数の場合は最大 6 ビット) がシフト操作に関与している必要がある。シフト値が5ビット(または6ビット)以上必要な場合、プロセッサによってその扱いが異なります。ドキュメントでは、操作の結果が 未定義であることを示すことで、この事実を反映させただけです。

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

...
と書くと、コンパイラはこのように書きます。

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

どうやらコンパイラは見た目より賢いようです。tfu1.mq4 のソースコードを見つけて、それをリソースとして添付したいのです。