Вот эта строчка, прописанная в OnInit() изменит самый первый уровень индикатора на значение, записанное в переменной new_value_0:
Вот эта строчка, изменит второй уровень индикатора на значение переменной new_value_1:
... и т.д.
Alexey Viktorov:
Похоже что ему не нужно решение вопроса, а нужно просто охаять и МТ и MQL потому, что нет возможности прочесть параметр заданный в #property
По моему не один из вас не понимает о чём идёт речь. Я не хочу установить уровень роботом хотя изначально это и предполагается. Я хочу его считать при его изменении! в процессе работы на графике. И самое важное сделать это не через inputs. Я не пытаюсь обсерать не кого я пытаюсь найти объяснение как это сделать правильно. И какая ячейка памяти за это отвечает если уж на то пошло и нету функции считывания уровня в процессе исполнения программы. Теперь понятно что я хочу?
По моему не один из вас не понимает о чём идёт речь. Я не хочу установить уровень роботом хотя изначально это и предполагается. Я хочу его считать при его изменении! в процессе работы на графике. И самое важное сделать это не через inputs. Я не пытаюсь обсерать не кого я пытаюсь найти объяснение как это сделать правильно. И какая ячейка памяти за это отвечает если уж на то пошло и нету функции считывания уровня в процессе исполнения программы. Теперь понятно что я хочу?
Нет, не понятно.
Если вы хотите НЕ через input (И самое важное сделать это не через inputs), то значит вы его сами и меняете программой. Зачем тогда узнавать, раз вы сами значение программой устанавливаете?
В момент, когда вы положили в карман червонец, как вам узнать сколько вы в карман положили?
Если вы хотите НЕ через input (И самое важное сделать это не через inputs), то значит вы его сами и меняете программой. Зачем тогда узнавать, раз вы сами значение программой устанавливаете?
В момент, когда вы положили в карман червонец, как вам узнать сколько вы в карман положили?
Если вы хотите НЕ через input (И самое важное сделать это не через inputs), то значит вы его сами и меняете программой. Зачем тогда узнавать, раз вы сами значение программой устанавливаете?
В момент, когда вы положили в карман червонец, как вам узнать сколько вы в карман положили?
Вы думаете о том что всё время индикатор контролирует уровень который был задан из начально.
А я пред пологаю что уровень может сменить пользователь по своим потребностям и индикатор должен на это отреагировать и подстроится под новые параметры!
Для этого и нужно считывать сам уровень с графика а не пытатса его нарисовать заново.
Вы думаете о том что всё время индикатор контролирует уровень который был задан из начально.
А я пред пологаю что уровень может сменить пользователь по своим потребностям и индикатор должен на это отреагировать и подстроится под новые параметры!
Для этого и нужно считывать сам уровень с графика а не пытатса его нарисовать заново.
Не выдумывайте за меня то, о чём я могу думать.
Я вижу, что вы, вместо решения вопроса, выдумываете себе причины его не решать.
Если вы предполагаете, что уровень мог сменить пользователь, то это значит, что вы сами себе противоречите: (И самое важное сделать это не через inputs)
А уж если не делать это через внешние переменные, и если учитывать ваш ответ Андрею: "Нет не с другой программы", то вывод напрашивается один: вы сами программно задаёте уровень внутри индикатора. И индикатор о нём всё знает. Чего тогда сделать не можете - не понимаю.
Ну сменить значение input пользователем конечно вполне можно и на лету. Правда для этого как минимум понадобиться панелька, в которой можно ввести это значение. Правда не совсем понятно зачем лишние извращения, если можно перезапустить индикатор с измененным input.
Но как говориться на вкус и цвет, карандаши разные.
По моему не один из вас не понимает о чём идёт речь. Я не хочу установить уровень роботом хотя изначально это и предполагается. Я хочу его считать при его изменении! в процессе работы на графике. И самое важное сделать это не через inputs. Я не пытаюсь обсерать не кого я пытаюсь найти объяснение как это сделать правильно. И какая ячейка памяти за это отвечает если уж на то пошло и нету функции считывания уровня в процессе исполнения программы. Теперь понятно что я хочу?
А конец моей фразы понятен? Нет и не будет такой возможности. Следовательно зачем биться лбом о бетонную стену?
Можно вообще не писать
Достаточно в OnInit() вписать
Да можно если задуманно уровень который не изменяется в процесе обработки данных.
//--- количество окон на графике (всегда есть хотя бы одно главное окно) int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL); //--- про ходим по окнам for(int w=0;w<windows;w++) { //--- сколько индикаторов в данном окне/подокне int total=ChartIndicatorsTotal(0,w); //--- переберем все индикаторы в окне for(int i=0;i<total;i++) { //--- получим короткое имя индикатора string name=ChartIndicatorName(0,w,i); //--- получим хэндл индикатора int handle=ChartIndicatorGet(0,w,name); //--- выведем в журнал if(name=="RSIm"&&w>0) PrintFormat("Window=%d, index=%d, Name=%s, handle=%d",w,i,name,handle); int objeto=ObjectsTotal(0,w,-1); for(int j=0;j<objeto;j++) { PrintFormat("Name=%s,",ObjectName(ChartID(),j,i,-1)); } //--- обязательно освобождаем хендл индикатора, как только он становится ненужным IndicatorRelease(handle); } }
Я использовал вот этот код чтоб найти обекты на графике где располагается мой индикатор но он так не чего не показал связоное с уровнями. Что я пропустил или что я не так делаю?
Да можно если задуманно уровень который не изменяется в процесе обработки данных.
//--- количество окон на графике (всегда есть хотя бы одно главное окно)int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
//--- про ходим по окнамfor(int w=0;w<windows;w++)
{
//--- сколько индикаторов в данном окне/подокнеint total=ChartIndicatorsTotal(0,w);
//--- переберем все индикаторы в окнеfor(int i=0;i<total;i++)
{
//--- получим короткое имя индикатораstring name=ChartIndicatorName(0,w,i);
//--- получим хэндл индикатораint handle=ChartIndicatorGet(0,w,name);
//--- выведем в журналif(name=="RSIm"&&w>0)
PrintFormat("Window=%d, index=%d, Name=%s, handle=%d",w,i,name,handle);
int objeto=ObjectsTotal(0,w,-1);
for(int j=0;j<objeto;j++)
{
PrintFormat("Name=%s,",ObjectName(ChartID(),j,i,-1));
}
//--- обязательно освобождаем хендл индикатора, как только он становится ненужнымIndicatorRelease(handle);
}
}
Я использовал вот этот код чтоб найти обекты на графике где располагается мой индикатор но он так не чего не показал связоное с уровнями. Что я пропустил или что я не так делаю?
Сушествуют функцыи Get и Set В других языках. Set Отпровляем параметры а Get Получаем. Как пользоватса Get в MQL5?
Второй вопрос попроще если кто сталкивался.
#property indicator_level1 30 - Задал параметр. При Загрузки индикатора на график. Мне его ресует.
В коде програме функцыей ColorBuffer[] изменяю линию на другой цвет если линия опускаетса ниже данного параметра.
И тут родилась проблема. Если захожу в индикатор и меняю данный параметр на другой даже при загрузке индикатора линия уровня ресуетса там где надо а сам индикатор расчитывает всё по тому параметру что установлен раньше тобиж #property indicator_level1 30
Каким образом я должен обращятса к данному уровню чтоб можно было потом его менять в ходе исполнение программы?
- Уже испробывал провирять параметр. И заново пересчитывать всю цепь индикатора.
Кроме директивы #property установить уровень индикатора можно функцией
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);
Соответственно этот уровень надо задать во входящих параметрах индикатора. В таком случае, уровень рисоваться будет по заданному значению и менять его надо тоже по этому значению.
Тестовый вариант
#property indicator_separate_window#property indicator_buffers1#property indicator_type1DRAW_LINE#property indicator_plots1#property indicator_color1clrGreenYellow#property indicator_level10 // Можно вообще это не писать#property indicator_levelcolorclrPurpleinputdouble level = 0.6;
double buf[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingSetIndexBuffer(0, buf, INDICATOR_DATA);
IndicatorSetDouble(INDICATOR_LEVELVALUE, 0, level);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---int i = 0, limit = prev_calculated == 0 ? 0 : rates_total-1;
for(i = limit; i < rates_total; i++)
{
buf[i] = i%2;
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
Потом вы сочинили что есть необходимость программно всем индикаторам переназначить уровни. Даже тем в которых уровни не предусмотрены.
Я вот чего не понимаю: Почему вместо того, чтобы взять готовый код, проверить, покрутить его и так и эдак, вы вступаете в обсуждение?Вы считаете что все тут чаще просто пишут не проверенные варианты советов?
Я использовал вот этот код чтоб найти обекты на графике где располагается мой индикатор но он так не чего не показал связоное с уровнями. Что я пропустил или что я не так делаю?
Вам уже отвечали на вопрос.
Вот эта строчка, прописанная в OnInit() изменит самый первый уровень индикатора на значение, записанное в переменной new_value_0:
Вот эта строчка, изменит второй уровень индикатора на значение переменной new_value_1:
... и т.д.
Похоже что ему не нужно решение вопроса, а нужно просто охаять и МТ и MQL потому, что нет возможности прочесть параметр заданный в #property
По моему не один из вас не понимает о чём идёт речь.
Я не хочу установить уровень роботом хотя изначально это и предполагается.
Я хочу его считать при его изменении! в процессе работы на графике.
И самое важное сделать это не через inputs.
Я не пытаюсь обсерать не кого я пытаюсь найти объяснение как это сделать правильно.
И какая ячейка памяти за это отвечает если уж на то пошло и нету функции считывания уровня в процессе исполнения программы.
Теперь понятно что я хочу?
По моему не один из вас не понимает о чём идёт речь.
Я не хочу установить уровень роботом хотя изначально это и предполагается.
Я хочу его считать при его изменении! в процессе работы на графике.
И самое важное сделать это не через inputs.
Я не пытаюсь обсерать не кого я пытаюсь найти объяснение как это сделать правильно.
И какая ячейка памяти за это отвечает если уж на то пошло и нету функции считывания уровня в процессе исполнения программы.
Теперь понятно что я хочу?
Нет, не понятно.
Если вы хотите НЕ через input (И самое важное сделать это не через inputs), то значит вы его сами и меняете программой. Зачем тогда узнавать, раз вы сами значение программой устанавливаете?
В момент, когда вы положили в карман червонец, как вам узнать сколько вы в карман положили?
Нет, не понятно.
Если вы хотите НЕ через input (И самое важное сделать это не через inputs), то значит вы его сами и меняете программой. Зачем тогда узнавать, раз вы сами значение программой устанавливаете?
В момент, когда вы положили в карман червонец, как вам узнать сколько вы в карман положили?
Из другой программы?
Из другой программы?
Нет не сдругой программы
Нет, не понятно.
Если вы хотите НЕ через input (И самое важное сделать это не через inputs), то значит вы его сами и меняете программой. Зачем тогда узнавать, раз вы сами значение программой устанавливаете?
В момент, когда вы положили в карман червонец, как вам узнать сколько вы в карман положили?
А я пред пологаю что уровень может сменить пользователь по своим потребностям и индикатор должен на это отреагировать и подстроится под новые параметры!
Для этого и нужно считывать сам уровень с графика а не пытатса его нарисовать заново.
Нет не сдругой программы
Вы думаете о том что всё время индикатор контролирует уровень который был задан из начально.А я пред пологаю что уровень может сменить пользователь по своим потребностям и индикатор должен на это отреагировать и подстроится под новые параметры!
Для этого и нужно считывать сам уровень с графика а не пытатса его нарисовать заново.
Не выдумывайте за меня то, о чём я могу думать.
Я вижу, что вы, вместо решения вопроса, выдумываете себе причины его не решать.
Если вы предполагаете, что уровень мог сменить пользователь, то это значит, что вы сами себе противоречите: (И самое важное сделать это не через inputs)
А уж если не делать это через внешние переменные, и если учитывать ваш ответ Андрею: "Нет не с другой программы", то вывод напрашивается один: вы сами программно задаёте уровень внутри индикатора. И индикатор о нём всё знает. Чего тогда сделать не можете - не понимаю.
Ну сменить значение input пользователем конечно вполне можно и на лету. Правда для этого как минимум понадобиться панелька, в которой можно ввести это значение. Правда не совсем понятно зачем лишние извращения, если можно перезапустить индикатор с измененным input.
Но как говориться на вкус и цвет, карандаши разные.
По моему не один из вас не понимает о чём идёт речь.
Я не хочу установить уровень роботом хотя изначально это и предполагается.
Я хочу его считать при его изменении! в процессе работы на графике.
И самое важное сделать это не через inputs.
Я не пытаюсь обсерать не кого я пытаюсь найти объяснение как это сделать правильно.
И какая ячейка памяти за это отвечает если уж на то пошло и нету функции считывания уровня в процессе исполнения программы.
Теперь понятно что я хочу?
Понятно. Это именно то что я предположил.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Нужна помощь MQL5 #property indicator_level
Alexey Viktorov, 2018.02.08 07:30
Похоже что ему не нужно решение вопроса, а нужно просто охаять и МТ и MQL потому, что нет возможности прочесть параметр заданный в #property
А конец моей фразы понятен? Нет и не будет такой возможности. Следовательно зачем биться лбом о бетонную стену?
Можно вообще не писать
Достаточно в OnInit() вписать
Понятно. Это именно то что я предположил.
А конец моей фразы понятен? Нет и не будет такой возможности. Следовательно зачем биться лбом о бетонную стену?
Можно вообще не писать
Достаточно в OnInit() вписать
Да можно если задуманно уровень который не изменяется в процесе обработки данных.
//--- количество окон на графике (всегда есть хотя бы одно главное окно)
int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
//--- про ходим по окнам
for(int w=0;w<windows;w++)
{
//--- сколько индикаторов в данном окне/подокне
int total=ChartIndicatorsTotal(0,w);
//--- переберем все индикаторы в окне
for(int i=0;i<total;i++)
{
//--- получим короткое имя индикатора
string name=ChartIndicatorName(0,w,i);
//--- получим хэндл индикатора
int handle=ChartIndicatorGet(0,w,name);
//--- выведем в журнал
if(name=="RSIm"&&w>0)
PrintFormat("Window=%d, index=%d, Name=%s, handle=%d",w,i,name,handle);
int objeto=ObjectsTotal(0,w,-1);
for(int j=0;j<objeto;j++)
{
PrintFormat("Name=%s,",ObjectName(ChartID(),j,i,-1));
}
//--- обязательно освобождаем хендл индикатора, как только он становится ненужным
IndicatorRelease(handle);
}
}
Я использовал вот этот код чтоб найти обекты на графике где располагается мой индикатор но он так не чего не показал связоное с уровнями.
Что я пропустил или что я не так делаю?
Да можно если задуманно уровень который не изменяется в процесе обработки данных.
Я использовал вот этот код чтоб найти обекты на графике где располагается мой индикатор но он так не чего не показал связоное с уровнями.
Что я пропустил или что я не так делаю?
Всё.
Изначально был вопрос
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Нужна помощь MQL5 #property indicator_level
Ivan Stepanenko, 2018.01.30 17:30
Ребята всем спасибо кто заинтересовался вопросом.
На вопрос выделенный красным вот ответ
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Нужна помощь MQL5 #property indicator_level
Alexey Viktorov, 2018.01.31 09:06
Игорь, мы оба неправы. Я не сразу понял задачу...
Кроме директивы #property установить уровень индикатора можно функцией
Соответственно этот уровень надо задать во входящих параметрах индикатора. В таком случае, уровень рисоваться будет по заданному значению и менять его надо тоже по этому значению.
Тестовый вариант
Потом вы сочинили что есть необходимость программно всем индикаторам переназначить уровни. Даже тем в которых уровни не предусмотрены.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Нужна помощь MQL5 #property indicator_level
Alexey Viktorov, 2018.02.04 17:23
Я вот чего не понимаю: Почему вместо того, чтобы взять готовый код, проверить, покрутить его и так и эдак, вы вступаете в обсуждение? Вы считаете что все тут чаще просто пишут не проверенные варианты советов?
Я использовал вот этот код чтоб найти обекты на графике где располагается мой индикатор но он так не чего не показал связоное с уровнями.
Что я пропустил или что я не так делаю?
Уровни индикатора это не графические объекты.