Generelles Vorgehen bei mir wäre folgendermaßen:
1. Zeiten für Beginn und Ende der Messung festlegen
2. Wenn Zeitraum erreicht, Werte der Messung holen
3. Sobald Werte vorhanden, Objekt mit diesen Werten zeichnen
4. je nach Zeitfenster des Charts die xPosition der Objekte ändern
5. das passiert bei mir, wenn Bar Null/aktuell ist
Beispiel Code aus einem meiner Indikatoren:
Code:
extern int LabelShift = 2; // right shift from current bar (2)
for(i=5;i>=0;i--) // from oldest to current
{ // 8<--- Snip ---
if(i==0 && ShowLabels && !AllOff)
{
CreateLabel("mark1opn","opn."+NameMarket1,Mark1StartCol);
CreateLabel("mark1clo","clo."+NameMarket1,Mark1StopCol);
if(ShowPrices)
{
ChangeLabelText("mark1opn","opn."+NameMarket1+" "+DoubleToString(Mark1open[i],2) );
ChangeLabelText("mark1clo","clo."+NameMarket1+" "+DoubleToString(Mark1close[i],2) );
}
int LShiftMult=_Period*MinInSec; // move description by x bars
datetime ShiftTime=Time[i]+(LabelShift*LShiftMult);
MoveLabel("mark1opn",ShiftTime,Mark1open[i]);
MoveLabel("mark1clo",ShiftTime,Mark1close[i]);
} // ShowLabels
}
So wie ich hier bei Bar Null die Labels verschiebe, so änderst Du von Deinem Rechteck den 2.Zeitpreis (also den Endpunkt-Preis) um ShiftTime.
Meiner Meinung nach wäre das in einem Timer besser aufgehoben als in der OnTick, die kleinste darstellbare Einheit auf dem Chart ist eine Minute und ich wüßte nicht, warum man da auf Tickebene runtergehen wollte - nur ne Anmerkung.
Ich hoffe, das hilft Dir schon mal weiter. AVT