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

 
Alexey Navoykov:

Кто-то тут советовал, мол посчитайте хэш от исходников.  Так для этого нужно знать все исходники (инклудники), используемые программой, а значит нужно парсить код не по детски.  Они ж необязательно заданы в явном виде (#include <file.mqh>),  а могут быть заданы в виде макросов.

Ну, если что-то зависит от макросов, то для изменения результата должны измениться макросы, то есть исходники. Чтение всех зависимостей по include-ам я приводил в статье. Там, кстати говоря, комментарии выкусываются, так что остается голый код.

#property script_show_inputs

input string SourceFile = "filename.txt";
input string IncludesFolder = "";
input bool LoadIncludes = false;

void OnStart()
{
  Preprocessor loader(SourceFile, IncludesFolder, LoadIncludes);
  
  if(!loader.run())
  {
    Print("Loader failed");
    return;
  }

  // output entire data as it is assembled from one or many files
  int handle = FileOpen("dump.txt", FILE_WRITE | FILE_TXT | FILE_ANSI, 0, CP_UTF8);
  FileWriteString(handle, loader.text().get());
  FileClose(handle);
}
Но, я согласен, что удобнее всё иметь в самом редакторе, а не мастерить вручную.
 
Stanislav Korotky:

Ну, если что-то зависит от макросов, то для изменения результата должны измениться макросы, то есть исходники. Чтение всех зависимостей по include-ам я приводил в статье. Там, кстати говоря, комментарии выкусываются, так что остается голый код.

О, спасибо, я даже я не в курсе был о таком.  Правда у вас там именно и сказано о спотыканиях об макросы.  Впрочем будем проверять конечно.

Вы продолжаете развивать этот проект?  Так то потенциал действительно огромный, особенно в плане доработки языка своими силами, ибо многое в MQL так и не реализовано, а многое работает через пень-колоду (баги), и разработчики, как я понял, больше не планируют ничего улучшать в самом языке.

 
В классе CCanvas методы FontGet, TextWidth, TextHeight и TextSize почему-то объявлены неконстантными, хотя они никаких изменений с классом не производят. Работают чисто на получение данных.
 

Что-то не пойму, для графического элемента "Кнопка" нельзя задать свойство наподобие Enabled=false, чтобы кнопка стала недоступной для нажатия?

Т.е. пользователь изначально нажал кнопку, запустился некий процесс работы, при этом кнопка должна оставаться в нажатом положении, не реагируя на последующие нажатия.  Можно ли так сделать?

p.s. Нашёл. Приоритет для объекта выставить отрицательный.
 

Подскажите способ получить данные (текст) из этого списка

 
fxsaber:

Подскажите способ получить данные (текст) из этого списка

https://www.mql5.com/ru/docs/convert/enumtostring

Документация по MQL5: Преобразование данных / EnumToString
Документация по MQL5: Преобразование данных / EnumToString
  • www.mql5.com
//| Script program start function                                    |
 

Мне нужен список всех enum из всплывающей подсказки.

Пробовал несколько программ по работе с окнами. Не выходит, т.к. список исчезает при уходе фокуса.
Программы для работы с окнами приложений | Темная сторона Силы | Blog. Just Blog
  • ManHunter / PCL
  • www.manhunter.ru
В процессе разработки программ, а также их исследования, очень часто приходится работать с окнами приложений на уровне системы. То есть просматривать или менять стили окон, передавать или отслеживать сообщения и уведомления, обрабатывать другие параметры окон. У меня накопилась небольшая подборка программ, значительно облегчающих выполнение...
 

Подскажите, по OnTradeTransaction(). Нижеописанное - нормальное поведение? В тестере проверил - так и есть :( А на "живом" счёте?

В OnTick() есть цикл, закрывающий позиции по порядку.

В OnTradeTrancaction() подсчёт количества открытых позиций.

Советник поступает так: сначала до конца выполняет цикл закрытия, потом переходит к OnTradeTransaction и в том же порядке выполняет подсчёты.

Другими словами не

закрытие тикета #1 -> подсчёт с учетом закрытия тикета #1 -> закрытие тикета #2 -> подсчёт с учетом закрытия тикета #2 -> ...

а

закрытие тикета #1 -> закрытие тикета #2 -> ... -> подсчёт с учетом закрытия тикета #1 -> подсчёт с учетом закрытия тикета #2 -> ...

т.е. работает не параллельно, а последовательно.

Если вышеописанное нормально, то получается, что безопасно OnTradeTransaction() можно использовать только в советниках, открывающих/закрывающих только один ордер. Если сетка или мультисимвольный (или мультисимвольнаяя сетка, где это и обнаружилось :) ) - алгоритм ломается.

 
Igor Zakharov:

Подскажите, по OnTradeTransaction(). Нижеописанное - нормальное поведение? В тестере проверил - так и есть :( А на "живом" счёте?

На реале всегда все много сложнее, чем на демо и в тестере.

OnTradeTransaction-концепция слабо продумана, но мнение "Вы просто не умеете их готовить" звучит постоянно.


Либо пишите без данных о транзакциях, либо получайте их со стороны в любом месте программы, не дожидаясь входа в OnTradeTransaction.

Для мультисимвольной сетки хороша асинхронность. Поэтому выбрал бы второй вариант.
 
В terminal64.exe или metatester64.exe сидит Тестер? Нужно понять, какой файл менять, чтобы уйти от бага.