Wenn ich nämlich versuche, das Diagramm zurückzublättern und die Historie zu betrachten, kehrt das Diagramm beim Eintreffen eines neuen Ticks an den Anfang zurück. Warum brauche ich das in diesem Fall? Ich weiß bereits, dass die letzte Kerze auf M1 auch die letzte Kerze für alle anderen TFs ist. Und ohne diesen Indikator werden in allen Fenstern die letzten Candlesticks automatisch neu gezeichnet.
Дима Джумок #: Wenn ich nämlich versuche, das Diagramm zurückzublättern und die Historie zu betrachten, kehrt das Diagramm beim Eintreffen eines neuen Ticks an den Anfang zurück. Warum brauche ich das in diesem Fall? Ich weiß bereits, dass die letzte Kerze auf M1 auch die letzte Kerze für alle anderen TFs ist. Und ohne diesen Indikator werden die letzten Candlesticks automatisch in allen Fenstern neu gezeichnet.
Er ging nach den nächsten Änderungen in der Sprache kaputt, ich habe hier noch einen anderen, der auch kaputt ist. Suchen Sie nach mehr, es gibt funktionierende hier.
Sie ging nach einer weiteren Änderung der Sprache kaputt, ich habe hier eine andere, die auch kaputt ist. Suchen Sie nach mehr, es gibt einige funktionierende hier.
Dmitry, ich danke dir für deine Antwort. Zu meinem Bedauern gibt Google nur Links zu Ihren Entwicklungen. Das Forum hat mir auch keine Alternative geboten. Admiral Market bietet eine solche Funktion aber nur auf ihrer Plattform und es ist nicht MT5. Der liebe fxsaber hat 2017 seine Variante Simultanes Autoscrolling von Charts für ein Instrument in verschiedenen Zeitrahmen für MT5 angeboten - Technische Indikatoren und Forex-Marktanalyse - MQL5 Algo-Traders Forum (es gibt den Indikator-Text im letzten Kommentar), aber ich weiß nicht, wie man es für MT5-Terminal konvertieren, so kann ich nicht feststellen, ob es eine funktionierende Variante ist. Wenn es Ihnen nichts ausmacht, konvertieren Sie ihn bitte, vielleicht funktioniert er ja.
// MQL4&5-Code// Synchronisierung aller Karten nach der richtigen Zeitsinputint TimerInterval = 1; // Aktualisierungsintervall in Millisekunden// Deaktiviert Auto-Scroll und Shift auf allen Diagrammenbool AutoShiftOff( void )
{
long handle = ChartFirst();
while (handle != INVALID_HANDLE)
{
ChartSetInteger(handle, CHART_SHIFT, false);
ChartSetInteger(handle, CHART_AUTOSCROLL, false);
handle = ChartNext(handle);
}
return(true);
}
constbool Init = EventSetMillisecondTimer(TimerInterval) && AutoShiftOff();
voidOnTimer()
{
SyncCharts();
}
// Gibt true zurück, wenn es zu dieser Zeit keinen Takt gibt ("Loch")bool IsHole( conststring Symb, constENUM_TIMEFRAMES TimeFrame, constdatetime 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));
}
// Gibt den Zeitbalken zurückintiBarShift( conststring Symb, constENUM_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
{
constint Shift = Bars(Symb, TimeFrame, time, LastBar);
if (Shift > 0)
{
Res = Shift - 1;
if (IsHole(Symb, TimeFrame, time))
Res++;
}
}
}
return(Res);
}
// Gibt die Taktzeit zurückdatetimeiBarShift( conststring Symb, constENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT, constint Pos = 0 )
{
datetime Tmp[1];
CopyTime(Symb, TimeFrame, (Pos < 0) ? 0 : Pos, 1, Tmp);
return(Tmp[0] - ((Pos < 0) ? Pos * PeriodSeconds(TimeFrame) : 0));
}
// Gibt den rechten Balken des Diagramms zurückint ChartBarRight( constlong chartID = 0 )
{
return((int)(ChartGetInteger(chartID, CHART_FIRST_VISIBLE_BAR) - ChartGetInteger(chartID, CHART_WIDTH_IN_BARS) + 1));
}
// Gibt die richtige Diagrammzeit zurückdatetime GetChartTimeRight( constlong chartID = 0 )
{
return(iBarShift(ChartSymbol(chartID), ChartPeriod(chartID), ChartBarRight(chartID)));
}
// Setzt die rechte Diagrammzeit, gibt die gesetzte Zeit zurückdatetime SetChartTimeRight( datetime time, constlong chartID = 0, constulong MaxTime = 1 e5 )
{
conststring Symb = ChartSymbol(chartID);
constENUM_TIMEFRAMES period = ChartPeriod(chartID);
constint Pos = iBarShift(Symb, period, time);
constint PrevPos = ChartBarRight(chartID);
if ((Pos != PrevPos) && ChartNavigate(chartID, CHART_END, -1 - Pos))
{
constulong StartTime = GetMicrosecondCount();
int NewPos = ChartBarRight(chartID);
while (((NewPos != Pos)|| (NewPos == PrevPos)) && (GetMicrosecondCount() - StartTime < MaxTime) && !IsStopped())
{
Sleep(0);
NewPos = ChartBarRight(chartID);
}
}
return(GetChartTimeRight(chartID));
}
// Hinzufügen eines Elements an das Ende eines beliebigen Arraystemplate <typename T>
void AddArrayElement( T &Array[], const T Value, constint Reserve = 0 )
{
constint Size = ArraySize(Array);
ArrayResize(Array, Size + 1, Reserve);
Array[Size] = Value;
}
// Ermittelt die Zeit des rechten Balkens eines jeden Diagrammsint 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));
}
// Legt die richtige Zeit für alle Diagramme festint SetChartsTimeRight( constdatetime time, datetime &RightTime[], constlong 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));
}
// Gibt das Diagramm zurück, dass sich die Zeit des rechten Balkens geändert hatlong GetChangeChart( constdatetime &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);
}
// Synchronisiert alle Charts nach der richtigen Zeit, gibt die Anzahl der synchronisierten Charts zurückint SyncCharts()
{
staticdatetime PrevRightTime[];
constlong handle = GetChangeChart(PrevRightTime);
return(handle ? SetChartsTimeRight(GetChartTimeRight(handle), PrevRightTime, handle) : 0);
}
Dmitry, ich danke Ihnen für Ihre Antwort. Zu meinem Bedauern gibt Google nur Links zu Ihren Entwicklungen. Das Forum hat mir auch keine Alternative geboten. Admiral Market bietet eine solche Funktion aber nur auf ihrer Plattform und es ist nicht MT5. Der liebe fxsaber hat 2017 seine Variante Simultanes Autoscrolling von Charts für ein Instrument in verschiedenen Zeitrahmen für MT5 angeboten - Technische Indikatoren und Forex-Marktanalyse - MQL5 Algo-Traders Forum (den Indikatortext gibt es im letzten Kommentar), aber ich weiß nicht, wie ich ihn für das MT5-Terminal konvertieren kann, daher kann ich nicht feststellen, ob es eine funktionierende Variante ist. Wenn es Ihnen nichts ausmacht, konvertieren Sie ihn bitte, vielleicht funktioniert er ja.
Dann ist es besser, Ihre eigene zu reparieren.
Ich habe meine jetzt heruntergeladen, sie funktioniert. Eine Unannehmlichkeit - wenn die Einrückungen nicht aktiviert sind, geht der erforderliche Balken auf dem Rolldiagramm über den Rand hinaus und die Linie ist nicht sichtbar. Das muss noch korrigiert werden.
Was ist in Ihrem Skript los, warum funktioniert es nicht? Das Skript deaktiviert den automatischen Bildlauf bei Erreichen eines neuen Ticks.
Diese Schaltfläche in der Symbolleiste sollte bei allen Charts automatisch gedrückt werden, wenn das Skript angehängt ist:
Wenn ich nämlich versuche, das Diagramm zurückzublättern und die Historie zu betrachten, kehrt das Diagramm beim Eintreffen eines neuen Ticks an den Anfang zurück. Warum brauche ich das in diesem Fall? Ich weiß bereits, dass die letzte Kerze auf M1 auch die letzte Kerze für alle anderen TFs ist. Und ohne diesen Indikator werden die letzten Candlesticks automatisch in allen Fenstern neu gezeichnet.
Er ging nach den nächsten Änderungen in der Sprache kaputt, ich habe hier noch einen anderen, der auch kaputt ist. Suchen Sie nach mehr, es gibt funktionierende hier.
Sie ging nach einer weiteren Änderung der Sprache kaputt, ich habe hier eine andere, die auch kaputt ist. Suchen Sie nach mehr, es gibt einige funktionierende hier.
Dmitry, ich danke dir für deine Antwort. Zu meinem Bedauern gibt Google nur Links zu Ihren Entwicklungen. Das Forum hat mir auch keine Alternative geboten. Admiral Market bietet eine solche Funktion aber nur auf ihrer Plattform und es ist nicht MT5. Der liebe fxsaber hat 2017 seine Variante Simultanes Autoscrolling von Charts für ein Instrument in verschiedenen Zeitrahmen für MT5 angeboten - Technische Indikatoren und Forex-Marktanalyse - MQL5 Algo-Traders Forum (es gibt den Indikator-Text im letzten Kommentar), aber ich weiß nicht, wie man es für MT5-Terminal konvertieren, so kann ich nicht feststellen, ob es eine funktionierende Variante ist. Wenn es Ihnen nichts ausmacht, konvertieren Sie ihn bitte, vielleicht funktioniert er ja.
Dmitry, ich danke Ihnen für Ihre Antwort. Zu meinem Bedauern gibt Google nur Links zu Ihren Entwicklungen. Das Forum hat mir auch keine Alternative geboten. Admiral Market bietet eine solche Funktion aber nur auf ihrer Plattform und es ist nicht MT5. Der liebe fxsaber hat 2017 seine Variante Simultanes Autoscrolling von Charts für ein Instrument in verschiedenen Zeitrahmen für MT5 angeboten - Technische Indikatoren und Forex-Marktanalyse - MQL5 Algo-Traders Forum (den Indikatortext gibt es im letzten Kommentar), aber ich weiß nicht, wie ich ihn für das MT5-Terminal konvertieren kann, daher kann ich nicht feststellen, ob es eine funktionierende Variante ist. Wenn es Ihnen nichts ausmacht, konvertieren Sie ihn bitte, vielleicht funktioniert er ja.
Dann ist es besser, Ihre eigene zu reparieren.
Ich habe meine jetzt heruntergeladen, sie funktioniert. Eine Unannehmlichkeit - wenn die Einrückungen nicht aktiviert sind, geht der erforderliche Balken auf dem Rolldiagramm über den Rand hinaus und die Linie ist nicht sichtbar. Das muss noch korrigiert werden.
Was ist in Ihrem Skript los, warum funktioniert es nicht? Das Skript deaktiviert den automatischen Bildlauf bei Erreichen eines neuen Ticks.
Diese Schaltfläche in der Symbolleiste sollte bei allen Charts automatisch gedrückt werden, wenn das Skript angehängt ist: