//+-------------------------------------------------------------------------------------+//| Поиск последнего элемента ZZBuf с непустым значением |//+-------------------------------------------------------------------------------------+int GetLastIndexNoEmptyValue(int index)
{
while (ZZBuf[index] == EMPTY_VALUE && index < Bars)// Поиск по графику справа налево
index++; // Пока не будет найден экстремум или// ..пока не достигнем конца историиreturn(index); // Индекс бара с непустым значением..// ..зиг-зага
}
//+-------------------------------------------------------------------------------------+//| Поиск последнего элемента ZZBuf с непустым значением |//+-------------------------------------------------------------------------------------+int GetLastIndexNoEmptyValue(int index)
{
while (ZZBuf[index] == EMPTY_VALUE && index < Bars)// Поиск по графику справа налево
index++; // Пока не будет найден экстремум или// ..пока не достигнем конца историиreturn(index); // Индекс бара с непустым значением..// ..зиг-зага
}
ジグザグインジケーターから値を抽出する方法を教えてください。一般的にはどのように実装されているのでしょうか?I.e.最後の1つだけでなく、ある極限を拾い上げたい場合。
例えば、このジグザグをExpert Advisorに付けたいとします。
iCustom 関数は通常カスタムインジケータのアドレスとして使用するので、それを使用する必要があることは理解しましたが、問題はノードの接続方法です...。
バッファは原則に従ってNEUTRAL(EMPTY_VALUE)値を探している。
とiCustom()経由でインジケーターバッファにアクセスすることができます。バッファは原則に従ってEMPTY_VALUEの値を探している。
で、インジケーターバッファはiCustom()でアクセスします。
理にかなっている。しかし、空でない値に 出会うまで、このように検索されます。そして、例えば、私が、実は、最後の空でない値、つまり、最後の極値でなく、別のものが欲しいとしたら...。例えば、こちらのスクリーンショットでは
理にかなっている。しかし、この方法では、空でない 値に出会うまで検索することになる。そして、例えば、私が、実は、最後の空でない値、つまり、最後の極値でなく、別のものが欲しいとしたら...。例えば、こちらのスクリーンショットでは
ループ内に極値カウンタを入力し、極値(空でない値が連続している)の数でループを解除する。
了解です。ありがとうございます。あとは、それをすべて実践で活かすことです。大筋は分かるが、頭の中がフィルターだらけで、脳みそが沸騰しそうだ...。
了解です。ありがとうございます。あとは、それを実際に応用していくことです。アイデアは浮かんだが、頭の中のフィルターが多すぎて、脳みそが沸騰している...。
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(n>1)
if(ind!=0) n--;
else
if(ind!=0) return(ind);
}
}
ピークの小節番号が必要な場合は、関数の型を int に変更し、return(ind); の代わりに return(i) と記述してください。
また、コード中でiを使っている場合、特に検索(チュートリアルのように)の場合は、この関数のiを他の変数、例えばkに変更してください。
そして、インジケータ用の関数内部でiCustomを設定するようにしてください。
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(n>1)
if(ind!=0) n--;
else
if(ind!=0) return(ind);
}
}
ピークの小節番号が必要な場合は、関数の型を int に変更し、return(ind); の代わりに return(i) と記述してください。
また、コード中でiを使っている場合、特に検索(チュートリアルのように)の場合は、この関数のiを他の変数、例えばkに変更してください。
そして、インジケータ用の関数内部でiCustomを設定することを確認してください。
ニコライ さん、面白いですね!もちろん、条件も書いて ありますよ。見ていて思うのは...
カスタムインジケーターの バッファがゼロの値を返した場合、n--、カスタムインジケーターのバッファがゼロの値を返した 場合、...ということが判明したのです。インジケータ・バッファの値を返します。
しかし、条件は同じです。そして、ゼロではないにしろ、そこそこ...。
ニコライ さん、面白いですね!もちろん、条件も書いて ありますよ。見ていて思うのは...。
カスタムインジケータバッファが0という値を返した 場合はn--、カスタムインジケータバッファが0という値を返した 場合は......ということが判明したのです。インジケータ・バッファの値を返します。
しかし、条件は同じです。そして、ゼロではないにせよ、そこそこ...。
コードを正しく挿入しようとしたときに歯列矯正器が落ちてしまった。
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(n>1) {
if(ind!=0) n--;
}else{
if(ind!=0) return(ind);
}
}
}
n>1 {の場合
バッファが空でない場合,n から 1 を引く。
} その逆
バッファが空でない場合、その値を返します。
}
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(ind!=0) {
if(n>1) n--; else return(ind);
}
}
}
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(ind!=0) {
if(n>1) n--; else return(ind);
}
}
}
一般的には、どちらも問題ありません。私はちょっと違ったコードの書き方に慣れているだけで、あなたのは違うけどこっちの方が読みやすいよ。各コードの最初の括弧が動きません。EDITORに入れたら、全部がそんなふうに定位置になりました。
基本的にはどちらでも問題ありません。私はコードの書き方に慣れていて、こちらの方が読みやすいのですが、あなたの方は違いますね。各コードの最初の括弧が動きません。Editorに入れたら、この形で全てが定位置になりました。
1000行を超えると、コンパクトに書くようになる)。
また、MT4では、特にテストを実行するときにパフォーマンスが低下します。饒舌な方がパフォーマンスが速い。