Ошибки, баги, вопросы - страница 2741

 
Ilyas:

Отладчик в MT4 не будет меняться.

Мы полностью переделываем систему отладки и профилировки MQL-кода, новая система несовместима с MT4

МТ 4 БИЛД 1262 Падает терминал


2020.05.13 18:05:09.335 Access violation write to 0x0335346E

2020.05.13 18:05:09.276 VR   EURUSD,H4: 1 leaked strings left

2020.05.13 18:11:11.126 Access violation write to 0x033403B7

2020.05.13 18:37:13.585 Access violation write to 0x03093648


Можете что то сказать по этому ?  Я сделал мини исходник воспроизводящий проблему

 
Vladimir Pastushak:

МТ 4 БИЛД 1262 Падает терминал


2020.05.13 18:05:09.335 Access violation write to 0x0335346E

2020.05.13 18:05:09.276 VR   EURUSD,H4: 1 leaked strings left

2020.05.13 18:11:11.126 Access violation write to 0x033403B7

2020.05.13 18:37:13.585 Access violation write to 0x03093648


Можете что то сказать по этому ?  Я сделал мини исходник воспроизводящий проблему

Оправьте исходник мне через личные сообщения, я проверю

 
Ilyas:

Отладчик в MT4 не будет меняться.

Мы полностью переделываем систему отладки и профилировки MQL-кода, новая система несовместима с MT4

Прикольно. Можно забыть про разработку серьезных индикаторов под МТ4.

Спасибо, будем знать.

 
Andrey Khatimlianskii:

Индикаторы в интерфейсном потоке, пока не посчитаются, терминал ничего не рисует. Вот и зависает.

Четверку править не будут, скорее всего.

В пятерке аналогично индикаторы работают, но все нормально, без зависаний.

 
MT5 (build 2419) работал с дебагером, перешел в браузер на пару минут, потом вернулся назад в МТ, а он оказался почему-то полностью пустым:
- ни окон, ни панелей, ни инструментов, ни чего нет...

 
МТ5, как программно отключить масштабирование цен через Ctrl + Mouse Wheel?
Делаю панель, программно отлавливаю Ctrl + Mouse Wheel и масштабирую элементы панели.
Однако на это же событие срабатывает масштабирование цен и загружается надпись "Waiting For Update", которая полностью перекрывая панель на неопределенное время.

Пример кода, то, что закомментировано так же используется в проекте, но ни как не влияет на вышеописанную проблему:
void HideChart(long achart, color BackClr){     
   //ChartSetInteger(achart, CHART_SHOW, false);
        //ChartSetInteger(achart, CHART_SHOW_OHLC, false);
        //ChartSetInteger(achart, CHART_SHOW_BID_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_ASK_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_LAST_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_PERIOD_SEP, false);
        //ChartSetInteger(achart, CHART_SHOW_GRID, false);
        //ChartSetInteger(achart, CHART_SHOW_VOLUMES, CHART_VOLUME_HIDE);
        //ChartSetInteger(achart, CHART_SHOW_OBJECT_DESCR, false);
        //ChartSetInteger(achart, CHART_SHOW_TRADE_LEVELS, false);
        //ChartSetInteger(achart, CHART_SHOW_DATE_SCALE, false);
        //ChartSetInteger(achart, CHART_SHOW_PRICE_SCALE, false);
        //ChartSetInteger(achart, CHART_FOREGROUND, false);
        //ChartSetInteger(achart, CHART_SHIFT, false);
        //ChartSetInteger(achart, CHART_MODE, CHART_LINE);

        //ChartSetInteger(achart, CHART_SCALE, 0);
        ChartSetInteger(achart, CHART_SCALEFIX, 0);
        ChartSetInteger(achart, CHART_SCALEFIX_11 , 0);
        ChartSetInteger(achart, CHART_SCALE_PT_PER_BAR, 0);
        ChartSetInteger(achart, CHART_EVENT_OBJECT_DELETE, 0);
        ChartSetInteger(achart, CHART_EVENT_OBJECT_CREATE, 0);

   	ChartSetInteger(achart, CHART_EVENT_MOUSE_WHEEL,1); 
        ChartSetInteger(achart, CHART_EVENT_MOUSE_MOVE, 0);
        ChartSetInteger(achart, CHART_MOUSE_SCROLL, 0);
        ChartSetInteger(achart, CHART_KEYBOARD_CONTROL, 0);
        ChartSetInteger(achart, CHART_QUICK_NAVIGATION, 0);
        
        //ChartSetInteger(achart, CHART_COLOR_BACKGROUND, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_FOREGROUND, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_CHART_LINE, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_ASK, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_BID, BackClr);
        //ChartSetDouble(achart, CHART_FIXED_MAX, 1);
        //ChartSetDouble(achart, CHART_FIXED_MIN, 1);
        //ChartSetString(achart, CHART_COMMENT, "");
        //ChartSetInteger(achart, CHART_CROSSHAIR_TOOL, 0);
        //ChartSetInteger(achart, CHART_SHOW_ONE_CLICK, 0);
        //ChartSetInteger(achart, CHART_CONTEXT_MENU, 0);
        ChartRedraw(achart);
}

