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

 
Rosh:
いいえ。
だから同時アクセスはできないんだ:(((;゜Д゜)))))))
 
Olegts:
そのため、同時アクセスはできません。

MT5で共有フラグを立てて開いたファイルは、MT4を含む他のプログラムでも利用することができます。

その様子はこちらで ご覧ください。

i.e. MT4で既にファイルが開かれている場合、Shaareフラグにより、MT5で問題なく開くことができます。MT4は通常通り動作しますが、MT5は既に開いているファイルを他のプログラムに使わせたり、他の人が開いているファイルをシャーレのフラグを立てずに開いたりすることが可能です。

 
Urain:

MT5で共有フラグを立てて開いたファイルは、MT4を含む他のプログラムでも利用することができます。

その様子はこちらで ご覧ください。

ありがとうございます、今見てみます...。
 
Olegts:
ありがとう、今見てみるよ...。
見てみると、MT5が書き込み、MT4が読み込むと動作しますが、MT4が書き込むと、MT5はファイルがブロックされているため読み込めません、少なくとも私の場合は動作しませんでした...。
 
データ型の説明のヘルプに書いてあります。
<br /> translate="no">。

このため、2つの実数を等しいかどうか比較することは、正しい比較ではないので、断じてお勧めできません。

そして、特別な比較方法が提案されています。

それでもなお、2つの実数が等しいかどうかを比較する必要がある場合は、...

しかし、そうすると、論理的な結論として、大小演算によっても実数を比較することは勧められない。なぜなら、そのような演算は、上記の意味で、チェックした値がマシンゼロの観点から等しくないことを特別な方法で最初に正しく証明したときにのみ、正しく行われるからである。

すなわち、実数に対する>と<の演算子も純粋には使えないことがわかった。正しく理解できたか、もしそうなら、ヘルプに対応するコメントを付ければいいのでは?


しかし、例えば>という演算が、不等号を正しくチェックした後にしか使えないとしたら、>=のチェックはどう整理すればいいのだろうか。アルゴリズムをさらに複雑にする必要があるのでしょうか?つまり、まず特殊な関数で等式をチェックし、次に不等式用の特殊な関数でチェックする(>を使う前に)必要があるのでしょうか?


もしかしたら、double型と float型の両方について、すべての比較ケースに対応したライブラリを既に開発されている方がいらっしゃるかもしれませんね。ダブルタイプのための何かをスケッチしてみたが、正しいかどうかわからない。

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на равенство двух вещественных чисел типа double
bool EqualDoubles(const double d1, const double d2)
   {  
      const double epsilon=2.2204460492503131 e-016;//DBL_EPSILON
      if(d1-d2>epsilon) return false;
      if(d1-d2<-epsilon) return false;
      return true;
   }
// Конец функции проверки на равенство двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на неравенство двух вещественных чисел типа double
bool NotEqualDoubles(const double d1, const double d2)
   {      
      return !EqualDoubles(d1, d2);
   }
// Конец функции проверки на неравенство двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на меньшинство первого из двух вещественных чисел типа double
bool LessDoubles(const double d1, const double d2)
   {  
      if (NotEqualDoubles(d1, d2)&&(d1<d2))
      {
         return true;
      }
      return false;
   }
// Конец функции проверки на меньшинство первого из двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на большинство первого из двух вещественных чисел типа double
bool GreaterDoubles(const double d1, const double d2)
   {  
      if (NotEqualDoubles(d1, d2)&&(d1>d2))
      {
         return true;
      }
      return false;
   }
// Конец функции проверки на большинство первого из двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на меньшинство первого или равенство двух вещественных чисел типа double
bool LessEqualDoubles(const double d1, const double d2)
   {  
      if (LessDoubles(d1, d2)||EqualDoubles(d1, d2))
      {
         return true;
      }
      return false;
   }
// Конец функции проверки на меньшинство первого или равенство двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на большинство первого или равенство двух вещественных чисел типа double
bool GreaterEqualDoubles(const double d1, const double d2)
   {  
      if (GreaterDoubles(d1, d2)||EqualDoubles(d1,d2))
      {
         return true;
      }
      return false;
   }
// Конец функции проверки на большинство первого или равенство двух вещественных чисел типа double

