新しいタイムフレームのチャートに変更すると、インジケータが消えてしまう。 - ページ 3 123 新しいコメント 削除済み 2014.06.16 22:35 #21 SDCさん、こんにちは。私はそれを得た。ありがとうございます。100barの場合、トータルレートは0から99までです。 最初は、pre_cal =0 --> limit=100 bar - 0 =100です。for(int=1 to limit=100; I++)で、I=100(インデックス値)となり、100というバーは存在しない。そこで、最大値I=99にするために、limit-1 を入れています。何か良い方法はないでしょうか。また、他の多くのインジケーターでも同じ方法で、このような範囲外の 問題は発生しないので、混乱しています。また、Expertタブをありがとうございました。SCFX int limit=rates_total-prev_calculated; if(limit<=0) limit=2; //--- for(int i=1;i<limit-1 ;i++) { if((High[i]-Low[i])==0) continue; if( MathAbs(Close[i]-Open[i])/(High[i]-Low[i])<0.50 ) boring[i]=Close[i]; qjol 2014.06.16 22:47 #22 scfx:また、他の多くのインジケーターでも同じ方法で、このような範囲外の問題が発生しないので、混乱しています。 B600が範囲 外になる前は、 重大なエラー ではありませんでした 。 Ian Venner 2014.06.17 01:06 #23 scfx:. そのため、最大I=99にするために、limit -1を入れています。何か良い方法はないでしょうか。 あなたのコードは、1本目からのチャート履歴をエラーなく描画しますが、新しいバーを描画しません。何をさせたいかによって、いろいろなコードの書き方があります。Metaeditorに含まれるインジケータを見て、MQコーダーがどのようにそれを行うかを見てください。彼らのコードを読み、各行の理由を理解することができれば、インジケータを作成する のに問題はないでしょう。 削除済み 2014.06.26 22:39 #24 SDCになったよ。個人的に言えば、ドキュメントを読んでも想像しにくいのですが。それでもなぜprev_calculated=Total_rates -1なのかがよくわからない。ということで、ここに数値例を作ってみました。私のような初心者の助けになれば幸いです。通常、我々は見ることができます。Limit= rates_total- prev_calculated; //(no-1)となります。またはfor(i=1;i<limit;i++) or for(i=1;i<=limit;i++)重要な のは、LIMIT >=1 にすることです。私の場合、LIMIT=0なので、新しいティックが入ってきてもインジケータはリフレシュされません。なぜか、見てみましょう。(少なくとも私の場合はprev_calculatedが原因だと思います。)チャート上に100本のバーがあるときにインジケータを取り付けたと仮定します。以下は変数の値です。値の最初のテーブル 変数 Total_rates 100 バーのインデックス 0-99 prev_calculated 0 Limit 100 Loop i value 1-99すべて順調です。値が最初に表示されるのは、バー1からチャートの最初までです。何小節目から計算されるのでしょうか? これは、私のミスにつながる重要なポイントであり、私は100%明確ではありません。新しいバーが始まると、チャート上には現在101本のバーが表示されます。インジケータは既に終了したバー、つまりバー1には更新されません。値の 2 番目のテーブル 変数 Total_rates 101 バーのインデックス 0-100 prev_calculated 99 OR 100 (下記参照) Limit2 OR 1 ループ i 値 1to1 OR 1to01つ目の表から、インジケータは99バーを計算します(1から99までループするため)。 しかし、ドキュメントによると、「ただし、start()の最初の呼び出しでない場合は、Bars-1に等しい値が返されます)」と書かれています。 この1本の棒が違うだけで、トラブルが発生します。もしシステムがprev_calculatedとして100を返すとしたら。 prev_calculated=99であれば、ループは動作することがわかると思います。 しかし、prev_calculated = 100のように見えるので、ループはリミット=0または-1に依存するため動作しないでしょう。 この場合、prev_calculated= Bars-1の背後にあるロジックを見るのを助けることができる人はいますか? だから解決策は非常に明確である:メイクfor(i=1; ___ここ1つは、1より大きいfor(<)または1より大きいか等しいfor(<=) ___; i +)をする必要があります。前回のコードでは、0に等しくなっています。 int pcal=prev_calculated; if(prev_calculated>0) pcal--; int limit=rates_total-pcal; for(int i=1;i<=limit ;i++) //it is <= //--------------OR ------------------------ int limit=rates_total-prev_calculated-1; if(limit<=0) limit=2; //NOT limit for(int i=1;i<=limit ;i++) //it is <= お役に立てれば幸いです。SCFX Ian Venner 2014.06.27 00:37 #25 prev_calculated == rates_total scfx:SDCはもうわかったよ。個人的には、ドキュメントを読んでもなかなか想像がつかないのですが。それでもなぜprev_calculated=Total_rates -1なのかはよくわかりません。SCFX 新しいインディケータを作成し、start関数に このコードを入れて、1分足チャートに貼り付けて、ティックが到着したときのアラートを見ます。Alert("rt = ",rates_total," pc = ",prev_calculated); rate_total は現在のバーの量です。 prev_calculatedは、前のティックにあったバーの量です。 削除済み 2014.06.27 00:58 #26 SDC:prev_calculated == rates_total 新しいインディケータを作成し、このコードをstart関数に入れ、1分足チャートに貼り付けて、ティックが到着したときのアラートを見ます。 rates_total は現在のバーの量です。 prev_calculatedは、前のティックにあったバーの量です。 wow それは奇妙だ。以前貼ったリンクでは、もし:BUTがstart()の最初の呼び出しでなければ、Bars-1に等しい値が返されるとのことです。どうしてBars(Rate_totals)が返されるのでしょうか。 Ian Venner 2014.06.27 11:58 #27 そう言われているのは知っていますが、それは完全には正確ではありません。 実際に起こることは、次のとおりです。 rates_total == 現在のティックが到着したときのバーの総量 prev_calculated == 前のティックが到着したときのバーの総量。 チャート内のバー インジケーターの状態 レート-トータル 事前計算済み レートトータル-プレブカルキュレーテッド 1000 ロード時の初回実行 1000 0 1000 1000 次回の動作 1000 1000 0 1000 次のティック 1000 1000 0 1001 新しいバーの最初のティック 1001 1000 1 1001 次のティック 1001 1001 0 1001 次のティック 1001 1001 0 したがって、prev-calculatedとrates_totalの3つの主な状態があります。 インジケータがロードされ、バーの中間ティック、新しいバーの最初のティックです。 初回実行時は、インジケータがロードされてから前のティックがないため、prev_calculated == 0となります。 また、チャートが変更されたり、ヒストリーが追加されると、prev_calculatedは0にリセットされます。 OnCalculateの戻り値は使用しませんが、万が一修正された場合に備えて、デフォルトのreturn(rates_total)を使用するのがベストです。 取引における相関の実用化 マーケット用の任意の非標準チャートのインディケータを作成するには DoEasyライブラリの時系列(第48部): 単一サブウィンドウでの単一バッファ複数銘柄・複数期間指標 William Roeder 2014.06.28 09:55 #28 チャートのバー インジケータ 状態 レート-トータル 事前計算済み レートトータル(事前計算値 1000 ロード時の初回実行 1000 0 1000 そして、バー1000は存在しません。 新しいドキュメントに書いて あることは知っています。もし彼らの方法でやるなら、prev_calculatedが 0でないかテストして、rates_total - prev_calculatedを 1つ下に調整する必要があります。これは、indicator_countedのデクリメントに 戻る混乱です。int OnCalculate(const int rates_total, const int prev_calculated, ...){ #define LOOKBACK 1 // iMA(... iBar+1) int indicator_counted = prev_calculated; if(indicator_counted < LOOKBACK) indicator_counted = LOOKBACK; for(iBar = rates_total - 1 - indicator_counted; i>=0 i--){ Buffer[iBar] = ...; } return(rates_total - 1); // Recalculate bar zero next tick. } See Seeインジケーターの進行状況を表示する - MQL4フォーラム Ian Venner 2014.06.28 10:34 #29 return( rates_total - 1 ) とする意味はなく、prev_calculated の値は、何を返すように言ったかにかかわらず、あたかも return(rates_total) であったかのようになります。 William Roeder 2014.06.29 23:48 #30 SDC: return( rates_total - 1 ) をする意味がない prev_calculated の値は、何を返すように言ったかに関係なく return(rates_total) であるかのようです。 サービスデスクに問題を 報告しましたか? 123 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
SDCさん、こんにちは。
私はそれを得た。ありがとうございます。
100barの場合、トータルレートは0から99までです。
最初は、pre_cal =0 --> limit=100 bar - 0 =100です。
for(int=1 to limit=100; I++)
で、I=100(インデックス値)となり、100というバーは存在しない。
そこで、最大値I=99にするために、limit-1 を入れています。
何か良い方法はないでしょうか。
また、他の多くのインジケーターでも同じ方法で、このような範囲外の 問題は発生しないので、混乱しています。
また、Expertタブをありがとうございました。
SCFX
また、他の多くのインジケーターでも同じ方法で、このような範囲外の問題が発生しないので、混乱しています。
B600が範囲 外になる前は、 重大なエラー ではありませんでした 。
そのため、最大I=99にするために、limit -1を入れています。
何か良い方法はないでしょうか。
あなたのコードは、1本目からのチャート履歴をエラーなく描画しますが、新しいバーを描画しません。何をさせたいかによって、いろいろなコードの書き方があります。Metaeditorに含まれるインジケータを見て、MQコーダーがどのようにそれを行うかを見てください。彼らのコードを読み、各行の理由を理解することができれば、インジケータを作成する のに問題はないでしょう。
SDCになったよ。
個人的に言えば、ドキュメントを読んでも想像しにくいのですが。それでもなぜprev_calculated=Total_rates -1なのかがよくわからない。
ということで、ここに数値例を作ってみました。私のような初心者の助けになれば幸いです。
通常、我々は見ることができます。
Limit= rates_total- prev_calculated; //(no-1)となります。
または
for(i=1;i<limit;i++) or for(i=1;i<=limit;i++)
重要な のは、LIMIT >=1 にすることです。私の場合、LIMIT=0なので、新しいティックが入ってきてもインジケータはリフレシュされません。
なぜか、見てみましょう。(少なくとも私の場合はprev_calculatedが原因だと思います。)
チャート上に100本のバーがあるときにインジケータを取り付けたと仮定します。以下は変数の値です。
値の最初のテーブル
変数
Total_rates 100
バーのインデックス 0-99
prev_calculated 0
Limit 100
Loop i value 1-99
すべて順調です。値が最初に表示されるのは、バー1からチャートの最初までです。何小節目から計算されるのでしょうか? これは、私のミスにつながる重要なポイントであり、私は100%明確ではありません。
新しいバーが始まると、チャート上には現在101本のバーが表示されます。インジケータは既に終了したバー、つまりバー1には更新されません。
値の 2 番目のテーブル
変数
Total_rates 101
バーのインデックス 0-100
prev_calculated 99 OR 100 (下記参照)
Limit2 OR 1
ループ i 値 1to1 OR 1to0
1つ目の表から、インジケータは99バーを計算します(1から99までループするため)。
だから解決策は非常に明確である:メイクfor(i=1; ___ここ1つは、1より大きいfor(<)または1より大きいか等しいfor(<=) ___; i +)をする必要があります。前回のコードでは、0に等しくなっています。しかし、ドキュメントによると、「ただし、start()の最初の呼び出しでない場合は、Bars-1に等しい値が返されます)」と書かれています。
この1本の棒が違うだけで、トラブルが発生します。もしシステムがprev_calculatedとして100を返すとしたら。
prev_calculated=99であれば、ループは動作することがわかると思います。
しかし、prev_calculated = 100のように見えるので、ループはリミット=0または-1に依存するため動作しないでしょう。
この場合、prev_calculated= Bars-1の背後にあるロジックを見るのを助けることができる人はいますか?
お役に立てれば幸いです。
SCFX
prev_calculated == rates_total
SDCはもうわかったよ。
個人的には、ドキュメントを読んでもなかなか想像がつかないのですが。それでもなぜprev_calculated=Total_rates -1なのかはよくわかりません。
SCFX
新しいインディケータを作成し、start関数に このコードを入れて、1分足チャートに貼り付けて、ティックが到着したときのアラートを見ます。
rate_total は現在のバーの量です。
prev_calculatedは、前のティックにあったバーの量です。
prev_calculated == rates_total
新しいインディケータを作成し、このコードをstart関数に入れ、1分足チャートに貼り付けて、ティックが到着したときのアラートを見ます。
rates_total は現在のバーの量です。
prev_calculatedは、前のティックにあったバーの量です。
wow それは奇妙だ。
以前貼ったリンクでは、もし:BUTがstart()の最初の呼び出しでなければ、Bars-1に等しい値が返されるとのことです。
どうしてBars(Rate_totals)が返されるのでしょうか。
そう言われているのは知っていますが、それは完全には正確ではありません。
実際に起こることは、次のとおりです。
rates_total == 現在のティックが到着したときのバーの総量 prev_calculated == 前のティックが到着したときのバーの総量。
したがって、prev-calculatedとrates_totalの3つの主な状態があります。 インジケータがロードされ、バーの中間ティック、新しいバーの最初のティックです。
初回実行時は、インジケータがロードされてから前のティックがないため、prev_calculated == 0となります。
また、チャートが変更されたり、ヒストリーが追加されると、prev_calculatedは0にリセットされます。
OnCalculateの戻り値は使用しませんが、万が一修正された場合に備えて、デフォルトのreturn(rates_total)を使用するのがベストです。
新しいドキュメントに書いて あることは知っています。もし彼らの方法でやるなら、prev_calculatedが 0でないかテストして、rates_total - prev_calculatedを 1つ下に調整する必要があります。これは、indicator_countedのデクリメントに 戻る混乱です。
return( rates_total - 1 ) とする意味はなく、prev_calculated の値は、何を返すように言ったかにかかわらず、あたかも return(rates_total) であったかのようになります。