Как нарисовать прямоугольник вокруг набора свечей в пользовательском индикаторе?

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

Что я должен делать?

У SetIndexStyle() такой возможности нет.

введите здесь описание изображения


person william007    schedule 08.02.2017    source источник


Ответы (1)


Выполнимо (но не с помощью каких-либо служб форматирования строк пользовательских индикаторов)

Учитывая сказанное выше,
размещение и форматирование прямоугольника должны быть запрограммированы явным образом, лучше всего с использованием принципиальной, многократно используемой идеи шаблона функции обработки объектов графического интерфейса, например:

void UpdateRECTANGLE( int      const     anObjIdNUM,
                      datetime const       fromTIME,
                      datetime const         toTIME,
                      double   const      fromPRICE,
                      double   const        toPRICE,
                      color    const         aCOLOR = clrDarkBlue,
                      int      const aLineTHICKNESS = 2,
                      int      const      aLineTYPE = STYLE_SOLID,
                      ){
#define aMainWINDOW   0

     string                         anInterimObjNAME = StringFormat( "GUI_RECTANGLE[%6d]", anObjIdNUM );
     if (  ObjectFind(              anInterimObjNAME ) == aMainWINDOW )
           ObjectDelete(            anInterimObjNAME );
     else: ObjectCreate( ChartID(), anInterimObjNAME, OBJ_RECTANGLE, 0, fromTIME, fromPRICE,
                                                                          toTIME,   toPRICE
                                                                          );         
     ObjectSet( anInterimObjNAME, OBJPROP_COLOR,         aCOLOR );
     ObjectSet( anInterimObjNAME, OBJPROP_BACK,          True );
     ObjectSet( anInterimObjNAME, OBJPROP_WIDTH,         aLineTHICKNESS );
     ObjectSet( anInterimObjNAME, OBJPROP_STYLE,         aLineTYPE );
     ObjectSet( anInterimObjNAME, OBJPROP_SELECTABLE,    GUI_SELECTABLE ); // ----------------------------------------- AVOIDS GUI interactions
     ObjectSet( anInterimObjNAME, OBJPROP_SELECTED,      False );
     return;
}

Эпилог:
вы также можете знать, что пользовательский индикатор — это немного рискованный фрагмент кода для размещения какой-либо тяжелой обработки, запутанного пересчета временных рядов, обработки транзакций с внешним кодом AI / ML. в, потому что, все, да все, графики терминала MetaTrader все делят, да, действительно, все SHARE единым потоком (и можно представить, какая блокировка/долгое зависание обработки может привести ко всем зависимым процессам, если все (опять же, YES, ALL) должны ждать, пока один общий блокирующий поток не получит достаточно тактов ЦП, чтобы завершить обработку всей очереди запросов всех другие эксперты графиков и зависимые от них вызовы пользовательских индикаторов разместили перед нашим запросом вызова.
Не звучит рискованно для ваших ушей? Поверьте мне, это... Много!

person user3666197    schedule 08.02.2017