Ошибки, баги, вопросы - страница 2145

 
fxsaber:

Подокно в OBJ_CHART появляется?

OBJ_CHART  с подокном появляются
 
A100:
OBJ_CHART  с подокном появляются

Советники на OBJ_CHART точно не запускаются (точнее, не работают). Поэтому по таймеру, похоже, нормально. Возможно, там все события не работают.

 
A100:

В таком виде С++ тоже выдает ошибку E2015

А если так записать:

то MQL компилирует без ошибок, а С++ сообщает об ошибке E2015 

Добрый день!

Спасибо за Ваше обращение, проверим

 
Evgeny Chernyshev:

Спасибо за Ваше обращение, проверим

Будет совсем плохо, если текущее рабочее состояние сменить на нерабочий C++-вариант. Полетит уже написанный MQL-код.

 
fxsaber:

Советники на OBJ_CHART точно не запускаются (точнее, не работают). Поэтому по таймеру, похоже, нормально. Возможно, там все события не работают.

OnCalculate работает, а OnTimer не работает

Советники и не должны запускаться\работать, поскольку нет прямого механизма их запуска наподобие ChartIndicatorAdd

 
A100:

OnCalculate работает, а OnTimer не работает

OnCalculate - запускается не на этом чарте. Вы хэндл создали, там он и живет.

Советники и не должны запускаться\работать, поскольку нет прямого механизма их запуска наподобие ChartIndicatorAdd

Через шаблон механизм запуска. Как со скриптом.


ЗЫ Сам рассматриваю OBJ_CHART чаще всего, как замечательный холст для рисования. За счет этого получается многое делать, например, конвертер BMP->GIF/PNG. А самое сильное - холст + на шкалы + объекты. Но это уже совсем отдельная ниша, т.к. сложно.

 
fxsaber:

OnCalculate - запускается не на этом чарте. Вы хэндл создали, там он и живет.

Если не на этом - почему он тогда нормально рисует (буферное рисование) в нужном подокне?

 
A100:

В индикаторе

::ChartWindowFind() возвращает -1 (другими словами не работает)


Пока индикатор не проинициализирован, он не знает номера подокна, в котором работает. Так как прикрепляется к окну только после удачной инициализации

Другими словами, вызывать ChartWindowFind() в OnInit индикатора - бесполезно

 
Slava:
Другими словами, вызывать ChartWindowFind() в OnInit индикатора - бесполезно

Вызов ChartWindowFind() в OnInit индикатора (индикатор тот же)

void OnStart()
{
        string name = "Test_i";
        int sub_window = 1;
        ChartIndicatorAdd( 0, sub_window, iCustom( NULL, PERIOD_CURRENT, name ));
}

Результат: 1:true:0
                 2:1:0

Все нормально определилось, напомню код OnInit индикатора

void OnInit()
{
//...
        ResetLastError();
        int sub_window = ChartWindowFind();
        Print( "2:", sub_window, ":", GetLastError());
}
 
A100:

Если не на этом - почему он тогда нормально рисует (буферное рисование) в нужном подокне?

Так расчет индикатора и его рисующая часть - это разные вещи. ChartWindowFind - это обращение к механизму, который отвечает за рисование индикатора. Т.е. это не сам индикатор даже.