вот не хочет записывать файл. Почему ?
Не надо так путь указывать.
int filehandle=FileOpen(signal+".bin",FILE_WRITE|FILE_BIN|FILE_COMMON);
Флаг FILE_COMMON отвечает за расположение файла и тип файла должен совпадать с указанным флагом.
файл сохраняется в
C:\Program Files (x86)\MetaTrader 4 TeleTrade\MQL4\Files
а хочу чтоб сохранялся в
C:\Users\comp\AppData\Roaming\MetaQuotes\Terminal\Common
и отсюда же считывался другим терминалом
int filehandle=FileOpen(signal+".csv",FILE_WRITE|FILE_CSV|TERMINAL_COMMONDATA_PATH);
хочу чтоб сохранялся в
C:\Users\comp\AppData\Roaming\MetaQuotes\Terminal\Common
и отсюда же считывался другим терминалом
Залинкуйте все терминалы на одну MQL-папку.
Такой обмен данными имеет проблему, которую затрагивали здесь.
Попробуйте это решение
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: File Mapping без DLL
fxsaber, 2017.04.03 16:07
Спасибо автору за библиотеку!
Сварганил функции для передачи любых данных. Ниже скрипт показывает их работу на примере тиков
#include <MemMapLib.mqh> #include <TypeToBytes.mqh> // Выделяет память заданной длины под данные template <typename T> bool GetFileMemory( CMemMapFile* &FileMemory, const int Amount, const string FileName = "Local\\test" ) { FileMemory = new CMemMapFile; return(FileMemory.Open(FileName, sizeof(T) * Amount + sizeof(int) + HEAD_MEM, modeCreate) == 0); } // Записывает данные в память template <typename T> void DataSave( CMemMapFile* FileMemory, const T &Data[], const bool FromBegin = true ) { const int Size = ArraySize(Data) * sizeof(T); uchar Bytes[]; _ArrayCopy(Bytes, _R(Size).Bytes); // Записали количество _ArrayCopy(Bytes, _R(Data).Bytes, sizeof(int)); // Записали данные if (FromBegin) FileMemory.Seek(0, SEEK_SET); FileMemory.Write(Bytes, ArraySize(Bytes)); // Сбросили все в память return; } // Считывает данные из памяти template <typename T> int DataLoad( CMemMapFile* FileMemory, T &Data[], const bool FromBegin = true ) { if (FromBegin) FileMemory.Seek(0, SEEK_SET); uchar Bytes[]; FileMemory.Read(Bytes, sizeof(int)); // Прочли из памяти количество данных FileMemory.Read(Bytes, _R(Bytes)[0]); // Получили сами данные _ArrayCopy(Data, Bytes); // Сбросили данные в массив return(ArraySize(Data)); } #define AMOUNT 1000 #define TOSTRING(A) #A + " = " + (string)(A) + " " // Пример передачи тиков void OnStart() { CMemMapFile* FileMemory; if (GetFileMemory<MqlTick>(FileMemory, AMOUNT)) { MqlTick Ticks4Save[]; CopyTicks(_Symbol, Ticks4Save, COPY_TICKS_INFO, 0, AMOUNT); DataSave(FileMemory, Ticks4Save); MqlTick Ticks4Load[]; if (DataLoad(FileMemory, Ticks4Load) > 0) Print(TOSTRING((_R(Ticks4Save) == Ticks4Load)) + TOSTRING(ArraySize(Ticks4Save)) + TOSTRING(ArraySize(Ticks4Load))); FileMemory.Close(); } delete FileMemory; }
Результат
(_R(Ticks4Save)==Ticks4Load) = true ArraySize(Ticks4Save) = 1000 ArraySize(Ticks4Load) = 1000
Только на 1589+ не переходите.
а немного подробней можно ?
Есть 2 терминала, как из одного терминала прочитать файл созданный другим терминалом ? Можно конечно положить терминал в папку MQL/Files. Но если надо чтоб 3-5 терминалов делали то же самое?
а немного подробней можно ?
вот не хочет записывать файл. Почему ?
Так попробуйте:
string subfolder="folder_name\\"; int filehandle=FileOpen(subffolder+"filename.csv",FILE_WRITE|FILE_CSV|FILE_COMMON);
файл сохраняется в
C:\Program Files (x86)\MetaTrader 4 TeleTrade\MQL4\Files
а хочу чтоб сохранялся в
C:\Users\comp\AppData\Roaming\MetaQuotes\Terminal\Common
и отсюда же считывался другим терминалом
Дмитрий, а ткнуть в ссылку и прочесть что мешает???
FILE_COMMON |
4096 |
Расположение файла в общей папке всех клиентских терминалов \Terminal\Common\Files. Флаг используется при открытии файлов (FileOpen()), копировании файлов (FileCopy(), FileMove()) и проверке существования файлов (FileIsExist()) |
Это именно то что тебе надо...
Alexey Viktorov СПАСИБА! Изначально так и сделал, но что-то не получилось ...
Не получилось наверное из-за типа файла */csv с флагом FILE_BIN
Расширение нужно только операционной системе, чтобы ассоциировать файл с приложением, его открывающим.
А содержимое при этом может быть любым — и текстовым в файле *.bin, и бинарным в файле *.csv или *.txt
Можно вообще назвать файл без расширения, на работу влиять не будет.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования