Как правильно ставить стрелки?

 

Есть индикатор, который ставит стрелки сверху и снизу:

С нижними стрелками проблем нет, т.к. OBJ_ARROW позиционируется по левому верхнему углу занимаемого им прямоугольника. Но по этой же причине при изменении масштаба или переходе на другой таймфрейм верхние стрелки имеют манеру уезжать вверх или вниз, вплоть до полной ненаблюдаемости (оказываясь на пиках за пределами графика или полностью погружаясь в него). Кто-ннибудь нашёл простой способ борьбы с этой проблемой? (Понятно, что в принципе можно сделать какой-нибудь switch на все случаи жизни, но что-то не хочется). Кстати, будь возможность задавать способ позиционирования - по верхнему или по нижнему углу, проблемы не было бы.

P.S. Хм, вдруг подумал, что вопрос в названии топика можно трактовать и шире :). Как правильно ставить стрелки, чтобы получился Грааль? :) А то этот индикатор вроде неплохо определяет значительную часть "моментов выбора", когда рынок решает развернуться или идти дальше, но вот каким будет выбор ответа не даёт.

 

Если это индикатор, то зачем выводить стрелки через OBJ_ARROW? Можно, например, так:

   SetIndexBuffer (0,BUY);
   SetIndexStyle  (0,DRAW_ARROW,1,3);
   SetIndexEmptyValue(0,0);
   SetIndexArrow  (0,233);
 
   SetIndexBuffer (1,SELL);
   SetIndexStyle  (1,DRAW_ARROW,1,3);
   SetIndexEmptyValue(1,0);
   SetIndexArrow  (1,234);
 
sashken:

Если это индикатор, то зачем выводить стрелки через OBJ_ARROW? Можно, например, так:

Согласен что это позволяет обойти проблему, но есть и аргументы за OBJ_ARROW: Во-первых, я могу отказаться от буферов, что на миллионе минутных баров (а индикатор прекрасно работает и на минутках) даст заметную экономию памяти - для тестера это немаловажно. Во-вторых, если работают разные индикаторы, стрелки могут накладываться друг на друга, а OBJ_ARROW позволит разнести их по высоте. Вот например примерно тот же участок с сигналами разного уровня этого же индикатора

 
lna01:
sashken:

Если это индикатор, то зачем выводить стрелки через OBJ_ARROW? Можно, например, так:

Согласен что это позволяет обойти проблему, но есть и аргументы за OBJ_ARROW: Во-первых, я могу отказаться от буферов, что на миллионе минутных баров (а индикатор прекрасно работает и на минутках) даст заметную экономию памяти - для тестера это немаловажно. Во-вторых, если работают разные индикаторы, стрелки могут накладываться друг на друга, а OBJ_ARROW позволит разнести их по высоте. Вот например примерно тот же участок с сигналами разного уровня этого же индикатора


Ну уж не знаю какая там будет экономия памяти, но можно использовать IndicatorCounted(), или просто расчитывать индикатор на том кол-ве баров которое нужно. Стрелки из буферов можно тоже очень легко разносить по высоте:) Прибавь в одном индикаторе к Хаю 5 пунктов, а в другом 10 пунктов и все:)

 
sashken:
Ну уж не знаю какая там будет экономия памяти, но можно использовать IndicatorCounted(), или просто расчитывать индикатор на том кол-ве баров которое нужно. Стрелки из буферов можно тоже очень легко разносить по высоте:) Прибавь в одном индикаторе к Хаю 5 пунктов, а в другом 10 пунктов и все:)

Так в тестере всё равно всю историю проходить надо. Да к тому же подозреваю что память под буферы отводится на всю катушку, независимо от того, какая глубина расчёта истории задана. Насчёт разнесения по высоте соглашусь :). Но при смене таймфрейма и оно небось поедет :)

P.S. Вот недавно Slawa про память писал https://www.mql5.com/ru/forum/52072 . 8 Мегов на буфер конечно немного, но и не мало. А у меня хронические проблемы с памятью :)