Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1117

 

Когда-то на форуме писали о том что в МТ5 будет добавлена возможность импорта пользовательских исторических данных, это уже реализовано?

 
Top2n:

//--- путь к файлу
   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)  = 0.0  = 0.0  = 0.0
2017.01.09 17:20:40.609 TorFid_v02 (EURUSD,H1)  Total data = 1020100

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

Если конечно я сохранил правильно 

for(int z=1; z<=ARRAY_SIZE_Y; z++) // Перебор по барам, колонка Y
        {
         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

int arr[2][2];

void OnStart()
{
int z = 0;
for(int i = 0; i < 2; i++)
  {
   arr[i][z] = i+z+1;
    z++;
  }
WriteData();
}

и убери количество записываемых элементов. Так будет записываться весь файл от начала до конца. Проверь появился-ли файл по указанному пути.

void WriteData() // здесь

FileWriteArray(handle,arr); // и здесь
Потом прочти и распечатай что получилось. Если ты увидишь 1 и 3 то значит проблема в заполнении массива.
 
Top2n:

Вот смотри что получается.

Код скрипта записи.

//+------------------------------------------------------------------+
//|                                                   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][0]1
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 будет работать так-же.

 
Alexey Viktorov:
Потом прочти и распечатай что получилось. Если ты увидишь 1 и 3 то значит проблема в заполнении массива.

Честно не знаю даже, что произошло, но все заработало, осталось добавлять строчку каждый новый бар, надеюсь что вопросов не будет)))

Благодарю вас! 

 

Всем привет!!! Подскажите пожалуйста, хочу скачать чистую МТ4, но не где не могу найти, с оф сайта качает только МТ5. Пожалуйста скиньте кто то чистый последний билд. За ранее спасибо!!!

 
stepan.brend:

Всем привет!!! Подскажите пожалуйста, хочу скачать чистую МТ4, но не где не могу найти, с оф сайта качает только МТ5. Пожалуйста скиньте кто то чистый последний билд. За ранее спасибо!!!

Скачайте у любого понравившегося ДЦ, и будет вам чистая последняя версия, с единственной разницей - логотип в ярлыке.
 
Vitaly Muzichenko:
Скачайте у любого понравившегося ДЦ, и будет вам чистая последняя версия, с единственной разницей - логотип в ярлыке.
проблема в том, что не работает маркет, не могу установить не одну утилиту на МТ4. Подскажите что делать пожалуйста) Очень надо установить утилиту
 
stepan.brend:
проблема в том, что не работает маркет, не могу установить не одну утилиту на МТ4. Подскажите что делать пожалуйста) Очень надо установить утилиту
В другом ДЦ счёт открыть. Или другой тип счёта. Наличие или отсутствие маркета полностью зависит от счёта.
 
Vitalie Postolache:
В другом ДЦ счёт открыть. Или другой тип счёта. Наличие или отсутствие маркета полностью зависит от счё
Vitalie Postolache:
В другом ДЦ счёт открыть. Или другой тип счёта. Наличие или отсутствие маркета полностью зависит от счёта.

Попробывал три ДЦ  и разные счета, маркет все равно не работает(

 
stepan.brendПопробывал три ДЦ  и разные счета, маркет все равно не работает(
Чудес не бывает. Версия терминала какая? Видел счета, в которых вкладка сигналов отсутствует, но маркет в большинстве есть.
Причина обращения: