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

 
fxsaber:

На некоторых символах стоит таймаут, на некоторых - нет. Как узнать максимальный возраст тика, который еще может восприниматься OrderSend (нет [No price])?

Хрен его знает. 

 
Stanislav Korotky:
 Вот флаг FILE_SHARE_WRITE в таком сочетании, похоже, работает, но возникает другой вопрос: какой смысл именно в такой записи? По логике, если включать разделение при записи, то нужно его добавлять именно к флагу записи:

Именно это я и пробовал, и оно тоже дает ошибку.

Включил MetaTrader, нашёл свой давний пример, добавил FILE_SHARE_WRITE (хотя он там и не нужен) - результат не поменялся... возможно у меня по другой причине не работало
 

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

Торговая платформа MetaTrader 5 стала доступна клиентам AMP Futures для торговли фьючерсами

fxsaber, 2018.07.23 22:34

Пример, когда невозможно сделать Маркет-ордер даже в том случае, когда Bid/Ask кратны TickSize

Здесь Last-цена не кратна TickSize. Она никакого отношения к маркет-ордерам не имеет, но OrderCheck все так же бажит - не дает провести маркет-ордер.

 
fxsaber:

На некоторых символах стоит таймаут, на некоторых - нет. Как узнать максимальный возраст тика, который еще может восприниматься OrderSend (нет [No price])?

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

 
A100:
Включил MetaTrader, нашёл свой давний пример, добавил FILE_SHARE_WRITE (хотя он там и не нужен) - результат не поменялся... возможно у меня по другой причине не работало

как вариант спозиционировать файл в память (MemMap) и там работать через семафор, по окончании работы так же через семафор сбросить в файл данные

такой способ кстати даст большой выигрыш в скорости

 
Konstantin:

как вариант спозиционировать файл в память (MemMap) и там работать через семафор, по окончании работы так же через семафор сбросить в файл данные

такой способ кстати даст большой выигрыш в скорости

Дело в том что у меня был небольшой файл конфигурации и каждый эксперт должен был лишь только прочитать его один раз перед началом работы - простейшая операция - посмотрите пример по ссылкам выше... а Вы говорите - семафоры )
 
A100:
Дело в том что у меня был небольшой файл конфигурации и каждый эксперт должен был лишь только прочитать его один раз перед началом работы - простейшая операция - посмотрите пример по ссылкам выше... а Вы говорите - семафоры )

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

 
Stanislav Korotky:

Вот на это простом скрипте, запущенном сперва с writing = true, а потом на другом чарте с writing = false, получаю ошибку.


#property script_show_inputs

input bool writing = false;

int OnStart()
{
  int handle = FileOpen("xyz.foo", FILE_READ|FILE_BIN|FILE_SHARE_READ|(writing?FILE_WRITE:0));
  if(handle == INVALID_HANDLE)
  {
    Print("FileOpen failed: ", GetLastError());
    return INIT_FAILED;
  }
  
  if(writing) FileWriteInteger(handle, 0);
  
  Print("handle=", handle);
  
  while(!IsStopped())
  {
    Sleep(1000);
  }

  Print("Closing");
  FileClose(handle);

  return 0;
}

Открывающему на чтение не хватает флага FILE_SHARE_WRITE (разрешить запись), т.к. имеется пишущий.

Это ограничение системы (WinAPI).

Вот правильные флаги, при котором ваш код будет работать:

int handle = FileOpen("xyz.foo", FILE_READ|FILE_BIN|FILE_SHARE_READ|(writing?FILE_WRITE:FILE_SHARE_WRITE));
 
Ilyas:

Вот правильные флаги, при котором ваш код будет работать:

Просьба починить FileLoad

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

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

fxsaber, 2018.07.10 19:26

Ошибка в FileLoad. Если с флагом FILE_COMMON два локальных Агента пытаются считать данные через FileLoad, то один из Агентов обламывается.

В FileOpen можно задать соответствующие флаги, а вот в FileLoad - нет. Поэтому просьба разрешить доступ к файлу через FileLoad, если другой FileLoad его считывает.

 
TheXpert:

почему? )

Потому, что в списке флагов нет нуля

Идентификатор

Значение

Описание

FILE_READ

1

Файл открывается для чтения. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ

FILE_WRITE

2

Файл открывается для записи. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ

FILE_BIN

4

Двоичный режим чтения-записи (без преобразования из строки и в строку). Флаг используется при открытии файлов (FileOpen())

FILE_CSV

8

Файл типа csv (все записанные элементы преобразуются к строкам соответствующего типа, unicode или ansi, и разделяются разделителем). Флаг используется при открытии файлов (FileOpen())

FILE_TXT

16

Простой текстовый файл (тот же csv, однако разделитель не принимается во внимание). Флаг используется при открытии файлов (FileOpen())

FILE_ANSI

32

Строки типа ANSI (однобайтовые символы). Флаг используется при открытии файлов (FileOpen())

FILE_UNICODE

64

Строки типа UNICODE (двухбайтовые символы). Флаг используется при открытии файлов (FileOpen())

FILE_SHARE_READ

128

Совместный доступ по чтению со стороны нескольких программ. Флаг используется при открытии файлов (FileOpen()), но не заменяет при открытии файла необходимости указать FILE_WRITE и/или флаг FILE_READ

FILE_SHARE_WRITE

256

Совместный доступ по записи со стороны нескольких программ. Флаг используется при открытии файлов (FileOpen()), но не заменяет при открытии файла необходимости указать FILE_WRITE и/или флаг FILE_READ

FILE_REWRITE

512

Возможность перезаписывания файла функциями FileCopy() и FileMove(). Файл должен существовать или открываться для записи. В противном случае файл открыт не будет

FILE_COMMON

4096

Расположение файла в общей папке всех клиентских терминалов \Terminal\Common\Files. Флаг используется при открытии файлов (FileOpen()), копировании файлов (FileCopy(), FileMove()) и проверке существования файлов (FileIsExist())


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

Документация по MQL5: Константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
Документация по MQL5: Константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
  • www.mql5.com
Файл открывается для чтения. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ Файл открывается для записи. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ Файл...
Причина обращения: