Вешаем индикатор на график. Получаем на первом тике первое значение bid1. Запоминаем его (я делал так: вводил второй буфер y[0] и прописывал его значение а init()).
На втором тике получаем второе значение bid2.
Далее нужно получить разницу в пунктах. delta=bid1-bid2 (я делал так: delta=x[0]-x[1]).
Теперь к ранее записанному значению y[0] прибавляем delta, и получаем значение y[1], которое по факту соответствует значению bid2.
Кривая индикатора должна получиться идентичной искомому индикатору, но построение идет по вычисляемым значениям разниц bid.
Данный индикатор нужен в качестве шаблона для последующих вычислений.
Попробую объяснить. Но учтите что я ноль в программировании, практически.
Имеем тиковый индикатор, который строит кривую по значениям bid.
Теперь что я хочу сделать.
Вешаем индикатор на график. Получаем на первом тике первое значение bid1. Запоминаем его (я делал так: вводил второй буфер y[0] и прописывал его значение а init()).
На втором тике получаем второе значение bid2.
Далее нужно получить разницу в пунктах. delta=bid1-bid2 (я делал так: delta=x[0]-x[1]).
Теперь к ранее записанному значению y[0] прибавляем delta, и получаем значение y[1], которое по факту соответствует значению bid2.
Кривая индикатора должна получиться идентичной искомому индикатору, но построение идет по вычисляемым значениям разниц bid.
Данный индикатор нужен в качестве шаблона для последующих вычислений.
Камнями не кидать. Как смог объяснил.
Спасибо.
не понятно что хотите сделать
тут в общем в чем будет точно проблема - Вы используете индикаторные буфера как массив для хранения тиков (Бид), размер индикаторного буффера изменяет сам терминал, и в добавок - терминал сам сдвигает индикаторные буфера при появлении нового бара
поэтому для хранения тиков нужно использовать просто массив, а рисовать с помощью индикаторного буфера
вот набросал код по аналогии с Ваши, где сохраняю тики в массив
#property indicator_separate_window#property indicator_buffers1#property indicator_plots1//--- plot Label1#property indicator_label1"Label1"#property indicator_type1DRAW_LINE#property indicator_color1clrRed#property indicator_style1STYLE_SOLID#property indicator_width11//--- input parametersinputint TickCount=10; //Размер массива тиков//--- indicator buffersdouble Label1Buffer[];
double TickArr[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingSetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
ArrayResize(TickArr,TickCount); //изменим размер массиваArrayInitialize(TickArr,SymbolInfoDouble(_Symbol,SYMBOL_BID)); // проинициализируем массив значением текущего Bid//---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[])
{
for(int i=ArraySize(TickArr)-1;i>0;i--)
{
TickArr[i] = TickArr[i-1]; // сдвинули массив
}
TickArr[0] = SymbolInfoDouble(_Symbol,SYMBOL_BID); // в 0-й элемент массива запомнили новый Bid//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
теперь в этот код нужно добавить Ваш расчет и рисовать индикаторным буфером Label1Buffer по Вашей задумке
Было бы неплохо, если бы добавили возможность программно изменять свойства другого индикатора. Грубо говоря, чтобы после добавления (программно) на график другого индикатора можно было задать ему цвет, стиль и толщину линий
тут в общем в чем будет точно проблема - Вы используете индикаторные буфера как массив для хранения тиков (Бид), размер индикаторного буффера изменяет сам терминал, и в добавок - терминал сам сдвигает индикаторные буфера при появлении нового бара
поэтому для хранения тиков нужно использовать просто массив, а рисовать с помощью индикаторного буфера
вот набросал код по аналогии с Ваши, где сохраняю тики в массив
теперь в этот код нужно добавить Ваш расчет и рисовать индикаторным буфером Label1Buffer по Вашей задумке
Yevhenii Levchenko: Было бы неплохо, если бы добавили возможность программно изменять свойства другого индикатора. Грубо говоря, чтобы после добавления (программно) на график другого индикатора можно было задать ему цвет, стиль и толщину линий
рисовать индикаторными буферами в MQL это значит, в буфер индикатора - в моем примере это Label1Buffer положить значение (присвоить значение)
в Вашем примере Вы присваиваете значения только по выполнению условия, а если условие не выполнится? - соответственно ничего и не выводится
ну и еще раз, я сделал Вам "заготовку" где в массиве TickArr находятся значения тиков Bid , а Вы в своих условиях используете предыдущие значения индикаторного буфера - а кто в эти буфера положил какие значения?
имхо, не получится вот так сходу, попробуйте просто нарисовать линию индикаторным буфером, потом уже тики будете сравнивать
Если вы говорите что практически ноль в программировании, то зачем вы берётесь за такие задачи нестандартные, может с простых начать? Ну или подтянуть знания базовые? Проще чтоб сделали тут за вас, да.
рисовать индикаторными буферами в MQL это значит, в буфер индикатора - в моем примере это Label1Buffer положить значение (присвоить значение)
в Вашем примере Вы присваиваете значения только по выполнению условия, а если условие не выполнится? - соответственно ничего и не выводится
ну и еще раз, я сделал Вам "заготовку" где в массиве TickArr находятся значения тиков Bid , а Вы в своих условиях используете предыдущие значения индикаторного буфера - а кто в эти буфера положил какие значения?
имхо, не получится вот так сходу, попробуйте просто нарисовать линию индикаторным буфером, потом уже тики будете сравнивать
попробуйте по другому задать вопрос, наверное Ваш вопрос не понятен
Попробую объяснить. Но учтите что я ноль в программировании, практически.
Имеем тиковый индикатор, который строит кривую по значениям bid.
Теперь что я хочу сделать.
Вешаем индикатор на график. Получаем на первом тике первое значение bid1. Запоминаем его (я делал так: вводил второй буфер y[0] и прописывал его значение а init()).
На втором тике получаем второе значение bid2.
Далее нужно получить разницу в пунктах. delta=bid1-bid2 (я делал так: delta=x[0]-x[1]).
Теперь к ранее записанному значению y[0] прибавляем delta, и получаем значение y[1], которое по факту соответствует значению bid2.
Кривая индикатора должна получиться идентичной искомому индикатору, но построение идет по вычисляемым значениям разниц bid.
Данный индикатор нужен в качестве шаблона для последующих вычислений.
Камнями не кидать. Как смог объяснил.
Спасибо.
Попробую объяснить. Но учтите что я ноль в программировании, практически.
Имеем тиковый индикатор, который строит кривую по значениям bid.
Теперь что я хочу сделать.
Вешаем индикатор на график. Получаем на первом тике первое значение bid1. Запоминаем его (я делал так: вводил второй буфер y[0] и прописывал его значение а init()).
На втором тике получаем второе значение bid2.
Далее нужно получить разницу в пунктах. delta=bid1-bid2 (я делал так: delta=x[0]-x[1]).
Теперь к ранее записанному значению y[0] прибавляем delta, и получаем значение y[1], которое по факту соответствует значению bid2.
Кривая индикатора должна получиться идентичной искомому индикатору, но построение идет по вычисляемым значениям разниц bid.
Данный индикатор нужен в качестве шаблона для последующих вычислений.
Камнями не кидать. Как смог объяснил.
Спасибо.
не понятно что хотите сделать
тут в общем в чем будет точно проблема - Вы используете индикаторные буфера как массив для хранения тиков (Бид), размер индикаторного буффера изменяет сам терминал, и в добавок - терминал сам сдвигает индикаторные буфера при появлении нового бара
поэтому для хранения тиков нужно использовать просто массив, а рисовать с помощью индикаторного буфера
вот набросал код по аналогии с Ваши, где сохраняю тики в массив
теперь в этот код нужно добавить Ваш расчет и рисовать индикаторным буфером Label1Buffer по Вашей задумке
не понятно что хотите сделать
тут в общем в чем будет точно проблема - Вы используете индикаторные буфера как массив для хранения тиков (Бид), размер индикаторного буффера изменяет сам терминал, и в добавок - терминал сам сдвигает индикаторные буфера при появлении нового бара
поэтому для хранения тиков нужно использовать просто массив, а рисовать с помощью индикаторного буфера
вот набросал код по аналогии с Ваши, где сохраняю тики в массив
теперь в этот код нужно добавить Ваш расчет и рисовать индикаторным буфером Label1Buffer по Вашей задумке
Спасибо что ответили. Еще немного помучаю вас.
Расчет добавлять в сюда?
Вот мой расчет.
Добавил и ничего.
Было бы неплохо, если бы добавили возможность программно изменять свойства другого индикатора. Грубо говоря, чтобы после добавления (программно) на график другого индикатора можно было задать ему цвет, стиль и толщину линий
Используйте Canvas и хоть мультики рисуйте.
Картинку еще прикреплю.
Добавил и ничего.
так дело не пойдет )))
рисовать индикаторными буферами в MQL это значит, в буфер индикатора - в моем примере это Label1Buffer положить значение (присвоить значение)
в Вашем примере Вы присваиваете значения только по выполнению условия, а если условие не выполнится? - соответственно ничего и не выводится
ну и еще раз, я сделал Вам "заготовку" где в массиве TickArr находятся значения тиков Bid , а Вы в своих условиях используете предыдущие значения индикаторного буфера - а кто в эти буфера положил какие значения?
имхо, не получится вот так сходу, попробуйте просто нарисовать линию индикаторным буфером, потом уже тики будете сравнивать
Картинку еще прикреплю.
А если угол перевернуть? То как будет вестись расчёт?
Картинку еще прикреплю.
так дело не пойдет )))
рисовать индикаторными буферами в MQL это значит, в буфер индикатора - в моем примере это Label1Buffer положить значение (присвоить значение)
в Вашем примере Вы присваиваете значения только по выполнению условия, а если условие не выполнится? - соответственно ничего и не выводится
ну и еще раз, я сделал Вам "заготовку" где в массиве TickArr находятся значения тиков Bid , а Вы в своих условиях используете предыдущие значения индикаторного буфера - а кто в эти буфера положил какие значения?
имхо, не получится вот так сходу, попробуйте просто нарисовать линию индикаторным буфером, потом уже тики будете сравнивать
Я предупредил что "колхозник")
Вот так сделал.
Теперь рисует тиковый график, но есть какие-то разрывы линии.
Я в 4-ке делаю.