追伸:prevcalculated==0の場合、また通常通り動作します。フローティングバグ?

 

こんにちは。

トレーディングシグナルモジュールでカスタムインジケータを 使用したいのですが、どうすればよいですか?

このためには、私が理解する限り、例で行われているように、「collection of indicators(timeseries?) 」にこのインディケータ・オブジェクトへのポインタを追加する必要があります。

indicators.Add(GetPointer(m_MA)))

ここで、m_MA は CiMA クラスのオブジェクトである。

iCustom関数とIndicatorCreate関数は、作成したインジケータのハンドルの整数値を返しますが、私の理解では、このインジケータのオブジェクトが必要です。

どうか、この状況を打開する方法をアドバイスしてください。

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 
lVlaxim:

こんにちは。

トレーディングシグナルモジュールでカスタムインジケータを 使用する必要があります。

このためには、私が理解する限り、例で行われているように、このインディケータ・オブジェクトへのポインタを「collection of indicators(timeseries?) 」に追加する必要があるのです。

ここで、m_MA は CiMA クラスのオブジェクトである。

iCustom関数とIndicatorCreate関数は、作成したインジケータのハンドルの整数値を返しますが、私の理解では、このインジケータのオブジェクトが必要です。

どうか、この状況を打開する方法をアドバイスしてください。

私が理解する限り、CiCustomを ベースに独自のインジケータオブジェクトを書くべきです(CiMAがどのように書かれているかと同様です)。

私はインデックに携わったことがないので、詳しいことはアドバイスできませんが、きっと理解したり、正しい認識を教えてくれる人がいると思います。

追記

ところで、開発者の皆さん、CiCustomの コーナーにサンプルを追加してください...。

 
-Alexey-:

そして、特別な比較方法が提案されています。

しかし、そうなると、論理的には、大小演算によっても実数の比較は推奨されないことになる。なぜなら、そのような演算は、上記の意味で、チェックする値が機械ゼロの意味で等しくないことが、特別な方法であらかじめ正しく立証されている場合にのみ、正しい演算となるからである。

私の理解が足りないのかもしれませんが、例えば2つの実数を「<」演算で比較する場合、チェックする実数が「マシンゼロの意味で等しい」場合、「<」演算は単に偽を返せばよいのです。つまり、「第一の実数は第二の実数より小さくない」という意味だ。
 
lVlaxim:

こんにちは。

トレーディングシグナルモジュールでカスタムインジケータを 使用したいのですが、どうすればよいですか?

このためには、私が理解する限り、例で行われているように、「collection of indicators(timeseries?) 」にこのインディケータ・オブジェクトへのポインタを追加する必要があります。

ここで、m_MA は CiMA クラスのオブジェクトである。

iCustom関数とIndicatorCreate関数は、作成したインジケータのハンドルの整数値を返しますが、私の理解では、このインジケータのオブジェクトが必要です。

この状況を打開する方法をアドバイスしていただけませんか?

とりあえず、このファイルを例にとって説明します。

CSignalCustomMACDクラスは、CSignalMACDと全く同じですが、標準配布のインジケータの「カスタム」バージョンをベースにしているという点が異なります。

Expert Advisorのソースコードに一行追加することを忘れないでください。

#property tester_indicator "Examples\MACD.ex5"

でないと、テスターで動作しません。

IndicatorsExamplesフォルダにMACD.ex5ファイルがない場合、インジケーターをコンパイルする必要があります。

ヘルプの例は近日中に追加する予定です。

ファイル:
 
Yedelkin:
問題がよく分かっていないのかもしれませんが、例えば2つの実数を「<」演算で比較する場合、チェックする実数が「マシンゼロの意味で等しい」場合、「<」演算は偽を返すだけで、それで終わりなのです。つまり、「第一の実数は第二の実数より小さくない」という意味になる。
これは論理的なものでしょうが、今は操作の">"("<" はチェックしませんでした) は、"マシンゼロの意味で等しい" 数に対して真を返すかもしれません。この効果により数値計算の結果が理論上可能な値よりも大きくなっていたため検出されましたが、上記の特殊な関数を使用した後は真となりました。そこで、ヘルプの追加を提案します。