Скачать MetaTrader 5

Смотри, как бесплатно скачать роботов

Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят

Понравился скрипт?
Оцени его работу в терминале MetaTrader 5

2013.03.29 11:42
Советники

Demo_FileWriteArray - эксперт для MetaTrader 5

| Russian English 中文 Español Deutsch 日本語 Português

Просмотров:
1584
Рейтинг:
голосов: 22

Эксперт на каждом тике получает значения цен Bid и Ask и запоминает их в массив структуры "prices". На каждом двадцатом тике эксперт осуществляет запись данных объекта структуры в файл, используя функцию FileWriteArray(). Данные будут записываться в бинарный файл в поддиректории локальной папки терминала. Местоположение локальной папки терминала можно получить при помощи вызова функции TerminalInfoString().

PrintFormat("Путь к локальной папке терминала: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); 
При удалении эксперта с графика производится запись еще не записанных данных в файл, после чего эксперт завершает свою работу.

Код:

//--- входные параметры
input string InpFileName="data.bin";
input string InpDirectoryName="SomeFolder";
//+------------------------------------------------------------------+
//| Структура для хранения данных о ценах                            |
//+------------------------------------------------------------------+
struct prices
  {
   datetime          date; // дата
   double            bid;  // цена бид
   double            ask;  // цена аск
  };
//--- глобальные переменные
int    count=0;
int    size=20;
string path=InpDirectoryName+"//"+InpFileName;
prices arr[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- выделение памяти для массива
   ArrayResize(arr,size);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- запись оставшихся count строк, если count<n
   WriteData(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- сохраним данные в массив
   arr[count].date=TimeCurrent();
   arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
//--- отобразим текущие данные
   Print("Date = ",arr[count].date," Bid = ",arr[count].bid," Ask = ",arr[count].ask);
//--- увеличим счетчик
   count++;
//--- если массив заполнился, то записываем данные в файл и обнуляем его
   if(count==size)
     {
      WriteData(size);
      count=0;
     }
  }
//+------------------------------------------------------------------+
//| Запись 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());
  }
Demo_FileGetInteger Demo_FileGetInteger

Скрипт демонстрирует пример использования функции FileGetInteger()

Demo_FileIsEnding Demo_FileIsEnding

Скрипт демонстрирует пример использования функции FileIsEnding()

Demo_FileReadArray Demo_FileReadArray

Скрипт демонстрирует пример использования функции FileReadArray()

i-Monday_Sig i-Monday_Sig

Сигналы входов по системе "Понедельник"