void OnInit() {
   HideChart(0, clrWhite);
} 
 

кажется баг? ширина метки в документации написано, что доступна для чтения, но

Print(i," - ",ObjectGetInteger(0,name,OBJPROP_XDISTANCE)," - ",ObjectGetInteger(0,name,OBJPROP_XSIZE));

выдаёт

на графике текст есть:

полный код прилагаю

Файлы:
 
Igor Zakharov:

кажется баг? ширина метки в документации написано, что доступна для чтения, но

Ширина доступна только после полной отрисовки объекта.
Недавно тоже решал данную проблему.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Sergey Dzyublik, 2020.05.12 19:32

При использовании  OBJ_EDIT возникла проблема - необходимость установить размер OBJPROP_XSIZE и OBJPROP_YSIZE, чтобы в соответствующие размеры объекта помещался весь текст.

Вопрос: как определить размер  OBJPROP_XSIZE и OBJPROP_YSIZE, что бы туда поместился весь текст?
Рассмотрел два варианта:
1. Создание объекта OBJ_LABLE, считывание размеров, удаление объекта OBJ_LABLE.
Не подходит из-за того, что считывание размеров возможно только после фактического создания объекта и не возможно, когда объект находится в очереди на ChartRedraw.

2. Использование TextSetFont с последующим TextGetSize.
Не подходит, так как результат кардинально отличается от результатов метода №1, отличия в 2.5 - 2.9 раз в зависимости от размера шрифта.
Возможно причина в 4К мониторе и 175% DPI.

#define PRINT(x) ; Print(#x, ":", string(x))
          
void SetLabel(long achart, string name, int wnd, string text, color clr, int x, int y, int corn=0, int fontsize=8, string font="Tahoma")
{
   ObjectCreate(achart, name, OBJ_LABEL, wnd, 0, 0); 
   ObjectSetInteger(achart, name, OBJPROP_CORNER, corn); 
   ObjectSetString(achart, name, OBJPROP_TEXT, text); ObjectSetInteger(achart, name, OBJPROP_COLOR, clr); 
   ObjectSetInteger(achart, name, OBJPROP_FONTSIZE, fontsize); ObjectSetString(achart, name, OBJPROP_FONT, font);
   ObjectSetInteger(achart, name, OBJPROP_SELECTABLE, false); 
   ObjectSetInteger(achart, name, OBJPROP_BORDER_TYPE, 0);
   ObjectSetInteger(achart, name, OBJPROP_XDISTANCE, x); ObjectSetInteger(achart, name, OBJPROP_YDISTANCE, y);
}

void OnStart(){     
   string obj_name = "test_obj";   
   string text = "AAAA::BBBB";
   int font_size = 7;
   string font_name = "Tahoma";
   
   SetLabel(0, obj_name, 0, text, clrWhite, 100, 100, 0, font_size, font_name);
   ChartRedraw(0);
   Sleep(1000);
   
   uint dx_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_XSIZE));
   uint dy_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_YSIZE));
   ObjectDelete(0, obj_name);
   
   PRINT(dx_fixed_0);
   PRINT(dy_fixed_0);
   
   
   uint dx_fixed_1;
   uint dy_fixed_1;
   TextSetFont(font_name, -10 * font_size);
   TextGetSize(text, dx_fixed_1, dy_fixed_1);
   
   PRINT(1.0 * dx_fixed_0 / dx_fixed_1);  	// Result: 1.0
   PRINT(1.0 * dy_fixed_0 / dy_fixed_1);  	// Result: 1.0
}  


Спасибо Geess за решение.
Необходимо домножить на -10 размер шрафта при передаче в TextSetFont.

 
Sergey Dzyublik:

Ширина доступна только после полной отрисовки объекта.
Недавно тоже решал данную проблему.

Спасибо! Решение прилагаю


Файлы:
 
Какие флаги и подводные камни могут быть, если из одной MQL-программы что-то должно дописываться в файл (RAM-drive) постоянно, а из других (и другой Терминал) читаться из него же все эти дописываемые данные?
Причина обращения: