MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1120

 
Artyom Trishkin:

問題コード

なぜ...?もし、そのような同じ線を渡るたびにロジックを2倍にするということであれば、当然、すべてのロジック(私が書いていない)は、その人が直接書かなければならない。最終的な目標はわかりませんが、もしかしたら、価格が各ラインを何回横切ったかをカウントして、通過さえすればいいということかもしれません...。

その人が、自分の目的のために、そのようなイベントを手に入れることができなかったのだと理解しました。あとは彼の裁量次第で、そのような事象が発生します。


最初の交差点で線自体の名前をある形式に変更する(あるいはこの図の説明文に何らかのラベルをつける)のが論理的でしょう。そして、すべてのオブジェクトが交差したら、このマークがないことを線で確認する。

もし、すべてのオブジェクトを毎ターン 試すのが非効率的だという話なら、まったく別の話です。

 
Roman:

H1より上の 期間については、_Period変数が 返す値を 計算で 使うようにしてください。
誰が悪いかすぐにわかります。

まともな神経の持ち主なら、名前付きの定数の 値を数学の計算に使うことはないだろう。名前付き定数は、何を参照しているのか、あるいはどのプロパティ識別子でデータを取得しているのかを理解しやすくするために存在します。名前付き定数は、要求されたプロパティ識別子の値をテキストによる説明に置き換えます。

SymbolInfoDouble()などからデータを取り出す場合、どの値を関数から取り出したいかを識別子の数値で指定することができます。しかし、そのためには、どの識別子の値を関数に代入するかを覚えておく必要がある。 名前付きenum定数は、定数参照から解放されるため、あるいはMQLの各関数の各識別子の値を丸暗記するのを防ぐために導入されました。現在のAsk価格の値を取得するには、現在のシンボルのデータを要求するときに識別子値を4に等しくする:SymbolInfoDouble(NULL,4)またはSymbolInfoDouble(NULL,SYMBOL_ASK)と書く必要があります。

SYMBOL_ASKが現在のAsk価格ではなく4を返すことは、なぜ問題ないのですか?

では、なぜチャート期間の識別子を取り上げるのですか?それが開発者の狙いです。彼らの内部的な理由で。PERIOD_H4 のような識別子の名前があります。開発者が何らかの理由でつけた数値など気にしない方がいい。定数の名前(数値のテキスト置き換え)が与えられています - 便宜上、それを使用してください。しかし、この定数の値を計算に使うのは、申し訳ないがナンセンスだ。この名前付き定数は、どのグラフからデータを取得したいかを示すために使用します。しかし、グラフの周期を返すことはできない。これは全く別の目的で使われるもので、生活を便利にするため、関数が何を返すべきかを伝えるために使われます。

期間内の分数が必要な場合は、期間内の秒数を60で割った値から求めます。そして、松葉杖でないものを松葉杖と呼ばないことです。松葉杖は、計算で数字の名前を使おうとしているものです。

それは残念・・・。

 
Vadim Lin:

なぜ...?もし、そのような同じ線を渡るたびにロジックを2倍にするということであれば、当然、すべてのロジック(私が書いていない)は、その人が直接書かなければならない。最終的な目標はわかりませんが、もしかしたら、価格が各ラインを何回横切ったかをカウントして、通過さえすればいいということかもしれません...。

私は、その人が自分の目的のためにそのようなイベントを手に入れることができなかったと理解した。あとは彼の裁量次第で、そのような事象が発生します。


最初の交差点で線自体の名前をある形式に変更する(あるいはこの図の説明文に何らかのラベルをつける)のが論理的でしょう。そして、すべてのオブジェクトが交差したら、このマークがないことを線で確認する。

もし、すべてのオブジェクトを1クリックごとに 試すことが非効率的だという話なら、それは別の話です。

あなたは、忘却の彼方に消え去ろうとしている古代の機能を使っているのです。そのため、コードはクロスプラットフォームではありませんが、どのプラットフォームでも変更なしに簡単に動作させることができます。

リネームは楽しいですしね。インジケータが出す行の名前を見て、そこから明示的な識別子を取り出し、それを使って正しい行を見つけるだけでいいのです。

 
Vadim Lin:

ありがとうございました。助かったのはwchar_t でした!読んでみると、charと違って1文字につき2バイトを格納するんですね。

でも、"str "関数のパラメータは、まだ割り当てられた値を返してくれない...。なぜだろう...。

おそらく、関数から戻り値を返さなければならないからでしょう。

extern "C" __declspec(dllexport) wchar_t* __stdcall ToString(wchar_t* str)
{
   wchar_t wcs[256];
   wcscpy(wcs, str);

   wchar_t* addStr = L" --- Привет! ---";
   
   wchar_t* res = wcsncat(wcs, addStr, wcslen(addStr) + 1);
   
   return(res);
}
 
Artyom Trishkin:

