Понятно, абсолютные путь файла указывать нельзя...
Атрибутами поиграйтесь. Например открыть для чтения и записи одновременно
Дело не в атрибутах, использовать прямой путь к файлу нельзя. Для файлов разрешено пространство лишь в директории C:\Путь установки MT\MQL5\Files
А я пытался создать файл на диске D:
Ну вот прямо из кода мультивалютника, создается куча лог-файлов. Есть в формате csv, есть бинарные, я потом их в матлабе анализирую. Может, поможет в чем-то... Заодно пишу тиковые данные в таком формате
2014.12.4 13:38:40,1202.48,1202.79 2014.12.4 13:38:41,1202.48,1202.79 2014.12.4 13:38:42,1202.43,1202.69 2014.12.4 13:38:44,1202.43,1202.69 2014.12.4 13:38:44,1202.43,1202.69 2014.12.4 13:38:45,1202.43,1202.69 2014.12.4 13:38:46,1202.53,1202.79
bool OpenLogFiles() { string LogFileName; if(EnableLogAllOrders) { if(LogFileAllOrders > 0) FileClose(LogFileAllOrders); if(IsRunOnTester()) { LogFileName = MQLInfoString(MQL_PROGRAM_NAME) + "_AllOrders" + "_Testing.ord"; LogFileAllOrders = FileOpen(LogFileName, FILE_CSV | FILE_WRITE, ','); } else { LogFileName = MQLInfoString(MQL_PROGRAM_NAME) + "_AllOrders" + ".ord"; LogFileAllOrders = FileOpen(LogFileName, FILE_CSV | FILE_READ | FILE_WRITE | FILE_SHARE_READ, ','); } if(LogFileAllOrders == INVALID_HANDLE) Alert("Не могу открыть лог-файл " + LogFileName); else { Print(LogFileName + " is opened"); FileSeek(LogFileAllOrders, 0, SEEK_END); } } if(!(EnableLogOrders || EnableLogInfo || EnableTickSave)) return false; for(int ns = 0; ns < USING_SUMBOLS_COUNT; ns++) { string symbolName = UsingSymbolNames[ns]; if(MarketInfo(symbolName, MODE_ASK) < 0.01) continue; for(int n = 0; n < (int)maxLogFileType; n++) { switch((LogFileType)n) { case opOrders: LogFileName = symbolName + "_" + MQLInfoString(MQL_PROGRAM_NAME) + "_Orders"; break; case opInfo: LogFileName = symbolName + "_" + MQLInfoString(MQL_PROGRAM_NAME) + "_Info"; break; case opTickSave: LogFileName = symbolName + "_" + MQLInfoString(MQL_PROGRAM_NAME) + "_Tick"; break; default: Alert("Wrong file type inedtificator in OpenLogFiles"); break; } if(LogFilesArray[ns][n] > 0) FileClose(LogFilesArray[ns][n]); if(IsRunOnTester()) { if((LogFileType)n == opOrders) { LogFileName = LogFileName + "_Testing.ord"; LogFilesArray[ns][n] = FileOpen(LogFileName, FILE_CSV | FILE_WRITE, ','); } if((LogFileType)n == opInfo) { LogFileName = LogFileName + "_Testing.dat"; LogFilesArray[ns][n] = FileOpen(LogFileName, FILE_BIN | FILE_WRITE); } if((LogFileType)n == opTickSave) { LogFileName = LogFileName + "_Testing.csv"; LogFilesArray[ns][n] = FileOpen(LogFileName, FILE_CSV | FILE_WRITE, ','); } } else { if((LogFileType)n == opOrders) { LogFileName = LogFileName + ".ord"; LogFilesArray[ns][n] = FileOpen(LogFileName, FILE_CSV | FILE_READ | FILE_WRITE | FILE_SHARE_READ, ','); } if((LogFileType)n == opInfo) { LogFileName = LogFileName + ".dat"; LogFilesArray[ns][n] = FileOpen(LogFileName, FILE_BIN | FILE_READ | FILE_WRITE | FILE_SHARE_READ); } if((LogFileType)n == opTickSave) { LogFileName = LogFileName + ".csv"; LogFilesArray[ns][n] = FileOpen(LogFileName, FILE_CSV | FILE_READ | FILE_WRITE | FILE_SHARE_READ, ','); } } if(LogFilesArray[ns][n] == INVALID_HANDLE) Alert("Не могу открыть лог-файл " + LogFileName); else { Print(LogFileName + " is opened"); FileSeek(LogFilesArray[ns][n], 0, SEEK_END); } } } return true; }
Ну вот прямо из кода мультивалютника, создается куча лог-файлов. Есть в формате csv, есть бинарные, я потом их в матлабе анализирую. Может, поможет в чем-то... Заодно пишу тиковые данные в таком формате
Да, проблема решена, все равно файлы вне директории МТ писать, создавать нельзя.
Лучше скажите, при выводе информации о тиках в файл, много ли их пропадает? Ведь OnTick не сработает до тех пор пока предыдущая обработка не завершится... Можно ли выводить данные стакана цен? не только bid и ask? Есть ли у кого подобный опыт?
Да, проблема решена, все равно файлы вне директории МТ писать, создавать нельзя.
Лучше скажите, при выводе информации о тиках в файл, много ли их пропадает? Ведь OnTick не сработает до тех пор пока предыдущая обработка не завершится... Можно ли выводить данные стакана цен? не только bid и ask? Есть ли у кого подобный опыт?
Собирайте тики в индикаторе. Индикатор обрабатывает все тики, советник может тики пропускать.
Собирайте тики в индикаторе. Индикатор обрабатывает все тики, советник может тики пропускать.
Да, проблема решена, все равно файлы вне директории МТ писать, создавать нельзя.
Лучше скажите, при выводе информации о тиках в файл, много ли их пропадает? Ведь OnTick не сработает до тех пор пока предыдущая обработка не завершится... Можно ли выводить данные стакана цен? не только bid и ask? Есть ли у кого подобный опыт?
Я использую в роботе методы DSP и мне нужна дискретизация с определенной частотой для правильной обработки сигнала. То есть все тики мне не нужны. Я использую дискретизацию по таймеру с частотой 1 Гц, при этом обрабатываются 8 валютных пар. Для меня 1 Гц - это приемлемый компромисс между загруженностью проца и точностью полученных данных. Все равно на МТ4/5 HFT не катит )))
для котировки основная частота не 1Гц (т.е. одна колебание в секунду), а одно значение цены за один тик, даже если цена не изменилась. попробуйте и Ваши методы обработки сигнала, т.е. цены станут приближены к рынку.
Эта ошибочная точка зрения кочует по форумам уже много лет. Конечно, я пробовал этот подход, получается хуже. Да и с точки зрения теории ЦОС это неверно. Если мы работаем во временной области, то в ней и надо дискретизировать. К тому же у меня параллельно идет анализ 8 валютных пар, к каким тикам прикажете привязываться?
И небольшой пример. Частота дискретизации CD 44100 Гц. Примените ваш подход и на выходе вместо музыки получите какофонию )).
https://www.mql5.com/ru/blogs/post/235953

- 2014.12.13
- Alexey Volchanskiy
- www.mql5.com

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день. Пытаюсь сделать простяцкую вещь - текстовый лог файл. Да вот беда не получается.
Использовал класс CFileTxt
Пишу следующее:
Выдается -1;
Подцепиться к уже существующему файлу также не получается, что делаю не так?
Как создать файл для чтения\записи?