Неужели никто не сталкивался с данной ситуацией?
Некоторые параметры графиков нельзя изменять. Какой терминал, 4 или 5?
Все ньюансы, описанные в документации, учтены.
Здесь указано, что для объекта "График" не работают свойства CHART_SHOW_DATE_SCALE и CHART_SHOW_PRICE_SCALE. Но я вместо них использую:
ObjectSetInteger(chart_ID,name,OBJPROP_PRICE_SCALE,false);
О самостоятельном сбросе сдвига, установленного через ChartNavigate при перемещении объекта "График" (какая вообще связь?) в документации ничего не нашёл.
ручная граф. разметка на понедельник сделанная например в пятницу/субботу, в понедельник-же утром обращается в тыкву ;-) Короче терминал неверно/неочевидно считает дату следующей сессии при расстановке объектов
Здравствуйте!
Столкнулся с неприятными явлениями при работе с объектом "График".
1. При попытках скрыть шкалу цены и/или шкалу времени, это ни к чему не приводит. Шкала продолжает присутствовать.
ObjectSetInteger(0,name,OBJPROP_DATE_SCALE,false);
//--- скроем шкалу цены
ObjectSetInteger(0,name,OBJPROP_PRICE_SCALE,false);
кстати и мой камешек про граф.объекты (БАГ, по крайней мере 4-ки, о котором стоит знать)
ручная граф. разметка на понедельник сделанная например в пятницу/субботу, в понедельник-же утром обращается в тыкву ;-) Короче терминал неверно/неочевидно считает дату следующей сессии при расстановке объектов
Простой скрипт. На основном графике создается объект "График" и каждые 2 секунды в нем происходит смена символа из MarketWatch.
Почему ChartRedraw(objID) по id этого объекта "График" не работает?
Вызываю ли эту функцию или она закомментирована - задержки смены символа внутри графического объекта примерно одинаковы.
Работает нормально только с ChartRedraw( ). Но мне не нужна перерисовка всего графика и всех объектов на нем.
Что не так в моем коде?
Для анимации нужно кликнуть на картинке, проблемы видны после смены 5-го символа, видно что в журнал вывод с равными интервалами, а на графике - нет ровности.
void OnStart() { long chartID = ChartID(); string name = "objChart"; ObjectCreate(0, name, OBJ_CHART, 0, 20, 20); ObjectSetInteger(chartID, name, OBJPROP_YDISTANCE, 30); for(int i = 0; i < 10; ++i) { string symb = SymbolName(i, true); long objID = ObjectGetInteger(chartID, name, OBJPROP_CHART_ID); ObjectSetString(chartID, name, OBJPROP_SYMBOL, symb); Print(__FUNCTION__, " chartID=", chartID, " objID=", objID, " Symb=", symb); ChartRedraw(objID); Sleep(2000); } ObjectsDeleteAll(ChartID(), name); }
Простой скрипт. На основном графике создается объект "График" и каждые 2 секунды в нем происходит смена символа из MarketWatch.
Почему ChartRedraw(objID) по id этого объекта "График" не работает?
Вызываю ли эту функцию или она закомментирована - задержки смены символа внутри графического объекта примерно одинаковы.
Работает нормально только с ChartRedraw( ). Но мне не нужна перерисовка всего графика и всех объектов на нем.
Что не так в моем коде?
Для анимации нужно кликнуть на картинке, проблемы видны после смены 5-го символа, видно что в журнал вывод с равными интервалами, а на графике - нет ровности.
ChartRedraw принимает айди чарта, а не объекта.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Столкнулся с неприятными явлениями при работе с объектом "График".
1. При попытках скрыть шкалу цены и/или шкалу времени, это ни к чему не приводит. Шкала продолжает присутствовать.
ObjectSetInteger(0,name,OBJPROP_DATE_SCALE,false);
//--- скроем шкалу цены
ObjectSetInteger(0,name,OBJPROP_PRICE_SCALE,false);
Привожу полный код скрипта.
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
string name="Chart";
int x=100;
int y=100;
int width=320;
int height=240;
int shift=-200;
//--- сбросим значение ошибки
ResetLastError();
//--- создадим объект "График"
if(!ObjectCreate(0,name,OBJ_CHART,1,0,0))
{
Print(__FUNCTION__,
": не удалось создать объект \"График\"! Код ошибки = ",GetLastError());
return;
}
//--- установим координаты объекта
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер объекта
ObjectSetInteger(0,name,OBJPROP_XSIZE,width);
ObjectSetInteger(0,name,OBJPROP_YSIZE,height);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
//--- установим символ
ObjectSetString(0,name,OBJPROP_SYMBOL,_Symbol);
//--- установим период
ObjectSetInteger(0,name,OBJPROP_PERIOD,_Period);
//--- скроем шкалу времени
ObjectSetInteger(0,name,OBJPROP_DATE_SCALE,false);
//--- скроем шкалу цены
ObjectSetInteger(0,name,OBJPROP_PRICE_SCALE,false);
//--- отобразим на переднем плане
ObjectSetInteger(0,name,OBJPROP_BACK,false);
//--- отключим режим перемещения метки мышью
ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
//--- перерисуем график и подождем 1 секунду
ChartRedraw();
Sleep(1000);
//--- получим ID графика "Chart"
long chart_id = 0;
ResetLastError();
if(ObjectGetInteger(0,name,OBJPROP_CHART_ID,0,chart_id)==false)
{
Print(__FUNCTION__,
": не удалось получить ID графика \"Chart\"! Код ошибки = ",GetLastError());
return;
}
//--- отключим отступ правого края графика
ChartSetInteger(chart_id,CHART_SHIFT,false);
//--- отключим автопрокрутку
ChartSetInteger(chart_id,CHART_AUTOSCROLL,false);
//--- перерисуем график
ChartRedraw();
//--- сдвинем график на заданное число баров
if(!ChartNavigate(chart_id,CHART_END,shift))
Print(__FUNCTION__+", Error Code = ",GetLastError());
//--- перерисуем график
ChartRedraw();
//--- задержка в 2 секунды
Sleep(2000);
//--- изменение координат объекта
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x+1);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y+2);
ChartRedraw();
//--- задержка в 4 секунды
Sleep(3000);
//--- удаление объекта
ObjectDelete(0,name);
}
А вот со смещением хотелось бы разобраться. Что я не так делаю? Как переместить объект "График", чтобы смещение в барах этого самого графика осталось прежним?