Просьба подсказать, как рисовать горизонтальную линию по цене открытия бара в 07:00.
Написал такой код, но линия почему-то не рисуется. Где ошибка?
externstring StartTime = "07:00"; //Начальное время для анализа, 00:00 ESTexternstring AlTime = "18:55"; //Время для трейдингаexternstring EndTime = "20:00"; //Время экспирации//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intOnInit()
{
ObjectCreate(ChartID(),"CORDON",OBJ_HLINE,0,0,Ask); //созд гор линию по цене AskObjectSetInteger(ChartID(),"CORDON",OBJPROP_COLOR,clrDarkBlue); //цвет темно-сиийObjectSetInteger(ChartID(),"CORDON",OBJPROP_WIDTH,1); //толщина линии 1ObjectSetInteger(ChartID(),"CORDON",OBJPROP_STYLE,STYLE_SOLID); //линия сплошint IndexOfBar = iBarShift(ChartID(),PERIOD_H1, StringToTime(StartTime), true); //Считаем индекс бара по заданному времени StartTimedouble StartPrice = Open[IndexOfBar]; //Получаем цену по индексуObjectMove(ChartID(),"CORDON", 0, 0, StartPrice); // меняем распол линии return(0);
}
LRA: Если убрать ObjectMove линию видно? Попробуйте Alert(StartPrice);
Если убрать ObjectMove линии не видно, а вот если в строке "double StartPrice = Open[IndexOfBar];" вместо "IndexOfBar" написать числовое значение, например "double StartPrice = Open[5];" то рисует линию по цене открытия пятого бара.
За идею с Алертом спасибо - он показывает значение "0".
Кстати линия есть и в списке объектов, со значением 0.
Просьба подсказать, как рисовать горизонтальную линию по цене открытия бара в 07:00.
Написал такой код, но линия почему-то не рисуется. Где ошибка?
Нельзя в ините рисовать и вычисления производить, это грубая ошибка. Инит должен завершать работу как можно быстрее.
Ошибка тут - int IndexOfBar = iBarShift(ChartID()_Symbol ,PERIOD_H1, StringToTime(StartTime), true); //Считаем индекс бара по заданному времени StartTime
Время можно задавать сразу в формате datetime, не надо машинное время терять на преобразование, вот так работает:
#property strict#property show_inputs
externdatetime StartTime = D'07:00'; //Начальное время для анализа, 00:00 ESTexterndatetime AlTime = D'18:55'; //Время для трейдингаexterndatetime EndTime = D'20:00'; //Время экспирации//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnStart()
{
ObjectCreate(0,"CORDON",OBJ_HLINE,0,0,Ask); //созд гор линию по цене AskObjectSetInteger(0,"CORDON",OBJPROP_COLOR,clrDarkBlue); //цвет темно-сиийObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1); //толщина линии 1ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID); //линия сплошint IndexOfBar = iBarShift(_Symbol,0, StartTime, false); //Считаем индекс бара по заданному времени StartTimedouble StartPrice = Open[IndexOfBar]; //Получаем цену по индексуPrint(IndexOfBar,", ",StartPrice);
ObjectMove(0,"CORDON", 0, 0, StartPrice); // меняем распол линии
}
Нельзя в ините рисовать и вычисления производить, это грубая ошибка. Инит должен завершать работу как можно быстрее.
Ошибка тут - int IndexOfBar = iBarShift(ChartID()_Symbol ,PERIOD_H1, StringToTime(StartTime), true); //Считаем индекс бара по заданному времени StartTime
Время можно задавать сразу в формате datetime, не надо машинное время терять на преобразование, вот так работает:
Спасибо за ценные для меня советы.
И отдельное спасибо за то, что подняли мой боевой дух, обнаружив ошибку. Я снова начинаю верить, что смогу подружиться с MQL4
RichLux: вариант кода не работает. Линия на графике так и не появилась...
// Вставил такой код в скрипт - линию рисует синюю на черном графике слабо видно
#property strict // -------- Возможно, Дело в этой строке
externstring StartTime = "07:00"; //Начальное время для анализа, 00:00 ESTexternstring AlTime = "18:55"; //Время для трейдингаexternstring EndTime = "20:00"; //Время экспирацииvoidOnStart()
{
ObjectCreate("CORDON",OBJ_HLINE,0,0,Ask); //созд гор линию по цене Ask --- Для текущего графика ID пропускаемObjectSetInteger(0,"CORDON",OBJPROP_COLOR,DarkBlue); //цвет темно-сиий --- 0 = текущий график DarkBlue - то же самоеObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1); //толщина линии 1ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID); //линия сплош
// Первый параметр нужен типа string, а функция ChartID возвращает long
int IndexOfBar = iBarShift(NULL,PERIOD_H1, StringToTime(StartTime), true); // --- NULL = текущий график ЗДЕСЬ И БЫЛА ОШИБКА???
double StartPrice = Open[IndexOfBar]; //Получаем цену по индексуObjectMove(ChartID(),"CORDON", 0, 0, StartPrice); // меняем распол линии
}
А если вычисления с инита вынести в отдельную функцию, а потом эту функцию вставить в инит, так это не будет грубой ошибкой?
Будет грубой ошибкой, если код инсполняется слишком долго, то инит завершит работу принудительно и код просто не успеет весь исполниться. Исполняемый код, в том числе и вызовы вторичных функций, должен находиться в предопределенных функциях MQL - OnTick() для советников, OnStart() для скриптов, OnCalculate() для индикаторов.
В ините должен быть самый минимум кода, только то, что надо выполнить один раз, непосредственно перед началом работы программы. Например, инициализация глобальных переменных, массивов, индикаторных буферов.
Переустановка ОС. Как восстановить после переустановки ОС МТ4 в том состоянии, в котором он был до переустановки. Индикаторы, советники, скрипты; шаблоны, профили; счета
AlexandrL: Переустановка ОС. Как восстановить после переустановки ОС МТ4 в том состоянии, в котором он был до переустановки. Индикаторы, советники, скрипты; шаблоны, профили; счета
Перед переустановкой скопировать папку терминала на флэшку. Если семерка и выше - то и общую папку. Подробности тут
Просьба подсказать, как рисовать горизонтальную линию по цене открытия бара в 07:00.
Написал такой код, но линия почему-то не рисуется. Где ошибка?
Просьба подсказать, как рисовать горизонтальную линию по цене открытия бара в 07:00.
Написал такой код, но линия почему-то не рисуется. Где ошибка?
Если убрать ObjectMove линию видно? Попробуйте Alert(StartPrice);
Если убрать ObjectMove линии не видно, а вот если в строке "double StartPrice = Open[IndexOfBar];" вместо "IndexOfBar" написать числовое значение, например "double StartPrice = Open[5];" то рисует линию по цене открытия пятого бара.
За идею с Алертом спасибо - он показывает значение "0".
Кстати линия есть и в списке объектов, со значением 0.
Просьба подсказать, как рисовать горизонтальную линию по цене открытия бара в 07:00.
Написал такой код, но линия почему-то не рисуется. Где ошибка?
Нельзя в ините рисовать и вычисления производить, это грубая ошибка. Инит должен завершать работу как можно быстрее.
Ошибка тут - int IndexOfBar = iBarShift(ChartID() _Symbol ,PERIOD_H1, StringToTime(StartTime), true); //Считаем индекс бара по заданному времени StartTime
Время можно задавать сразу в формате datetime, не надо машинное время терять на преобразование, вот так работает:
Нельзя в ините рисовать и вычисления производить, это грубая ошибка. Инит должен завершать работу как можно быстрее.
Ошибка тут - int IndexOfBar = iBarShift(ChartID() _Symbol ,PERIOD_H1, StringToTime(StartTime), true); //Считаем индекс бара по заданному времени StartTime
Время можно задавать сразу в формате datetime, не надо машинное время терять на преобразование, вот так работает:
Спасибо за ценные для меня советы.
И отдельное спасибо за то, что подняли мой боевой дух, обнаружив ошибку. Я снова начинаю верить, что смогу подружиться с MQL4
Нельзя в ините рисовать и вычисления производить, это грубая ошибка. Инит должен завершать работу как можно быстрее.
А если вычисления с инита вынести в отдельную функцию, а потом эту функцию вставить в инит, так это не будет грубой ошибкой?
уже все работает.
А если вычисления с инита вынести в отдельную функцию, а потом эту функцию вставить в инит, так это не будет грубой ошибкой?
Будет грубой ошибкой, если код инсполняется слишком долго, то инит завершит работу принудительно и код просто не успеет весь исполниться. Исполняемый код, в том числе и вызовы вторичных функций, должен находиться в предопределенных функциях MQL - OnTick() для советников, OnStart() для скриптов, OnCalculate() для индикаторов.
В ините должен быть самый минимум кода, только то, что надо выполнить один раз, непосредственно перед началом работы программы. Например, инициализация глобальных переменных, массивов, индикаторных буферов.
Индикаторы, советники, скрипты; шаблоны, профили; счета
Переустановка ОС. Как восстановить после переустановки ОС МТ4 в том состоянии, в котором он был до переустановки.
Индикаторы, советники, скрипты; шаблоны, профили; счета