Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1117
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Когда-то на форуме писали о том что в МТ5 будет добавлена возможность импорта пользовательских исторических данных, это уже реализовано?
string path=InpDirectoryName+"//"+InpFileName;
//--- откроем файл
ResetLastError();
int file_handle=FileOpen(path,FILE_READ|FILE_BIN);
if(file_handle!=INVALID_HANDLE)
{
//--- прочитаем все данные из файла в массив
FileReadArray(file_handle,arr);
//--- получим размер массива
int size=ArraySize(arr);
//--- распечатаем данные из массива
Print(" = ",arr[0][0]," = ",arr[1][1]," = ",arr[2][2]);
Print("Total data = ",size);
//--- закрываем файл
FileClose(file_handle);
}
else
Print("File open failed, error ",GetLastError());
2017.01.09 17:20:40.609 TorFid_v02 (EURUSD,H1) Total data = 1020100
Я понимаю что не хватает, обратного преобразования в двумерный массив, но я не понимаю как
Если конечно я сохранил правильно
{
for(int q=1; q<ARRAY_SIZE_X-1; q++) // Перебор по периоду, колонка X
{
arr[q][z]=NormalizeDouble(sm.d[q+1].m[nBar-z],5); // M(I) SMA
}
}
WriteData(1000);
//| Запись n элементов массива в файл |
//+------------------------------------------------------------------+
void WriteData(const int n)
{
//--- откроем файл
ResetLastError();
int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
if(handle!=INVALID_HANDLE)
{
//--- запишем данные массива в конец файла
FileSeek(handle,0,SEEK_END);
FileWriteArray(handle,arr,0,n);
//--- закрываем файл
FileClose(handle);
}
else
Print("Failed to open the file, error ",GetLastError());
}
Я надеюсь что эти строки тоже присутствуют
input string InpFileName="data.bin";
input string InpDirectoryName="SomeFolder";
Начни с простого. Перепиши всё это в скрипты. Один для записи файла, а другой для чтения и печати прочитанного. Для записи сделай простой массив 2х2
void OnStart()
{
int z = 0;
for(int i = 0; i < 2; i++)
{
arr[i][z] = i+z+1;
z++;
}
WriteData();
}
и убери количество записываемых элементов. Так будет записываться весь файл от начала до конца. Проверь появился-ли файл по указанному пути.
FileWriteArray(handle,arr); // и здесь
Вот смотри что получается.
Код скрипта записи.
//| WriteArray.mq5 |
//| Viktorov |
//| v4forex@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Viktorov"
#property link "v4forex@yandex.ru"
#property version "1.00"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
string InpFileName = "data.bin";
string InpDirectoryName = "SomeFolder";
string path=InpDirectoryName+"//"+InpFileName;
int arr[3][3];
int handle;
void OnStart()
{
int i = 0, z = 0;
for(i = 0; i < 3; i++)
{
for(z = 0; z < 3; z++)
{
arr[i][z] = i*z+1;
}
}
WriteData();
}
//+------------------------------------------------------------------+
void WriteData()
{
//--- откроем файл
ResetLastError();
handle=FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
if(handle!=INVALID_HANDLE)
{
//--- запишем данные массива в конец файла
FileSeek(handle,0,SEEK_END);
FileWriteArray(handle,arr);
//--- закрываем файл
FileClose(handle);
}
else
Print("Failed to open the file, error ",GetLastError());
}
Код скрипта чтения.
//| ReadArray.mq5 |
//| Viktorov |
//| v4forex@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Viktorov"
#property link "v4forex@yandex.ru"
#property version "1.00"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
string InpFileName = "data.bin";
string InpDirectoryName = "SomeFolder";
string path=InpDirectoryName+"//"+InpFileName;
int handle;
void OnStart()
{
int arr[3][3];
int i = 0, z = 0;
handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
FileReadArray(handle, arr);
for(i = 0; i < 3; i++)
{
for(z = 0; z < 3; z++)
{
Print("arr[", i, "][", z, "]", arr[i][z]);
}
}
}
//+------------------------------------------------------------------+
и вот что распечатало
2017.01.09 12:46:22.979 ReadArray (EURUSD,M1) arr[0][1]1
2017.01.09 12:46:22.979 ReadArray (EURUSD,M1) arr[0][2]1
2017.01.09 12:46:22.979 ReadArray (EURUSD,M1) arr[1][0]1
2017.01.09 12:46:22.979 ReadArray (EURUSD,M1) arr[1][1]2
2017.01.09 12:46:22.979 ReadArray (EURUSD,M1) arr[1][2]3
2017.01.09 12:46:22.979 ReadArray (EURUSD,M1) arr[2][0]1
2017.01.09 12:46:22.979 ReadArray (EURUSD,M1) arr[2][1]3
2017.01.09 12:46:22.979 ReadArray (EURUSD,M1) arr[2][2]5
Так-что никаких прибамбасов для преобразования не надо. Надо только изначально задавать одинаковые массивы.
Не обращай внимания на то, что это mql5, в mql4 будет работать так-же.
Потом прочти и распечатай что получилось. Если ты увидишь 1 и 3 то значит проблема в заполнении массива.
Честно не знаю даже, что произошло, но все заработало, осталось добавлять строчку каждый новый бар, надеюсь что вопросов не будет)))
Благодарю вас!
Всем привет!!! Подскажите пожалуйста, хочу скачать чистую МТ4, но не где не могу найти, с оф сайта качает только МТ5. Пожалуйста скиньте кто то чистый последний билд. За ранее спасибо!!!
Всем привет!!! Подскажите пожалуйста, хочу скачать чистую МТ4, но не где не могу найти, с оф сайта качает только МТ5. Пожалуйста скиньте кто то чистый последний билд. За ранее спасибо!!!
Скачайте у любого понравившегося ДЦ, и будет вам чистая последняя версия, с единственной разницей - логотип в ярлыке.
В другом ДЦ счёт открыть. Или другой тип счёта. Наличие или отсутствие маркета полностью зависит от счё
В другом ДЦ счёт открыть. Или другой тип счёта. Наличие или отсутствие маркета полностью зависит от счёта.
Попробывал три ДЦ и разные счета, маркет все равно не работает(