Т.е., например, указать INT_MAX. Либо отрицательное значение (сам не пробовал, но как идею - можно попробовать).
int win_ind=1;
intOnInit()
{
//---
chart_id=ChartID();
//--- set balans indMqlParam params[1];
params[0].type =TYPE_STRING;
params[0].string_value =name_ind;
handle=IndicatorCreate(ChartSymbol(chart_id),ChartPeriod(chart_id),IND_CUSTOM,win_ind,params); // вот тут ещё // прокатит несуществующее окноChartIndicatorAdd(chart_id,win_ind,handle); // а вот тут уже нужно точно знать его номер
win_ind=ChartWindowFind(chart_id,name_ind); // а получить его можно только тут//---return(0);
}
Поэтому приходится задавать явно значение win_ind, иначе работать не будет.
Т.е., например, указать INT_MAX. Либо отрицательное значение (сам не пробовал, но как идею - можно попробовать).
Вот потому что не пробовал, поэтому такое и советуете
ОК, если Вы проверили идею с указанием отрицательных значений и она не подтвердилась - остановимся на первой подсказке:
"Надо просто указать номер несуществующего окна, например, указать INT_MAX". Т.е. в приведённом примере указать
ChartIndicatorAdd(chart_id,INT_MAX,handle); // указываем заранее несуществующий номер подокна
Или в Вашем случае при указании номера несуществующего окна функция ChartIndicatorAdd отказывается работать и создавать новое подокно?
Кстати, не совсем понятно, зачем в Вашем коде одна и та же переменная
int win_ind=1;
сначала используется в качестве четвёртого параметра функции IndicatorCreate (где четвёртый параметр == количество параметров, передаваемых в массиве parameters_array[]), а затем - в качестве второго параметра функции ChartIndicatorAdd (где второй параметр == номер подокна графика).
Кстати, не совсем понятно, зачем в Вашем коде одна и та же переменная
сначала используется в качестве четвёртого параметра функции IndicatorCreate (где четвёртый параметр == количество параметров, передаваемых в массиве parameters_array[]) а затем в качестве второго параметра функции ChartIndicatorAdd (где второй параметр == номер подокна графика).
Семён Семёныч, ну точно же. Это я по недогляду прописывал явно везде win_ind как 1 а потом когда заменял на переменную все 1 сменил на win_ind. Вот оно током и шибает :о)
правильный код будет вот такой
int win_ind=-1;
intOnInit()
{
//---
chart_id=ChartID();
//--- set balans indMqlParam params[1];
params[0].type =TYPE_STRING;
params[0].string_value =name_ind;
handle=IndicatorCreate(ChartSymbol(chart_id),ChartPeriod(chart_id),IND_CUSTOM,1,params);// 1- количество параметров ChartIndicatorAdd(chart_id,win_ind,handle); // тут поскольку win_ind=-1 создаём новое окно
win_ind=ChartWindowFind(chart_id,name_ind); // а тут получаем значение win_ind //---return(0);
}
теперь да, всё работает автоматически. Спасибо за разбор кода, одна голова хорошо а две лучше :о)
С полгода назад высказывались пожелания по расширению списка отложенных ордеров. Например, ввести ордера типа OCO и т.п. Как на сегодняшний день обстоят дела с продвижением этих идей? Можно ли надеяться на появление (хотя бы через год) новых типов отложенных ордеров?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Надо просто указать номер несуществующего окна.
Т.е., например, указать INT_MAX. Либо отрицательное значение (сам не пробовал, но как идею - можно попробовать).
Поэтому приходится задавать явно значение win_ind, иначе работать не будет.
Urain:
Надо просто указать номер несуществующего окна.
Т.е., например, указать INT_MAX. Либо отрицательное значение (сам не пробовал, но как идею - можно попробовать).
Вот потому что не пробовал, поэтому такое и советуете
ОК, если Вы проверили идею с указанием отрицательных значений и она не подтвердилась - остановимся на первой подсказке:
"Надо просто указать номер несуществующего окна, например, указать INT_MAX". Т.е. в приведённом примере указать
Или в Вашем случае при указании номера несуществующего окна функция ChartIndicatorAdd отказывается работать и создавать новое подокно?
Кстати, не совсем понятно, зачем в Вашем коде одна и та же переменная
сначала используется в качестве четвёртого параметра функции IndicatorCreate (где четвёртый параметр == количество параметров, передаваемых в массиве parameters_array[]), а затем - в качестве второго параметра функции ChartIndicatorAdd (где второй параметр == номер подокна графика).Читать внимательно.
https://www.mql5.com/ru/docs/chart_operations/chartindicatorstotal
Читать внимательно.
https://www.mql5.com/ru/docs/chart_operations/chartindicatorstotal
Вы об этом?
CHART_WINDOWS_TOTAL
Общее количество окон графика, включая подокна индикаторов
int r/o
Кстати, не совсем понятно, зачем в Вашем коде одна и та же переменная
сначала используется в качестве четвёртого параметра функции IndicatorCreate (где четвёртый параметр == количество параметров, передаваемых в массиве parameters_array[]) а затем в качестве второго параметра функции ChartIndicatorAdd (где второй параметр == номер подокна графика).Семён Семёныч, ну точно же. Это я по недогляду прописывал явно везде win_ind как 1 а потом когда заменял на переменную все 1 сменил на win_ind. Вот оно током и шибает :о)
правильный код будет вот такой
теперь да, всё работает автоматически. Спасибо за разбор кода, одна голова хорошо а две лучше :о)
Таки да :) Сделав двойной цикл можно перебрать все индюки чарта без особых проблем.
К сожалению, нет. Ордерная система меняться не будет.