スクリプト: sSyncScroll - ページ 2 12 新しいコメント Дима Джумок 2023.01.23 03:33 #11 確かに、チャートをスクロールして履歴を見ようとすると、新しいティックが到着すると、チャートは一番最初に戻ってしまう。この場合、なぜそれが必要なのでしょうか?M1で最後のローソク足を描画すると、他のすべてのTFでも最後のローソク足になることはすでに知っています。そして、このインジケータがすべてのウィンドウにないと、最後のローソク足は自動的に再描画されます。 Dmitry Fedoseev 2023.01.23 04:52 #12 Дима Джумок #: 確かに、チャートをスクロールして履歴を見ようとすると、新しいティックが到着すると、チャートは一番最初に戻ってしまう。この場合、なぜそれが必要なのでしょうか?M1で最後のローソク足を描画すると、他のすべてのTFでも最後のローソク足になることはすでに知っています。そして、このインジケーターがすべてのウィンドウにないと、最後のローソク足は自動的に再描画されます。 このインジケーターは、次の言語変更の後に壊れました。もっと探してみてください。 Дима Джумок 2023.01.23 05:22 #13 Dmitry Fedoseev #:言語が変わってから壊れてしまった。もっと探してみてください。 ドミトリー、返信ありがとう。残念なことに、googleはあなたの開発へのリンクしかくれません。フォーラムも代替案を提示してくれませんでした。Admiral Marketはそのような機能を提供していますが、彼らのプラットフォーム上でのみで、MT5ではありません。親愛なるfxsaberは 2017年にMT5用の異なるタイムフレームにおける1つの商品のチャートの同時自動スクロール - テクニカル指標と外国為替市場分析 - MQL5 Algo-Tradersフォーラム(最後のコメントに指標のテキストがあります)を提供しましたが、私はそれをMT5ターミナル用に変換する方法を知らないので、それが動作するバリエーションであるかどうかを判断することができません。もしよろしければ、変換していただけないでしょうか。 // MQL4&5コード // すべてのチャートを正しい時刻に同期させる。 sinput int TimerInterval = 1; // ミリ秒単位の更新間隔 // すべてのチャートで自動スクロールとシフトを無効にする。 bool AutoShiftOff( void ) { long handle = ChartFirst(); while (handle != INVALID_HANDLE) { ChartSetInteger(handle, CHART_SHIFT, false); ChartSetInteger(handle, CHART_AUTOSCROLL, false); handle = ChartNext(handle); } return(true); } const bool Init = EventSetMillisecondTimer(TimerInterval) && AutoShiftOff(); void OnTimer() { SyncCharts(); } // この時刻のバーがない場合、true を返す ("hole") bool IsHole( const string Symb, const ENUM_TIMEFRAMES TimeFrame, const datetime time ) { return(Bars(Symb, TimeFrame, SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_FIRSTDATE), time) + Bars(Symb, TimeFrame, time, SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_LASTBAR_DATE)) == SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_BARS_COUNT)); } // タイムバーを返す int iBarShift( const string Symb, const ENUM_TIMEFRAMES TimeFrame, datetime time ) { int Res = -1; datetime LastBar; time -= time % PeriodSeconds(TimeFrame); if (SeriesInfoInteger(Symb, TimeFrame, SERIES_LASTBAR_DATE, LastBar)) { if (time > LastBar) Res = (int)((LastBar - time) / PeriodSeconds(TimeFrame)); else { const int Shift = Bars(Symb, TimeFrame, time, LastBar); if (Shift > 0) { Res = Shift - 1; if (IsHole(Symb, TimeFrame, time)) Res++; } } } return(Res); } // バータイムを返す datetime iBarShift( const string Symb, const ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT, const int Pos = 0 ) { datetime Tmp[1]; CopyTime(Symb, TimeFrame, (Pos < 0) ? 0 : Pos, 1, Tmp); return(Tmp[0] - ((Pos < 0) ? Pos * PeriodSeconds(TimeFrame) : 0)); } // 右のチャート・バーを返す int ChartBarRight( const long chartID = 0 ) { return((int)(ChartGetInteger(chartID, CHART_FIRST_VISIBLE_BAR) - ChartGetInteger(chartID, CHART_WIDTH_IN_BARS) + 1)); } // 正しいチャート時間を返す datetime GetChartTimeRight( const long chartID = 0 ) { return(iBarShift(ChartSymbol(chartID), ChartPeriod(chartID), ChartBarRight(chartID))); } // 右のチャート時間を設定し、設定された時間を返す。 datetime SetChartTimeRight( datetime time, const long chartID = 0, const ulong MaxTime = 1 e5 ) { const string Symb = ChartSymbol(chartID); const ENUM_TIMEFRAMES period = ChartPeriod(chartID); const int Pos = iBarShift(Symb, period, time); const int PrevPos = ChartBarRight(chartID); if ((Pos != PrevPos) && ChartNavigate(chartID, CHART_END, -1 - Pos)) { const ulong StartTime = GetMicrosecondCount(); int NewPos = ChartBarRight(chartID); while (((NewPos != Pos)|| (NewPos == PrevPos)) && (GetMicrosecondCount() - StartTime < MaxTime) && !IsStopped()) { Sleep(0); NewPos = ChartBarRight(chartID); } } return(GetChartTimeRight(chartID)); } // 任意の配列の末尾に要素を追加する。 template <typename T> void AddArrayElement( T &Array[], const T Value, const int Reserve = 0 ) { const int Size = ArraySize(Array); ArrayResize(Array, Size + 1, Reserve); Array[Size] = Value; } // 各チャートの右バーの時刻を取得する。 int GetChartsTimeRight( datetime &RightTime[], long &Handles[] ) { ArrayFree(RightTime); ArrayFree(Handles); long handle = ChartFirst(); while (handle != INVALID_HANDLE) { AddArrayElement(RightTime, GetChartTimeRight(handle)); AddArrayElement(Handles, handle); handle = ChartNext(handle); } return(ArraySize(RightTime)); } // すべてのチャートに正しい時刻を設定する int SetChartsTimeRight( const datetime time, datetime &RightTime[], const long ExcludeHandle = 0 ) { ArrayFree(RightTime); long handle = ChartFirst(); while (handle != INVALID_HANDLE) { AddArrayElement(RightTime, (ExcludeHandle == handle) ? GetChartTimeRight(handle) : SetChartTimeRight(time, handle)); handle = ChartNext(handle); } return(ArraySize(RightTime)); } // 右のバーの時間が変化したチャートを返す long GetChangeChart( const datetime &PrevRightTime[]) { datetime Handles[]; datetime RightTime[]; long Res = ArraySize(PrevRightTime) ? 0 : ChartID(); for (int i = MathMin(ArraySize(PrevRightTime), GetChartsTimeRight(RightTime, Handles)) - 1; i >= 0; i--) if (RightTime[i] != PrevRightTime[i]) { Res = Handles[i]; break; } return(Res); } // 正しい時刻までにすべてのチャートを同期し、同期されたチャートの数を返す int SyncCharts() { static datetime PrevRightTime[]; const long handle = GetChangeChart(PrevRightTime); return(handle ? SetChartsTimeRight(GetChartTimeRight(handle), PrevRightTime, handle) : 0); } fxsaber 2023.01.17www.mql5.com Профиль трейдера Dmitry Fedoseev 2023.01.23 06:07 #14 Дима Джумок #:ドミトリー、返信ありがとう。残念なことに、googleはあなたの開発へのリンクしか示してくれません。フォーラムも代替案を提示してくれませんでした。Admiral Marketはそのような機能を提供していますが、彼らのプラットフォーム上でのみで、MT5ではありません。親愛なるfxsaberは 2017年にMT5用の異なるタイムフレームにおける1つの商品のチャートの同時自動スクロール - テクニカル指標と外国為替市場分析 - MQL5 Algo-Tradersフォーラム(最後のコメントに指標のテキストがあります)を提供しましたが、私はそれをMT5ターミナル用に変換する方法を知らないので、それが動作するバリエーションであるかどうか判断できません。もしよろしければ、変換していただけないでしょうか。 それなら、自分で直したほうがいい。 私は今ダウンロードしました、それは動作します。一つ不便な点があります - インデントが有効になっていない場合、スクロール・チャートの必要なバーが端からはみ出し、線が見えません。これは修正しなければならない。 スクリプトで何が起こっているのですか?スクリプトは、新しいティックの到着とともに自動スクロールを無効にします。 ツールバーのこのボタンは、スクリプトがアタッチされるとすべてのチャートで自動的に押されるはずです: Denis K. 2025.07.21 10:35 #15 ボムシェルうまくいったありがとうございました! 12 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
確かに、チャートをスクロールして履歴を見ようとすると、新しいティックが到着すると、チャートは一番最初に戻ってしまう。この場合、なぜそれが必要なのでしょうか?M1で最後のローソク足を描画すると、他のすべてのTFでも最後のローソク足になることはすでに知っています。そして、このインジケーターがすべてのウィンドウにないと、最後のローソク足は自動的に再描画されます。
このインジケーターは、次の言語変更の後に壊れました。もっと探してみてください。
言語が変わってから壊れてしまった。もっと探してみてください。
ドミトリー、返信ありがとう。残念なことに、googleはあなたの開発へのリンクしかくれません。フォーラムも代替案を提示してくれませんでした。Admiral Marketはそのような機能を提供していますが、彼らのプラットフォーム上でのみで、MT5ではありません。親愛なるfxsaberは 2017年にMT5用の異なるタイムフレームにおける1つの商品のチャートの同時自動スクロール - テクニカル指標と外国為替市場分析 - MQL5 Algo-Tradersフォーラム(最後のコメントに指標のテキストがあります)を提供しましたが、私はそれをMT5ターミナル用に変換する方法を知らないので、それが動作するバリエーションであるかどうかを判断することができません。もしよろしければ、変換していただけないでしょうか。
ドミトリー、返信ありがとう。残念なことに、googleはあなたの開発へのリンクしか示してくれません。フォーラムも代替案を提示してくれませんでした。Admiral Marketはそのような機能を提供していますが、彼らのプラットフォーム上でのみで、MT5ではありません。親愛なるfxsaberは 2017年にMT5用の異なるタイムフレームにおける1つの商品のチャートの同時自動スクロール - テクニカル指標と外国為替市場分析 - MQL5 Algo-Tradersフォーラム(最後のコメントに指標のテキストがあります)を提供しましたが、私はそれをMT5ターミナル用に変換する方法を知らないので、それが動作するバリエーションであるかどうか判断できません。もしよろしければ、変換していただけないでしょうか。
それなら、自分で直したほうがいい。
私は今ダウンロードしました、それは動作します。一つ不便な点があります - インデントが有効になっていない場合、スクロール・チャートの必要なバーが端からはみ出し、線が見えません。これは修正しなければならない。
スクリプトで何が起こっているのですか?スクリプトは、新しいティックの到着とともに自動スクロールを無効にします。
ツールバーのこのボタンは、スクリプトがアタッチされるとすべてのチャートで自動的に押されるはずです: