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

 
Здравствуйте! Арендую сервер на MQL, терминал MT4. Cоветник почему постоянно пропадает с графика, при этом выполняется DeInit, ни ошибок ни багов. Советник просто открывает - закрывает сделки. Управляет всем индикатор, общаются меж собой через глобалки. При этом на половине графиков может быть всё норм, на другой половине вылетает. Может вылететь на одном из всех. Может пару дней проработать и всё норм, бывает по два раза в день. Открыто около 10 графиков. Советники меж собой ни как пересечься не могут, в имени глобалки и ChartID и инструмент. Думал сделать защиту через загрузку шаблона, но при программной загрузке шаблона выставляется запрет на торговлю. При этом аналогичный советник  дома с ноута работал без каких либо проблем около месяца. Может кто сталкивался, подскажите что делать?
 
Artyom Trishkin #:

Хм... А как ты хочешь указать компилятору выделить заранее неизвестный объём памяти под массив?

Почему не использовать динамический? Отпали бы вот такие головоломки.

Но ведь компилятор знает размер массива ресурсной переменной, так как она формируется на этапе компиляции. Странно, что MQ назвали ресурсную переменную переменной, когда она const.  :))
Не ясно зачем MQ сделали ресурсную переменную const! :(( Если бы она была обычным статическим массивом, то проблем бы не было. 
А так выходит, что мы получаем ресурс в константный статический массив и не можем его никуда передать, а только лишь создавать его динамическую копию, причем неудобство заключается в том, что эту копию придется делать в теле программы, а не в шапке в момент объвления экземпляра класса.
Мега неудобно.
Ничего пока лучше не придумал, чем через создание динамической копии.
Жалко, ведь я это делаю для КБ, чтобы людям было удобно и просто пользоваться подключением в ресурс программы png файлов.
А теперь нужно объяснять эти бубны с перерасходом памяти:

  1. объявляем ресурсную переменную
  2. создаем пустой экземпляр класса
  3. в теле программы (например в OnInit) создаем динамический дубликат ресурсной переменной
  4. загружаем этот массив в открытую ранее пустой экземпляр класса через определенный метод класса.
#resource "//Images//PNG.png" as uchar png_data[]

uchar png[];
CPng ppp();

int OnInit() {
   ArrayCopy(png,png_data);
   ppp.getPNG(png);

...


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

#resource "//Images//PNG.png" as uchar png_data[]

CPng ppp(png_data);




 
Nikolai Semko #:

вместо того

Внимательно посмотрите это.
 
fxsaber #:
Внимательно посмотрите это.

Ах, спасибо дорогой мой супермегаfxsaber 

туплю нереально. Ведь думал об этом, но забыл попробовать.

 

Всем привет. Столкнулся с тем, что при тестировании на истории при событии TRADE_ACTION_DEAL оказывается с  request.order = 0. А на реальном графике туда идет тикет реально открытого только что ордера, т.н. Позиции.
И получается, что с графиком реальным работает советник, а с тестером не может, т.к. там тикеты нулевые при открытии позиций.

Вопрос: как с этим совладать? Или как сделать специальный режим "только для советника"? Чтобы там можно было гонять по истории

 

в какой папке должен находиться купленный продукт типа библиотека, в папке MQL5\Libraries\Market\?

пользователь не может найти библиотеку, а я не знаю как проверить и как ему помочь.

 

Вопрос :

а КАК делают МУЛЬТИЯЗЫЧНЫЕ Советники / Индикаторы ?? чтобы все кнопки, параметры == писались на ВЫБРАННОМ языке ?!

 
Vitaliy Kostrubko #:

Вопрос :

а КАК делают МУЛЬТИЯЗЫЧНЫЕ Советники / Индикаторы ?? чтобы все кнопки, параметры == писались на ВЫБРАННОМ языке ?!

Я сам начинающий, но я бы сделал так:
enum выборку делаем. Например:

enum language

  {

   English = 0, //English

   Русский= 1, // Русский
Franche = 2, // французский

  }
//при открытии советника язык нужно будет указать. По умолчанию будет английский стоять
input language Lang = 0; // Выберите язык

И потом везде, где нужен текст другогj языка делаем if. Пример:

if (language = 1) //т.е. русский
{
то печатаем уже подготовленный текст на русском
}

if (language = 2) // т.е. французский
{
то печатаем уже подготовленный текст на французском
}
 
Andrey Dik #:

в какой папке должен находиться купленный продукт типа библиотека, в папке MQL5\Libraries\Market\?

пользователь не может найти библиотеку, а я не знаю как проверить и как ему помочь.

библиотека нашлась по такому пути (что очень странно, нелогично по крайней мере):

\\MQL5\Scripts\Market\

так и должно быть?

 
Andrey Dik #:

библиотека нашлась по такому пути (что очень странно, нелогично по крайней мере):

\\MQL5\Scripts\Market\

так и должно быть?

Андрей, ведь в документации всё чётко написано

#include <имя_файла>
#include "имя_файла"

Угловые скобки обозначают, что файл .mqh будет взят из стандартного каталога (обычно это каталог_терминала\MQL5\Include). Текущий каталог не просматривается.

Если имя файла заключено в кавычки, то поиск производится в текущем каталоге (в котором содержится основной файл исходного текста). Стандартный каталог не просматривается.

Документация по MQL5: Основы языка / Препроцессор / Включение файлов (#include)
Документация по MQL5: Основы языка / Препроцессор / Включение файлов (#include)
  • www.mql5.com
Включение файлов (#include) - Препроцессор - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5