Уважаемая служба поддержки, Я использую сборку 2650 на Windows10, установленном на 64-битной (x64) Intel. Это странная вещь, которую я заметил. Создаю скрипт для записи файлов через Win32 API:
Скрипт работает отлично, и в указанном каталоге я нахожу файл «TestWinFiles.txt», который содержит контент «Hallo world!». Сейчас делаю НЕМНОГО МОДИФИКАЦИЮ:
Я просто вставляю инструкцию printf. Прикрепив этот скрипт к графику, во вкладке Terminal Expert я получаю такой результат:
Что не так с моим кодом? Почему printf так кардинально меняет поведение скрипта? Почему у меня вылетает память? Что-то не так с командами printf и WIN32 API? это, возможно, небольшая ошибка? Я был бы признателен за возможность использовать printf в библиотеках, содержащих импорт Win32 API. Огромное спасибо заранее.
Самое первое - тип FileHandle должен быть long, 64-битным, так как Вы работаете в 64-битной системе
#import "kernel32.dll"long CreateFileW(string Filename, uint AccessMode, int ShareMode, int PassAsZero, int CreationMode, int FlagsAndAttributes, int AlsoPassAsZero);
int WriteFile(long FileHandle, uchar & Buffer[], int BufferLength, int & BytesWritten[], int PassAsZero);
int CloseHandle(long FileHandle);
#import
Я столкнулся с ошибкой, это должно быть для вас приоритетом, верно?
Здесь у нас есть ошибка с объектами мини-диаграммы: при создании мини-диаграммы в несфокусированном окне функции ChartSymbol() и ChartPeriod() возвращают неверные значения, пока мы не сфокусируем окно.
То же самое происходит, если мы закрываем и открываем терминал, а график с объектом minichart не сфокусирован.
Эта ошибка приводит к тому, что ChartIndicatorAdd() всегда терпит неудачу (возвращает false), пока мы не сфокусируем диаграмму!
Пожалуйста, исправьте эту ошибку!
Вот простой код советника для воспроизведения проблемы (проверьте журнал экспертов):
intOnInit() { EventSetTimer(4); return(INIT_SUCCEEDED);}
voidOnDeinit(constint reason){ EventKillTimer(); }
voidOnTimer(){
checkMiniChart();
}
string MC_name="Minichart"; //minichart namelong MC_ID=-1; //minichart IDlong chartID=-1; //Chart IDbool created = false; //check if chart and minichart created or notvoid checkMiniChart(){
if(!created){
createMinichart();
}else{
Print("["+chartID+"] Minichart: "
+" obj symbol: "+(ObjectGetString(chartID,MC_name,OBJPROP_SYMBOL))
+" - obj period: "+(ObjectGetInteger(chartID,MC_name,OBJPROP_PERIOD))
+" - chart symbol: "+(ChartSymbol(MC_ID))
+" - chart period: "+(ChartPeriod(MC_ID))
);
if(ObjectGetString(chartID,MC_name,OBJPROP_SYMBOL)!=ChartSymbol(MC_ID))
Print("Wrong symbol in Minichart object! Focus the chart to get correct symbol...");
if(ObjectGetInteger(chartID,MC_name,OBJPROP_PERIOD)!=ChartPeriod(MC_ID))
Print("Wrong period in Minichart object! Focus the chart to get correct period...");
}
}
void createMinichart(){
string chart_symbol = "EURUSD";
ENUM_TIMEFRAMES chart_period = PERIOD_D1;
string minchart_symbol = "GBPUSD";
ENUM_TIMEFRAMES minchart_period = PERIOD_H4;
//open a chart
chartID = ChartOpen(chart_symbol,chart_period);
//came back to current EA chartChartSetInteger(0,CHART_BRING_TO_TOP,true);
ChartRedraw(0);
Sleep(2000); //wait FOCUS on current EA chart, new chart loose FOCUS!if(chartID!=0){
//create mini chart if( ObjectMiniChartCreate(chartID, MC_name, minchart_symbol, minchart_period) ){
MC_ID=ObjectGetInteger(chartID,MC_name,OBJPROP_CHART_ID);
ChartRedraw(MC_ID);
ChartRedraw(chartID);
created=true;
}
}
}
bool ObjectMiniChartCreate(constlong chart_ID=0, // chart's IDconststring name="Minichart", // object nameconststring symbol=NULL, // symbolconstENUM_TIMEFRAMES period=0, // periodconstint x=0, // X coordinateconstint y=0, // Y coordinateconstint width=400, // widthconstint height=300, // heightconstENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // anchoring cornerconstint sub_window=0, // subwindow index constint scale=2, // scaleconstbool date_scale=false, // time scale displayconstbool price_scale=false, // price scale displayconstcolor clr=clrRed, // border color when highlightedconstENUM_LINE_STYLE style=STYLE_SOLID, // line style when highlightedconstint point_width=1, // move point sizeconstbool back=false, // in the backgroundconstbool selection=false, // highlight to moveconstbool hidden=false, // hidden in the object listconstlong selectable=true, //selectable constlong z_order=0) // priority for mouse click
{
//--- reset the error valueResetLastError();
//--- create Chart objectif(!ObjectCreate(chart_ID,name,OBJ_CHART,sub_window,0,0))
{
Print(__FUNCTION__,
": failed to create \"Chart\" object! Error code = ",GetLastError());
return(false);
}
//--- set object coordinatesObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- set object sizeObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- set the chart's corner, relative to which point coordinates are definedObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- set the symbolObjectSetString(chart_ID,name,OBJPROP_SYMBOL,symbol);
//--- set the periodObjectSetInteger(chart_ID,name,OBJPROP_PERIOD,period);
//--- set the scaleObjectSetInteger(chart_ID,name,OBJPROP_CHART_SCALE,scale);
//--- display (true) or hide (false) the time scaleObjectSetInteger(chart_ID,name,OBJPROP_DATE_SCALE,date_scale);
//--- display (true) or hide (false) the price scaleObjectSetInteger(chart_ID,name,OBJPROP_PRICE_SCALE,price_scale);
//--- set the border color when object highlighting mode is enabledObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set the border line style when object highlighting mode is enabledObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set a size of the anchor point for moving an objectObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
//--- display in the foreground (false) or background (true)ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the label by mouseObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object listObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chartObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful executionreturn(true);
}
Давно назрел вопрос, на форуме попытался найти ответ, но не нашел.
Почему так: имеется процессор E2650 (8/16) и 16Гб ОЗУ, при запуске оптимизации из MT5 доступно к использованию 16 агентов, все замечательно.
Но если попытаться из данного сервера сделать локальных агентов с помощью утилиты тестера стратегий - можно создать только 8 агентов? Это баг или фича?
Агенты нужны только для меня, я не собираюсь продавать их мощности.
Пробовал и удалить MT5, оставив только утилиту тестера - ничего не поменялось.
Прилагаю картинку для наглядности.
З.Ы. Сразу хочу ответить на комментарий, что гипертрединг в данном случае не даст прироста и скорости будут одинаковы.
Это не так, проверено, скорость генетики на 16 потоках почти в 1.5 раза быстрее, чем на чистых 8 ядрах тестера стратегий.
Давно назрел вопрос, на форуме попытался найти ответ, но не нашел.
Почему так: имеется процессор E2650 (8/16) и 16Гб ОЗУ, при запуске оптимизации из MT5 доступно к использованию 16 агентов, все замечательно.
Но если попытаться из данного сервера сделать локальных агентов с помощью утилиты тестера стратегий - можно создать только 8 агентов? Это баг или фича?
Агенты нужны только для меня, я не собираюсь продавать их мощности.
Пробовал и удалить MT5, оставив только утилиту тестера - ничего не поменялось.
Прилагаю картинку для наглядности.
З.Ы. Сразу хочу ответить на комментарий, что гипертрединг в данном случае не даст прироста и скорости будут одинаковы.
Это не так, проверено, скорость генетики на 16 потоках почти в 1.5 раза быстрее, чем на чистых 8 ядрах тестера стратегий.
Давно назрел вопрос, на форуме попытался найти ответ, но не нашел.
Почему так: имеется процессор E2650 (8/16) и 16Гб ОЗУ, при запуске оптимизации из MT5 доступно к использованию 16 агентов, все замечательно.
Но если попытаться из данного сервера сделать локальных агентов с помощью утилиты тестера стратегий - можно создать только 8 агентов? Это баг или фича?
Агенты нужны только для меня, я не собираюсь продавать их мощности.
Пробовал и удалить MT5, оставив только утилиту тестера - ничего не поменялось.
Прилагаю картинку для наглядности.
З.Ы. Сразу хочу ответить на комментарий, что гипертрединг в данном случае не даст прироста и скорости будут одинаковы.
Это не так, проверено, скорость генетики на 16 потоках почти в 1.5 раза быстрее, чем на чистых 8 ядрах тестера стратегий.
Просто подумайте об приоритетах MQ - первый и главный приоритет для компании - заработок денег, а с локальных агентов их не заработать.
Раньше можно было продавать патоки, потом это дело пофиксили.
Эффективность потоков зависит от задачи и фактически кода, и согласен что результаты могут быть разными.
Видимо, тяжело обеспечить расчет обработанной вычислительной информации по факту, поэтому тарификация идет исходя из коэффициентов, получаемых периодическими замерами.
На мой взгляд, конечно радикально можно сделать, что если делаешь агентов на все патоки, то получаешь запрет на торговлю своими ресурсами в клауде.
Физических 8, я написал (8/16) 8 - физических, 16 логических. В MT5 все 16 доступны к использованию и к оптимизации, а в утилите для создания локальных агентов доступно 8 (на картинке это видно).
В этом и был вопрос, это баг или фича? Зачем зарезать в тестере, который создает службы 8 логических ядер, которые доступны в том же терминале? Я же их не собираюсь продавать, они нужны только мне.
Просто подумайте об приоритетах MQ - первый и главный приоритет для компании - заработок денег, а с локальных агентов их не заработать.
Раньше можно было продавать патоки, потом это дело пофиксили.
Эффективность потоков зависит от задачи и фактически кода, и согласен что результаты могут быть разными.
Видимо, тяжело обеспечить расчет обработанной вычислительной информации по факту, поэтому тарификация идет исходя из коэффициентов, получаемых периодическими замерами.
На мой взгляд, конечно радикально можно сделать, что если делаешь агентов на все патоки, то получаешь запрет на торговлю своими ресурсами в клауде.
Печально, если это действительно так. Получается мне ограничивают использование своих же логических ядрер, для самого же себя.
2656 билд, после профилированя на реальных данных при скролинге отработавших функций Метаедитор зависает наглухо...
2660 Метаедитор зависает после профилирования
Уважаемая служба поддержки, Я использую сборку 2650 на Windows10, установленном на 64-битной (x64) Intel. Это странная вещь, которую я заметил. Создаю скрипт для записи файлов через Win32 API:
Скрипт работает отлично, и в указанном каталоге я нахожу файл «TestWinFiles.txt», который содержит контент «Hallo world!». Сейчас делаю НЕМНОГО МОДИФИКАЦИЮ:
Я просто вставляю инструкцию printf. Прикрепив этот скрипт к графику, во вкладке Terminal Expert я получаю такой результат:
Что не так с моим кодом? Почему printf так кардинально меняет поведение скрипта? Почему у меня вылетает память? Что-то не так с командами printf и WIN32 API? это, возможно, небольшая ошибка? Я был бы признателен за возможность использовать printf в библиотеках, содержащих импорт Win32 API. Огромное спасибо заранее.
Самое первое - тип FileHandle должен быть long, 64-битным, так как Вы работаете в 64-битной системе
2660 Metaeditor trava após criação de perfil
https://www.mql5.com/en/forum/353809#comment_18867237
Уважаемые разработчики,
Почему ты меня игнорируешь? Есть причина?
Извините за мой язык, я использую переводчик.
Я столкнулся с ошибкой, это должно быть для вас приоритетом, верно?
Здесь у нас есть ошибка с объектами мини-диаграммы: при создании мини-диаграммы в несфокусированном окне функции ChartSymbol() и ChartPeriod() возвращают неверные значения, пока мы не сфокусируем окно.
То же самое происходит, если мы закрываем и открываем терминал, а график с объектом minichart не сфокусирован.
Эта ошибка приводит к тому, что ChartIndicatorAdd() всегда терпит неудачу (возвращает false), пока мы не сфокусируем диаграмму!
Пожалуйста, исправьте эту ошибку!
Вот простой код советника для воспроизведения проблемы (проверьте журнал экспертов):
Давно назрел вопрос, на форуме попытался найти ответ, но не нашел.
Почему так: имеется процессор E2650 (8/16) и 16Гб ОЗУ, при запуске оптимизации из MT5 доступно к использованию 16 агентов, все замечательно.
Но если попытаться из данного сервера сделать локальных агентов с помощью утилиты тестера стратегий - можно создать только 8 агентов? Это баг или фича?
Агенты нужны только для меня, я не собираюсь продавать их мощности.
Пробовал и удалить MT5, оставив только утилиту тестера - ничего не поменялось.
Прилагаю картинку для наглядности.
З.Ы. Сразу хочу ответить на комментарий, что гипертрединг в данном случае не даст прироста и скорости будут одинаковы.
Это не так, проверено, скорость генетики на 16 потоках почти в 1.5 раза быстрее, чем на чистых 8 ядрах тестера стратегий.
Давно назрел вопрос, на форуме попытался найти ответ, но не нашел.
Почему так: имеется процессор E2650 (8/16) и 16Гб ОЗУ, при запуске оптимизации из MT5 доступно к использованию 16 агентов, все замечательно.
Но если попытаться из данного сервера сделать локальных агентов с помощью утилиты тестера стратегий - можно создать только 8 агентов? Это баг или фича?
Агенты нужны только для меня, я не собираюсь продавать их мощности.
Пробовал и удалить MT5, оставив только утилиту тестера - ничего не поменялось.
Прилагаю картинку для наглядности.
З.Ы. Сразу хочу ответить на комментарий, что гипертрединг в данном случае не даст прироста и скорости будут одинаковы.
Это не так, проверено, скорость генетики на 16 потоках почти в 1.5 раза быстрее, чем на чистых 8 ядрах тестера стратегий.
Физических ядер сколько? Не логических.
Давно назрел вопрос, на форуме попытался найти ответ, но не нашел.
Почему так: имеется процессор E2650 (8/16) и 16Гб ОЗУ, при запуске оптимизации из MT5 доступно к использованию 16 агентов, все замечательно.
Но если попытаться из данного сервера сделать локальных агентов с помощью утилиты тестера стратегий - можно создать только 8 агентов? Это баг или фича?
Агенты нужны только для меня, я не собираюсь продавать их мощности.
Пробовал и удалить MT5, оставив только утилиту тестера - ничего не поменялось.
Прилагаю картинку для наглядности.
З.Ы. Сразу хочу ответить на комментарий, что гипертрединг в данном случае не даст прироста и скорости будут одинаковы.
Это не так, проверено, скорость генетики на 16 потоках почти в 1.5 раза быстрее, чем на чистых 8 ядрах тестера стратегий.
Просто подумайте об приоритетах MQ - первый и главный приоритет для компании - заработок денег, а с локальных агентов их не заработать.
Раньше можно было продавать патоки, потом это дело пофиксили.
Эффективность потоков зависит от задачи и фактически кода, и согласен что результаты могут быть разными.
Видимо, тяжело обеспечить расчет обработанной вычислительной информации по факту, поэтому тарификация идет исходя из коэффициентов, получаемых периодическими замерами.
На мой взгляд, конечно радикально можно сделать, что если делаешь агентов на все патоки, то получаешь запрет на торговлю своими ресурсами в клауде.
Физических ядер сколько? Не логических.
Физических 8, я написал (8/16) 8 - физических, 16 логических. В MT5 все 16 доступны к использованию и к оптимизации, а в утилите для создания локальных агентов доступно 8 (на картинке это видно).
В этом и был вопрос, это баг или фича? Зачем зарезать в тестере, который создает службы 8 логических ядер, которые доступны в том же терминале? Я же их не собираюсь продавать, они нужны только мне.
Просто подумайте об приоритетах MQ - первый и главный приоритет для компании - заработок денег, а с локальных агентов их не заработать.
Раньше можно было продавать патоки, потом это дело пофиксили.
Эффективность потоков зависит от задачи и фактически кода, и согласен что результаты могут быть разными.
Видимо, тяжело обеспечить расчет обработанной вычислительной информации по факту, поэтому тарификация идет исходя из коэффициентов, получаемых периодическими замерами.
На мой взгляд, конечно радикально можно сделать, что если делаешь агентов на все патоки, то получаешь запрет на торговлю своими ресурсами в клауде.