Как рисовать контрольные линии каждые 10 пунктов - страница 2

 

Конечно! Это просто время. И все, что нам нужно сделать, это добавить время к Time[0], чтобы прямоугольник простирался в будущее (за пределы правой части графика). Спасибо. Кстати, левую сторону я нашел простым использованием Bars.

datetime timeGap = (Time[0] - Time[1]); // get the amount of time between bars
ObjectSet("tensRec"+ix,OBJPROP_TIME2,Time[0] + (timeGap*150)); // multiplying timeGap by 150 seems to extend the rectangle off the right-hand window edge

Цвет, который я использую, очень тонкий. Вам почти нужно искать прямоугольники, чтобы увидеть их.

ObjectSet("tensRec"+ix,OBJPROP_COLOR,0x080808) 
 
MisterDog:

Конечно! Это просто время. И все, что нам нужно сделать, это добавить время к Time[0], чтобы прямоугольник простирался в будущее (за пределы правой части графика). Спасибо. Кстати, левую сторону я нашел простым использованием Bars.

Цвет, который я использую, очень тонкий. Вам почти нужно искать прямоугольники, чтобы увидеть их.

Привет, MisterDog,

Можем ли мы посмотреть фотографии?

В понедельник Time[0] находится в понедельник, а Time [1] находится в субботу - это и есть разрыв в понедельник ;)

:D

 

Я полагаю, что поскольку я использую одноминутный график, то то, о чем вы говорите, произойдет само собой за одну минуту. Думаю, мы увидим, что произойдет на выходных.

Вот картинка.

 
onewithzachy:

Привет, MisterDog,

Все просто.

1. Получите временное расстояние между одним баром и другим. Мы можем получить это, вычитая время текущего бара из времени предыдущего бара или умножая период на 60 секунд, выберите последний вариант, потому что в понедельник есть временной разрыв.

У меня нет разрыва во времени в понедельник, мой первый бар недели начинается в воскресенье ;-)

Почему бы не добавить PERIOD_W1 * 60 к времени окончания? Это должно почти покрыть любые разрывы... ;-)

 
MisterDog:

Цвет, который я использую, очень тонкий. Чтобы увидеть прямоугольники, их нужно искать.

Теперь я "понял", что вы имели в виду.

RaptorUK

У меня нет разрыва во времени в понедельник, мой первый бар недели начинается в воскресенье ;-)

Почему бы не добавить PERIOD_W1 * 60 к времени окончания? Это должно почти покрыть все разрывы... ;-)

Тогда у вас есть разрыв в воскресенье ;).

 
  1. MisterDog:
    Скажите, есть ли способ использовать что-то вроде "подстановочного знака" для таких вещей, как ObjectDelete? Я хотел бы сделать что-то вроде этого, ObjectDelete("tensLines "*); другими словами, удалить все, что начинается с "tensLines".
    #define ONDA_BEGINS   0
    #define ONDA_CONTAINS 1
    void ObjectNameDeleteAll(string name, int where=ONDA_BEGINS, int type=EMPTY){
        for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--){
            string on   = ObjectName(iObj);
            int    iPos = StringFind(on, name);
            if (iPos < 0)                         continue;
            if (iPos > 0 && where == ONDA_BEGINS) continue;
            if      (type == EMPTY))         ObjectDelete(on);
            else if (type == ObjectType(on)) ObjectDelete(on);
        }
    }
    
    Не компилировалось, не тестировалось.

  2. Также нет причин удалять их, просто переместите их на новую позицию. Из моего кода:
    void Rect(string name, datetime T0,double P0, datetime T1,double P1, color clr){
        if (!Show.Objects)  return;                         #define WINDOW_MAIN 0
        if      (ObjectMove( name, 0, T0, P0 ))     ObjectMove(name, 1, T1, P1);
        else if (!ObjectCreate( name, OBJ_RECTANGLE, WINDOW_MAIN, T0, P0, T1, P1 ))
            Alert("ObjectCreate(",name,",RECT) failed: ", GetLastError() );
        if (!ObjectSet(name, OBJPROP_COLOR, clr )) // Allow color change
            Alert("ObjectSet(", name, ",Color) [3] failed: ", GetLastError());
        string  P0t = PriceToStr(P0);           if (MathAbs(P0 - P1) >= Point)
                P0t = StringConcatenate(P0t, " to ", PriceToStr(P1));
        if (!ObjectSetText(name, P0t, 10))
            Alert("ObjectSetText(",name,") [1] failed: ", GetLastError());
    }
    

  3. RaptorUK:
    Почему бы не добавить PERIOD_W1 * 60 к времени окончания? Это должно почти покрыть все пробелы... ;-)
    Почему бы просто не спроецировать прямоугольник на весь путь в будущее?
    #define INF 0x6FFFFFFF // Not quite infinite, Jul 2029, or 1,879,048,191
    ObjectSet("tensRec"+ix,OBJPROP_TIME2,INF);
 
WHRoeder:
Почему бы просто не спроецировать прямоугольник в будущее?

Большое спасибо WHRoeder. Я возьму его :D

[ EDIT: Так или иначе, большое спасибо.]

 
WHRoeder:
  1. RaptorUK:
    Почему бы не добавить PERIOD_W1 * 60 к времени окончания? Это должно почти покрыть все пробелы... ;-)
    Почему бы просто не спроецировать прямоугольник на весь путь в будущее?
Я не хотел быть жадным ;-)
 
RaptorUK:
Я не хотел быть жадным ;-)
Жадность - это хорошо, знаете ли ;)
 
onewithzachy:
Жадность - это хорошо, знаете ли ;)
Я на собственном опыте убедился, что жадность - это очень, очень плохо. ;-)