[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 212

 
2つのMAがチャート上で何度も交差しています。最後のMAの交差の後は機能しますが、すべてのMAの 交差の後はしません。
 
MK07:
もし、すべてのMAクロス後のバー数を確認したいのであれば、最後のバー数の後に計算することはできますが、すべてのバー数の後に計算することはできません。

何に使うかにもよりますが。EAの場合はあるアルゴリズム、インジケーターの場合は別のアルゴリズム。

一般に、おおよそ次のようになる。交差の回数を格納する変数を作成しよう。Intersection_UP Intersection_DN のように、up 用と down 用の 2 つの変数を作成することができます。

ループの前に、それらをゼロで初期化する。

最初のバーからBarsまでの ループを作成 : for (int i=1; i<Bars; i++) { // ループ本体で交点をカウント ...}.

バーi 上の各交差点で下からma1がma2が増加Intersection_UP、バー i 上の各交差点で上からma1がma2が増加 Intersection_DN

サイクルの終わりには、上下の交差の回数を2つの変数で得ることができます。それらを足し合わせて、交差点の総数を求めます

 
MK07:
2つのMAがチャート上で何度も交差しています。最後のMAの交差の後は機能しますが、すべてのMAの交差の後はしません。

それは、シンプルなことです。クロスオーバーを修正し、カウンターを作成するのです。クロスオーバーがある場合、カウンターはクロスオーバーごとに1バーを追加します。クロスオーバーが発生すると、別のカウンターがカウントを開始します。
 
alsu:

私たちは互いに理解し合えないようです

一般に、問題の所在は定義される-変数staticである。

しかし、インジケータと同じファイルにコンパイルしたこの変数を持つ関数は問題なく動作する(再初期化が成功し、すべて正常に動作する)が、ライブラリに配置した同じ関数をアドレスすると問題が発生するのはなぜだろう。

もしかしたら、ライブラリ関数で特定の型の使用に制限があるのでは?

 
もしもし?
 
polycomp:

一般に、問題の所在は定義される-変数staticである。

しかし、なぜこの変数を持つ関数は、インジケータと同じファイルにコンパイルされ、問題なく動作します(再初期化が成功し、すべてがうまく動作します)が、私はライブラリに配置され、同じ関数をアドレスすると、問題があるのでしょうか?

もしかしたら、ライブラリ関数で特定の型の使用に制限があるのでは?



私は開発者ではないので、推測しかできませんが。つまり、パラメータを変更した後に再初期化する際、ex4はメモリからアンロードされないので、新規起動時に以前と同じライブラリのコピー、すべての静的データとその古い値を取得するのだと推測します。

考え方としては、init()を呼ぶ前に、プログラムのすべての静的特性を初期化する必要があります。しかし、ex4ライブラリは、ライブラリ関数を最初に呼び出した瞬間にしかロードされないため、ライブラリの静電容量は共通ヒープに到達しない。

こうして全体を眺めてみると、その説明は極めて論理的である。

 

以下は、StringGetChar 関数 https://docs.mql4.com/ru/objects/ObjectFind です。

なぜ、それが必要なのでしょうか?

教科書によると、文字の値を数値で返すとある。ここで、"c"は値99に 相当する。どうすれば理解できるのか?この機能にはどんな使い道があるのでしょうか?

だから、数字が返ってくる...。...そして、それは何をするものなのか?

文字列を扱えるようになりたいので、この関数に出会いました。だから聞いて いるんです。

 
alsu:

私は開発者ではないので、憶測でしかありませんが。つまり、パラメータ変更後の再初期化において、ex4はメモリからアンロードされないため、新規起動時に以前と同じライブラリのコピー、すべてのスタティックとその古い値を取得するのだと思います。

考え方としては、init()を呼ぶ前に、プログラムのすべての静的特性を初期化する必要があります。しかし、ex4ライブラリは、ライブラリ関数を最初に呼び出した瞬間にしかロードされないため、ライブラリの静電容量は共通ヒープに到達しない。

こうして全体を眺めてみると、その説明は極めて論理的である。


分かりやすい説明ありがとうございましたライブラリでスタティックは使わない方が良さそうですね。
 

私の頭の中には、同じ型の値3000個の配列があります。

しかし、これらの値で一次元配列を初期化する方法がよくわかりません。

配列の初期化時に、代入演算 子にカンマで区切られた3000個の値をすべて指定する必要があります。

int Mas_i[3000]= { (Bid>1.2153)&&(Bid<1.2160) , (Bid>1.2156)&&(Bid<1.2163) ...本当に3000の式を全てリストアップする必要があるのか?}.

S.Kovalevの本には、この質問に対する答えが見つからないようです・・・というか、理解できないのですが。

ありがとうございます。

 
hoz:

以下は、StringGetChar 関数 https://docs.mql4.com/ru/objects/ObjectFind です。

なぜ、それが必要なのでしょうか?

教科書によると、文字の値を数値で返すとある。ここで、"c"は値99に 相当する。どうすれば理解できるのか?この機能にはどんな使い道があるのでしょうか?

だから、数字が返ってくる...。...そして、それは何をするものなのか?

文字列を扱えるようになりたいので、この関数に出会いました。だから聞いて いるんです。


チャート(コメントと混同しないように)に書き込むには、数字コードをエンコードする必要があります。99と書くと、チャート上に「s」の文字が表示されます。私はまだやっていませんが、Dockの中で、どのようなフォント、サイズ、X軸、Y軸の向きをピクセル単位でどうするかなど、すべてやり方はわかります。もうそれだけで足りないなら頑張れ!でも、かなり時間がかかりそうですね。がんばってください。