Vadim_2015: ООО, хвала всевышнему... меня поняли! ДА! ДА! ДА! Именно этого я и пытаюсь добиться. Если знаете, подскажите как это сделать?
Понятно, постараюсь подумать, но зависит от текущих дел. Если в будущем будут появляться вопросы, то оформляйте их примерно таким способом, чтоб программистам было понятнее.
Vadim_2015: ООО, хвала всевышнему... меня поняли! ДА! ДА! ДА! Именно этого я и пытаюсь добиться. Если знаете, подскажите как это сделать?
Если это вчерашняя свеча, то она будет конечная в iHigest() А начальная 00:00 следующего дня (то-есть сегодняшняя) полученная из iBarShift().
Примерный алгоритм:
1. Сегодня ищем среди вчерашних часовых баров первый бычий. Пусть он будет индексом endBar
2. Определяем первый часовой бар сегодня. Или он будет нулевой...
3. В iHighest() ставим предпоследним параметром endBar (или endBar +1 надо уточнить) а последним 1 Получаем индекс бара с наивысшим High на нужном интервале.
4. Искомый результат High[iHighest(с соответствующими параметрами)] // Или соответствующая переменная значение которой присвоено в предыдущем пункте.
r772ra Спасибо Вам огромное!!! Скрипт делает то что надо!, не все конечно понятно мне в последнем блоке кода, но ниче, разберусь. Главное работает. Буду пробовать переносить в индикатор.
paladin80:
Если в будущем будут появляться вопросы, то оформляйте их примерно таким способом, чтоб программистам было понятнее.
r772ra Спасибо Вам огромное!!! Скрипт делает то что надо!, не все конечно понятно мне в последнем блоке кода, но ниче, разберусь. Главное работает. Буду пробовать переносить в индикатор.
Поясните если я не прав, я так понимаю вторая половина кода скрипта _"void SetArrow(int cd, color cl," эта та часть кода, которая относится к функции "_ OnInit()" в польз..индикаторе, а первая половина кода скрипта _ "voidOnStart()" , относится к функции "_OnCalculate" в индикаторе? Я имею ввиду, грубо говоря, в скрипте сначала идет 1)расчет, 2)потом только инициализация. В индикаторе наоборот.
Поясните если я не прав, я так понимаю вторая половина кода скрипта _"void SetArrow(int cd, color cl," эта та часть кода, которая относится к функции "_ OnInit()" в польз..индикаторе, а первая половина кода скрипта _ "voidOnStart()" , относится к функции "_OnCalculate" в индикаторе? Я имею ввиду, грубо говоря, в скрипте сначала идет 1)расчет, 2)потом только инициализация. В индикаторе наоборот.
Пользовательская функция, которая находится за пределами других функций.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.10.2007 |//| Описание : Установка значка на графике, объект OBJ_ARROW. |//+----------------------------------------------------------------------------+//| Параметры: |//| cd - код значка |//| cl - цвет значка |//| nm - наименование ("" - время открытия текущего бара) |//| t1 - время открытия бара (0 - текущий бар) |//| p1 - ценовой уровень (0 - Bid) |//| sz - размер значка (0 - по умолчанию) |//+----------------------------------------------------------------------------+void SetArrow(int cd, color cl,
string nm="", datetime t1=0, double p1=0, int sz=0) {
if (nm=="") nm=DoubleToStr(Time[0], 0);
if (t1<=0) t1=Time[0];
if (p1<=0) p1=Bid;
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
ObjectSet(nm, OBJPROP_TIME1 , t1);
ObjectSet(nm, OBJPROP_PRICE1 , p1);
ObjectSet(nm, OBJPROP_ARROWCODE, cd);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_WIDTH , sz);
}
я думаю в индикаторе вам это не надо, за рисование отвечает буфер
То есть.
longBarsBuffer[i]=High[h]+5*Point(); - то что необходимо получить.
else
longBarsBuffer[i]=0.0;
Дальше
Функция
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 26.02.2008 |//| Описание : Возвращает реальный номер бара от начала суток. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| dt - дата и время открытия бара ( 0 - текущее время) |//+----------------------------------------------------------------------------+int iBarOfDayReal(string sy="", int tf=0, datetime dt=0) {
if (sy=="" || sy=="0") sy=Symbol();
if (tf<=0) tf=Period();
if (dt<=0) dt=TimeCurrent();
if (tf>PERIOD_D1) {
Print("iBarOfDayReal(): Таймфрейм должен быть меньше или равен D1");
return(0);
}
int cd=TimeDay(dt); // текущий день месяцаint nb=iBarShift(sy, tf, dt, False); // номер текущего бараint bd=0; // номер бара от начала сутокwhile(TimeDay(iTime(sy, tf, nb))==cd) {
nb++;
bd++;
}
return(bd);
}
И вызов
находим количество баров от начала суток (текущий день не пересчитываем) и того бара уходим в историю.
int bStart = iBarOfDayReal();//бар, с которого уходим в историю
Помогите плиз! После обновления Windows с 7 на 10 ( а может и по другим причинам) все имеющиеся по умолчанию советники и скрипты в терминале билд 920 (Moving Average, MACD, Period Converter и т.п) перестали активироваться при присоединении к графику, ярлык их стал серого цвета. При попытке компиляции в MetaEditor 5 билд 1218 во всех случаях выходит ошибка EX4 write error. То же самое наблюдалось и с пользовательским экспертом. Как лечить такое, подскажите ?
ООО, хвала всевышнему... меня поняли! ДА! ДА! ДА! Именно этого я и пытаюсь добиться. Если знаете, подскажите как это сделать?
ООО, хвала всевышнему... меня поняли! ДА! ДА! ДА! Именно этого я и пытаюсь добиться. Если знаете, подскажите как это сделать?
Если это вчерашняя свеча, то она будет конечная в iHigest() А начальная 00:00 следующего дня (то-есть сегодняшняя) полученная из iBarShift().
Примерный алгоритм:
1. Сегодня ищем среди вчерашних часовых баров первый бычий. Пусть он будет индексом endBar
2. Определяем первый часовой бар сегодня. Или он будет нулевой...
3. В iHighest() ставим предпоследним параметром endBar (или endBar +1 надо уточнить) а последним 1 Получаем индекс бара с наивысшим High на нужном интервале.
4. Искомый результат High[iHighest(с соответствующими параметрами)] // Или соответствующая переменная значение которой присвоено в предыдущем пункте.
ООО, хвала всевышнему... меня поняли! ДА! ДА! ДА! Именно этого я и пытаюсь добиться. Если знаете, подскажите как это сделать?
СКРИПТ! пробуем.
r772ra Спасибо Вам огромное!!! Скрипт делает то что надо!, не все конечно понятно мне в последнем блоке кода, но ниче, разберусь. Главное работает. Буду пробовать переносить в индикатор.
paladin80:
Если в будущем будут появляться вопросы, то оформляйте их примерно таким способом, чтоб программистам было понятнее.Ясно, учту!
Всем огромная благодарность!
r772ra Спасибо Вам огромное!!! Скрипт делает то что надо!, не все конечно понятно мне в последнем блоке кода, но ниче, разберусь. Главное работает. Буду пробовать переносить в индикатор.
Ясно, учту!
Всем огромная благодарность!
Конкретно, что не понятно?
Поясните если я не прав, я так понимаю вторая половина кода скрипта _"void SetArrow(int cd, color cl," эта та часть кода, которая относится к функции "_ OnInit()" в польз..индикаторе, а первая половина кода скрипта _ "void OnStart()" , относится к функции "_OnCalculate" в индикаторе? Я имею ввиду, грубо говоря, в скрипте сначала идет 1)расчет, 2)потом только инициализация. В индикаторе наоборот.
Поясните если я не прав, я так понимаю вторая половина кода скрипта _"void SetArrow(int cd, color cl," эта та часть кода, которая относится к функции "_ OnInit()" в польз..индикаторе, а первая половина кода скрипта _ "void OnStart()" , относится к функции "_OnCalculate" в индикаторе? Я имею ввиду, грубо говоря, в скрипте сначала идет 1)расчет, 2)потом только инициализация. В индикаторе наоборот.
Пользовательская функция, которая находится за пределами других функций.
Вызов функции, из любой другой функции
я думаю в индикаторе вам это не надо, за рисование отвечает буфер
То есть.
Дальше
Функция
И вызов
находим количество баров от начала суток (текущий день не пересчитываем) и того бара уходим в историю.
Добавка))) функции взяты отсюда
Вау! Разжевали так разжевали:) ...Как говорится, - Вопросов больше - не имею!
СПАСИБО!!!