エラー、バグ、質問 - ページ 2997 1...299029912992299329942995299629972998299930003001300230033004...3185 新しいコメント Francuz 2021.04.09 13:11 #29961 Alexey Viktorov:スキー板が悪いのでは?そして、RTS-6.21です。 これは別格です。お持ちのブローカーとMT5のバージョンを教えてください。 Francuz 2021.04.09 13:27 #29962 Alexey Viktorov:スキー板が悪いのでは?そして、RTS-6.21も。 ありがとうございました。図星だったんですね。異なるフォルダーから異なるバージョンのインジケータを接続。 Nikolai Semko 2021.04.09 13:30 #29963 Francuz:はい、そうです。結果は変わっていません。 信じられない。 もう一度試してみてください。 datetime a = D'2021.04.08 10:00:00'; int handle; double Buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { handle = iCustom(_Symbol, PERIOD_CURRENT, "Examples\\ATR.ex5", 14); ::Print(__FUNCTION__ + "| PERIOD_CURRENT = ", EnumToString(_Period)); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { if(prev_calculated>0 && handle != INVALID_HANDLE) { ::CopyBuffer(handle, 0, a, 1, Buffer); double BS = ::NormalizeDouble(Buffer[0], _Digits); ::Print(__FUNCTION__ + "| a = ", a); ::Print(__FUNCTION__ + "| BS ", BS); handle = INVALID_HANDLE; } // return value of prev_calculated for next call return(rates_total); } Francuz 2021.04.09 13:45 #29964 Nikolai Semko:信じられない。 もう一度試してみてください。私はそれを理解した。問題は、異なるフォルダーの2つのATRファイルが接続されていたことです。そのため、数値にズレが生じたのです。 よろしくお願いします。 Alexey Viktorov 2021.04.09 16:38 #29965 Nikolai Semko:信じられない。 もう一度試してみてください。 ニコライは、それとは別の問題を抱えていた。私もすぐにこの問題が理解できず、別のTFから値を取得する必要があると思いました。スキーに注油して、すべてがうまくいった。 Nikolai Semko 2021.04.09 20:04 #29966 Alexey Viktorov: ニコライは、それとは別の問題を抱えていた。私も最初は質問の意味がわからず、他のTFから値を取得する必要があるのかと思いました。スキーにオイルを塗って、すべてがうまくいった。 まさに、OnCalculateの最初の実行で、prev_calculated == 0のときにCopyBufferの唯一の実行が行われ、バーがすでに生成されているという保証はなかったため、 この現象が起こりました。解決策は、この最初の実行を無視して、prev_calculated>0のときだけCopyBufferを実行することでした。「異なるフォルダの2つのATRファイル」というのがよく分かりません。 Alexey Viktorov 2021.04.09 21:14 #29967 Nikolai Semko: まさに、OnCalculateの最初の実行で、prev_calculated == 0のときにCopyBufferの唯一の実行が行われ、バーがすでに生成されているという保証はなかったため、 この現象が起こりました。解決策は、この最初の呼び出しを無視して、prev_calculated>0 のときだけ CopyBuffer を1回実行することでした。 なぜ「異なるフォルダから2種類のATRファイル」があったのか - 理解できない。 まあ、チャートを開いた時点で、現在のTF用のインジケータが作成されていれば、すでにデータはできているはずなんですけどね。そうでしょう? Artyom Trishkin 2021.04.09 21:21 #29968 Alexey Viktorov:まあ、チャートを開いて、現在のTF用のインジケータを作成すれば、チャートを開いた時点ですでにデータはできているはずなのですが。そうでしょう? ああ、どんなに素晴らしい発見が待っているのだろう・・・。も Nikolai Semko 2021.04.09 22:25 #29969 Alexey Viktorov:まあ、チャートを開いて、現在のTF用のインジケータを作成すれば、チャートを開いた時点ですでにデータはできているはずなのですが。そうでしょう? 正しく表現できていなかった。バーは、そうですねー、ほとんどの場合、できていますね。しかし、OnCalculateの最初の呼び出しで、prev_calculated == 0のとき、これらのすべてのバーについてインジケータが再計算されたという保証はありません。 それを確かめるために、そのようなインジケータを実行することができます。 しかし、それは相場が取引されるときに行う必要があります。マーケットが閉じていれば、ミスマッチを見ることはありません。 だから、動きのある暗号通貨で試すのは、週末にしたほうがいい。 バッファ配列のサイズ = -1 の場合、インジケータバッファがまだ再計算されていないことを意味し、BS 値は正しくありません。 datetime a = D'2021.04.08 10:00:00'; int handle; double Buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { handle = iCustom(_Symbol, PERIOD_CURRENT, "Examples\\ATR.ex5", 14); ::Print(__FUNCTION__ + "| PERIOD_CURRENT = ", EnumToString(_Period)); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { if(handle != INVALID_HANDLE) { ::CopyBuffer(handle, 0, a, 1, Buffer); double BS = ::NormalizeDouble(Buffer[0], _Digits); ::Print(__FUNCTION__ + "| a = ", a); ::Print(__FUNCTION__ + "| BS ", BS); int total_bars = iBars(NULL,PERIOD_CURRENT); int size = CopyBuffer(handle, 0, 0, total_bars, Buffer); Print("Total Bars = " + string(total_bars) + ", Size of Buffer array = " + string(size)); handle = INVALID_HANDLE; } // return value of prev_calculated for next call return(rates_total); } OnCalculateの次の呼び出し(prev_calculated>0)で実行すれば、そのような問題は発生しません。 SOM コードに間違いがありましたので、修正しました。 Alexey Viktorov 2021.04.10 05:19 #29970 Artyom Trishkin:ああ、どんな不思議な発見が待っているのだろう...。も インジケータを計算するためのデータという意味です。嫌味なこと言うなよ)))) 1...299029912992299329942995299629972998299930003001300230033004...3185 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
スキー板が悪いのでは?
そして、RTS-6.21です。
これは別格です。お持ちのブローカーとMT5のバージョンを教えてください。
スキー板が悪いのでは?
そして、RTS-6.21も。
ありがとうございました。図星だったんですね。異なるフォルダーから異なるバージョンのインジケータを接続。
はい、そうです。結果は変わっていません。
信じられない。
もう一度試してみてください。
信じられない。
もう一度試してみてください。
私はそれを理解した。問題は、異なるフォルダーの2つのATRファイルが接続されていたことです。そのため、数値にズレが生じたのです。
よろしくお願いします。信じられない。
もう一度試してみてください。
ニコライは、それとは別の問題を抱えていた。私も最初は質問の意味がわからず、他のTFから値を取得する必要があるのかと思いました。スキーにオイルを塗って、すべてがうまくいった。
まさに、OnCalculateの最初の実行で、prev_calculated == 0のときにCopyBufferの唯一の実行が行われ、バーがすでに生成されているという保証はなかったため、 この現象が起こりました。解決策は、この最初の実行を無視して、prev_calculated>0のときだけCopyBufferを実行することでした。
「異なるフォルダの2つのATRファイル」というのがよく分かりません。
まさに、OnCalculateの最初の実行で、prev_calculated == 0のときにCopyBufferの唯一の実行が行われ、バーがすでに生成されているという保証はなかったため、 この現象が起こりました。解決策は、この最初の呼び出しを無視して、prev_calculated>0 のときだけ CopyBuffer を1回実行することでした。 なぜ
「異なるフォルダから2種類のATRファイル」があったのか - 理解できない。
まあ、チャートを開いた時点で、現在のTF用のインジケータが作成されていれば、すでにデータはできているはずなんですけどね。そうでしょう?
まあ、チャートを開いて、現在のTF用のインジケータを作成すれば、チャートを開いた時点ですでにデータはできているはずなのですが。そうでしょう?
ああ、どんなに素晴らしい発見が待っているのだろう・・・。も
まあ、チャートを開いて、現在のTF用のインジケータを作成すれば、チャートを開いた時点ですでにデータはできているはずなのですが。そうでしょう?
正しく表現できていなかった。バーは、そうですねー、ほとんどの場合、できていますね。しかし、OnCalculateの最初の呼び出しで、prev_calculated == 0のとき、これらのすべてのバーについてインジケータが再計算されたという保証はありません。
それを確かめるために、そのようなインジケータを実行することができます。
しかし、それは相場が取引されるときに行う必要があります。マーケットが閉じていれば、ミスマッチを見ることはありません。
だから、動きのある暗号通貨で試すのは、週末にしたほうがいい。
バッファ配列のサイズ = -1 の場合、インジケータバッファがまだ再計算されていないことを意味し、BS 値は正しくありません。
OnCalculateの次の呼び出し(prev_calculated>0)で実行すれば、そのような問題は発生しません。
SOM コードに間違いがありましたので、修正しました。
ああ、どんな不思議な発見が待っているのだろう...。も
インジケータを計算するためのデータという意味です。嫌味なこと言うなよ))))