あなたは、忘却の彼方に消え去ろうとしている古代の機能を使っているのです。また、このコードはクロスプラットフォームではありませんが、どのプラットフォームでも変更なしに簡単に動作させることができます。

リネームは楽しいですしね。インジケータの行名を見て、明示的な識別子を抽出し、それを使って必要な行を探すだけです。

編集ありがとうございました

確かに、MQL4でプログラミングすることは比較的少なく、一方でMQL5はほとんど使ったことがありません。ですから、いくつかの方法が時代遅れであることは認めます(しかし、私はとにかく働いているのです!)。

Нужно просто поглядеть какие имена линий выдаёт индикатор, вычленить из них их явный идентификатор

確かに、しかし、あなたや私ではなく、その路線のネーミングの特殊性を知らないのです。「ただ、その場合、記憶した内容をどこかに保存しておかないと、端末が壊れたときに何が起きているのかがわからなくなってしまいます。この方法はベストではないかもしれませんが、少なくともリネームはこの問題を解決してくれます。

間違っているかもしれませんが、その方は、一度に100ラインまで使用し、ラインのみで、チャートには何もないと書いています。すべての回線は、私の理解では、クロスオーバーを監視する必要があります。では、名前から何を「抽出」するのか、私にはわかりません))

 
Artyom Trishkin:


ポイントは、_Period変数が 時間枠の値を 返すことです。
また、定数はenum定数だけでなく、周期値に対応する必要があります。
そうでなければ、この変数の意味がなくなってしまいます。この変数は、追加の関数による変換なしに、タイムフレームの値を すばやく取得できるように特別に設計されています。

 
Vadim Lin:

編集ありがとうございました

確かに、ここ数年、MQL4でプログラミングすることは比較的少なく、MQL5もほとんど使ったことがありません。したがって、いくつかの方法が時代遅れであることは認めます(しかし、私はとにかく働いているのです!)。

確かに、しかし、あなたや私ではなく、その路線のネーミングの特殊性を知らないのです。「しかし、その場合、「記憶」した結果をどこかに保存しておかないと、いつ端末がクラッシュしても、何が起こっているのかがよくわからなくなります。この方法はベストではないかもしれませんが、少なくともリネームはこの問題を解決してくれます。

間違っているかもしれませんが、その方は、一度に100行まで、しかも行だけを使って、チャートには何もないと書いていました。すべての回線は、私の理解では、クロスオーバーを監視する必要があります。では、名前から何を「選び取る」ことになるのか、それは分かりません))

端末がクラッシュした場合は、再起動が必要です。このインディケータを再度チャートに適用するか、このインディケータのデータを使用するExpert Advisorを実行する必要があります(その場合、EAはアクセスする際にこのインディケータ自体をロードします)。この場合(チャート上にインストールされたプログラムの自動ロードによる端末の通常の再起動時にも)、インジケータはすべてのラインを新たに描画します。これらの行は後で読み直すことができます。しかも、とにかく読まなければならない。

EAがインジケータによって作成された ラインのみを監視するためには、インジケータによって作成されたラインの名前を見て、名前の中で繰り返される部分文字列を見つけようとすれば十分です - すべてのラインについて同じです。これらの部分文字列は、必要な行を見つけるために使用されます。

簡単なことです。インジケータが動作しているときに、オブジェクトのリストを見るだけです。

 
Roman:

ポイントは、_Period変数が 時間枠の値を 返すことです。
また、定数はenum定数だけでなく、周期値に対応する必要があります。
そうでなければ、この変数の意味がなくなってしまいます。この変数は、追加の関数による変換なしに、タイムフレームの値を すばやく取得できるように特別に設計されています。

あちこちで人と馬がごっちゃになってる...。この問題だけでなくあなたの提案に従って変更を加えると、これまでうまくいっていたことの半分が単に死んでしまうことになります。

刻みの大きさとポイントの大きさを同じにするだけでは何の価値もない...。

 
Roman:

H1以上の 期間については、_Period変数が 返す値を 数学的な計算 で使ってみてください。
誰が間違っているのか、すぐにわかります。

ほぼすべてのEAで使っています。もう笑えません。申し訳ありませんが、初めて拝見しました。
 
Artyom Trishkin:

あちこちで人と馬がごっちゃになってる...。この問題だけでなくあなたの提案通りに変更すると、これまで機能していたものの半分が死んでしまうだけです。

ただ、文字サイズとポイントサイズだけを同一視するのは......。

今の現実と矛盾することが多いからです。
そして、その矛盾の言い訳を見つけようとしている。
それどころか、「刻みは点とは違う!」と書いてしまいました。
自分の中の、発明された点です。
4桁しかなかった時代、Pointが 正確に対応していたことに鑑みて。
でも、5桁目が導入されてからは、言い訳をしながら名前を作るようになったんですね。

理由: