//++++++++++++++++++++++++++++++++++++++++++++++++++++++++// Функция проверки на равенство двух вещественных чисел типа doublebool EqualDoubles(constdouble d1, constdouble d2)
{
constdouble epsilon=2.2204460492503131 e-016;//DBL_EPSILONif(d1-d2>epsilon) returnfalse;
if(d1-d2<-epsilon) returnfalse;
returntrue;
}
// Конец функции проверки на равенство двух вещественных чисел типа double//+++++++++++++++++++++++++++++++++++++++++++++++++// Функция проверки на неравенство двух вещественных чисел типа doublebool NotEqualDoubles(constdouble d1, constdouble d2)
{
return !EqualDoubles(d1, d2);
}
// Конец функции проверки на неравенство двух вещественных чисел типа double//+++++++++++++++++++++++++++++++++++++++++++++++++// Функция проверки на меньшинство первого из двух вещественных чисел типа doublebool LessDoubles(constdouble d1, constdouble d2)
{
if (NotEqualDoubles(d1, d2)&&(d1<d2))
{
returntrue;
}
returnfalse;
}
// Конец функции проверки на меньшинство первого из двух вещественных чисел типа double//+++++++++++++++++++++++++++++++++++++++++++++++++// Функция проверки на большинство первого из двух вещественных чисел типа doublebool GreaterDoubles(constdouble d1, constdouble d2)
{
if (NotEqualDoubles(d1, d2)&&(d1>d2))
{
returntrue;
}
returnfalse;
}
// Конец функции проверки на большинство первого из двух вещественных чисел типа double//+++++++++++++++++++++++++++++++++++++++++++++++++// Функция проверки на меньшинство первого или равенство двух вещественных чисел типа doublebool LessEqualDoubles(constdouble d1, constdouble d2)
{
if (LessDoubles(d1, d2)||EqualDoubles(d1, d2))
{
returntrue;
}
returnfalse;
}
// Конец функции проверки на меньшинство первого или равенство двух вещественных чисел типа double//+++++++++++++++++++++++++++++++++++++++++++++++++// Функция проверки на большинство первого или равенство двух вещественных чисел типа doublebool GreaterEqualDoubles(constdouble d1, constdouble d2)
{
if (GreaterDoubles(d1, d2)||EqualDoubles(d1,d2))
{
returntrue;
}
returnfalse;
}
// Конец функции проверки на большинство первого или равенство двух вещественных чисел типа double
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
いいえ。
そのため、同時アクセスはできません。
MT5で共有フラグを立てて開いたファイルは、MT4を含む他のプログラムでも利用することができます。
その様子はこちらで ご覧ください。
i.e. MT4で既にファイルが開かれている場合、Shaareフラグにより、MT5で問題なく開くことができます。MT4は通常通り動作しますが、MT5は既に開いているファイルを他のプログラムに使わせたり、他の人が開いているファイルをシャーレのフラグを立てずに開いたりすることが可能です。
MT5で共有フラグを立てて開いたファイルは、MT4を含む他のプログラムでも利用することができます。
その様子はこちらで ご覧ください。
ありがとう、今見てみるよ...。
このため、2つの実数を等しいかどうか比較することは、正しい比較ではないので、断じてお勧めできません。
そして、特別な比較方法が提案されています。
それでもなお、2つの実数が等しいかどうかを比較する必要がある場合は、...
しかし、そうすると、論理的な結論として、大小演算によっても実数を比較することは勧められない。なぜなら、そのような演算は、上記の意味で、チェックした値がマシンゼロの観点から等しくないことを特別な方法で最初に正しく証明したときにのみ、正しく行われるからである。
すなわち、実数に対する>と<の演算子も純粋には使えないことがわかった。正しく理解できたか、もしそうなら、ヘルプに対応するコメントを付ければいいのでは?
しかし、例えば>という演算が、不等号を正しくチェックした後にしか使えないとしたら、>=のチェックはどう整理すればいいのだろうか。アルゴリズムをさらに複雑にする必要があるのでしょうか?つまり、まず特殊な関数で等式をチェックし、次に不等式用の特殊な関数でチェックする(>を使う前に)必要があるのでしょうか?
もしかしたら、double型と float型の両方について、すべての比較ケースに対応したライブラリを既に開発されている方がいらっしゃるかもしれませんね。ダブルタイプのための何かをスケッチしてみたが、正しいかどうかわからない。
追伸:prevcalculated==0の場合、また通常通り動作します。フローティングバグ?
こんにちは。
トレーディングシグナルモジュールでカスタムインジケータを 使用したいのですが、どうすればよいですか?
このためには、私が理解する限り、例で行われているように、「collection of indicators(timeseries?) 」にこのインディケータ・オブジェクトへのポインタを追加する必要があります。
indicators.Add(GetPointer(m_MA)))
ここで、m_MA は CiMA クラスのオブジェクトである。
iCustom関数とIndicatorCreate関数は、作成したインジケータのハンドルの整数値を返しますが、私の理解では、このインジケータのオブジェクトが必要です。
どうか、この状況を打開する方法をアドバイスしてください。
こんにちは。
トレーディングシグナルモジュールでカスタムインジケータを 使用する必要があります。
このためには、私が理解する限り、例で行われているように、このインディケータ・オブジェクトへのポインタを「collection of indicators(timeseries?) 」に追加する必要があるのです。
ここで、m_MA は CiMA クラスのオブジェクトである。
iCustom関数とIndicatorCreate関数は、作成したインジケータのハンドルの整数値を返しますが、私の理解では、このインジケータのオブジェクトが必要です。
どうか、この状況を打開する方法をアドバイスしてください。
私が理解する限り、CiCustomを ベースに独自のインジケータオブジェクトを書くべきです(CiMAがどのように書かれているかと同様です)。
私はインデックに携わったことがないので、詳しいことはアドバイスできませんが、きっと理解したり、正しい認識を教えてくれる人がいると思います。
追記
ところで、開発者の皆さん、CiCustomの コーナーにサンプルを追加してください...。
そして、特別な比較方法が提案されています。
しかし、そうなると、論理的には、大小演算によっても実数の比較は推奨されないことになる。なぜなら、そのような演算は、上記の意味で、チェックする値が機械ゼロの意味で等しくないことが、特別な方法であらかじめ正しく立証されている場合にのみ、正しい演算となるからである。
こんにちは。
トレーディングシグナルモジュールでカスタムインジケータを 使用したいのですが、どうすればよいですか?
このためには、私が理解する限り、例で行われているように、「collection of indicators(timeseries?) 」にこのインディケータ・オブジェクトへのポインタを追加する必要があります。
ここで、m_MA は CiMA クラスのオブジェクトである。
iCustom関数とIndicatorCreate関数は、作成したインジケータのハンドルの整数値を返しますが、私の理解では、このインジケータのオブジェクトが必要です。
この状況を打開する方法をアドバイスしていただけませんか?
とりあえず、このファイルを例にとって説明します。
CSignalCustomMACDクラスは、CSignalMACDと全く同じですが、標準配布のインジケータの「カスタム」バージョンをベースにしているという点が異なります。
Expert Advisorのソースコードに一行追加することを忘れないでください。
#property tester_indicator "Examples\MACD.ex5"
でないと、テスターで動作しません。
IndicatorsExamplesフォルダにMACD.ex5ファイルがない場合、インジケーターをコンパイルする必要があります。
ヘルプの例は近日中に追加する予定です。
問題がよく分かっていないのかもしれませんが、例えば2つの実数を「<」演算で比較する場合、チェックする実数が「マシンゼロの意味で等しい」場合、「<」演算は偽を返すだけで、それで終わりなのです。つまり、「第一の実数は第二の実数より小さくない」という意味になる。