// строку int searchPeriod=(Search_Period<1)?1:Search_Period;// можно расписать так:inputint Search_Period=10; // Количество копируемых свечей ... эту строку вы видите в настройкахint searchPeriod; // Сюда будем записывать входной параметрif(Search_Period<1) searchPeriod=1; // Если во входном параметре ввели ноль или меньше нуля, то параметр будет равен нулюelse searchPeriod=Search_Period; // иначе примем входной параметр// соответственно и строку int delta=(Delta<0)?0:Delta;// можно расписать точно так же
ここでは、私の変形版として、繰り返し探索問題の解法を紹介します。
スクリプトを動作させるためには、DictionaryファイルをMQL5 Indecludeにコピーする必要があります。
検索は、黄色で示したワンパスforループで行われる。結果として得られるリストには繰り返しが含まれない(AがBを繰り返し、BがAを繰り返す場合、2つのセット{A, B}と{B, A}ではなく、1つのセット{A, B}が出力される)。).
このスクリプトの出力は次のようなものであった。
参考文献より
ここで、私なりの繰り返し探索問題の解決策を紹介します。
標準RSIを計算する関数を見つけるのを助けてください、要件は簡単です。
1.指定したバーでのRSI値を返す
2.要求された(望ましい)バーだけ(必要なら)インデックスを計算する。
3.指定されたTFで計算できるようになること
4.インジケータより速く、ポイント2を犠牲にして働く
Expert Advisorにこの機能を組み込みたいのですが、どなたか準備されている方がいらっしゃいましたら、教えてください。
ごく一般的な指標であり、不思議なことではないので質問させていただきました。
標準RSIを計算する関数を見つけるのを助けてください、要件は簡単です。
1.指定したバーでのRSI値を返す
2.要求された(望ましい)バーだけ(必要なら)インデックスを計算する。
3.指定されたTFで計算できるようになること
4.インジケータより速く、ポイント2を犠牲にして働く
Expert Advisorにこの機能を組み込みたいのですが、どなたか準備されている方がいらっしゃいましたら、教えてください。
ごく一般的な指標であり、不思議なことではないので質問させていただきました。
標準のiRSIの何が問題なのでしょうか?秘密が足りない?
関数に必要な私の変更があるのですが...。
既成のものを使って、自分の要求に合わせて修正する。
既成のものを使って、自分の要求に合わせて修正する。
ここでは、繰り返しの検索という問題を解決するための私のバリエーションを紹介します。
Vasilyさん、#include <Dictionary.mqh>を 開くと、EA本体と同じように開く んですね。このようになるはずです。それとも、中に他のコードがあるのでしょうか?
なぜなら、私が見たコードでは、どのように繰り返しを検索しているのかが明確でないからです((
1ではなく、0であるべきです。
このようにint searchPeriod=(Search_Period<1)?0:Search_Period;
で、さらに実行スクリプトで
int copy_bars=(int)fmin(Search_Period,Bars(Symbol(),Period())); // コピーするローソク足の本数
この場合、すでにsearchPeriodという 変数を使うべきでしょう。
------
もうひとつ、この線はどうなっているのでしょうか?構造体の各要素がゼロにリセットされることがわかりました。そして、このデータを書いただけで、さらにそれを使うべきと思われるのであれば、ここで何をゼロにしているのか理解できない。
ZeroMemory(dataCandle); // 構造体のデータをゼロにする。
1ではなく、0であるべきです。
このようにint searchPeriod=(Search_Period<1)?0:Search_Period;
で、さらに実行スクリプトで
int copy_bars=(int)fmin(Search_Period,Bars(Symbol(),Period())); // コピーするローソク足の本数
この場合、すでにsearchPeriodという 変数を使うべきでしょう。
------
もうひとつ、この線はどうなっているのでしょうか?構造体の各要素がゼロにリセットされることがわかりました。そして、このデータを書いただけで、さらにそれを使うべきと思われるのであれば、ここで何をゼロにしているのか理解できない。
ZeroMemory(dataCandle); // 構造体内部のデータを消去する.
"こんな感じ "で。int searchPeriod=(Search_Period<1)?0:Search_Period;"
いいえ、そんなことはありません。このように(文字通り)、ユーザーが設定で設定したSearch_Periodが 1より小さい場合は、 searchPeriodは 0に等しくなり、それ以外の場合は、ユーザーが設定で設定したSearch_Periodの 値に等しくなる、ということです。これは正しくありません。ゼロに等しい検索範囲は必要ない。そこで、この範囲がユーザーによって0または0未満(1未満)に設定されている場合、この範囲を最小値-1に等しく設定することにします。
"int copy_bars=(int)fmin(Search_Period,Bars(Symbol(),Period())); // ローソク足の数だけコピーする。
ここで、searchPeriodという 変数をすでに使っているはずです。"
はい、その通りです、タイプミスです。
"もうひとつの質問、この線は何のためにあるのですか?構造体の各要素をゼロにリセットすることがわかりました。そして、このデータを書き込んだだけで、さらにそれを使うべきなのに、なぜ、何をゼロにしているのかが理解できない。ZeroMemory(dataCandle); // 構造体のデータをゼロにする".
これは、構造 体にデータを入れる前に行う。まずゼロにし、次に埋める。見てください。ループの前にゼロにするんです。そして、ループの中で構造体をデータで埋めていく。