Руководство пользователя

Объект file
NetTradeX PC
NetTradeX Android
NetTradeX iOS
NetTradeX Mobile
NetTradeX Advisors
Объект file

В языке NTL+ предусмотрена возможность работы с файлами, которые могут использоваться для сохранения и чтения пользовательской информации.

При помощи языка NTL+ можно создавать новые файлы, читать существующие файлы, дописывать новую информацию в существующий файл, удалять файлы.

Файлы, с которыми работает терминал, должны располагаться в папке Имя_пользователя\Documents\NeTtradeX Advisors\scripts\files. При создании файла с указанием пути содержащим папки они создаются автоматически.

Прежде чем считывать или записывать информацию из файла, необходимо создать объект file. Это можно сделать следующий образом: file f;, также допускается совместить создание и открытие файла, задав в конструкторе объекта имя файла и режим открытия: file f("data.txt",fmRead|fmText);

При работе с любыми файлами необходимо указать имя файла и комбинацию констант для указания режима работы. Имена файла должны подчиняться стандартным правилам для OC Windows, например, имена файлов не должны содержать следующие символы: \, /, :, *, ?, ", <, >, |.

Константы для работы с файлами:

  • fmRead - режим чтения
  • fmWrite - режим записи
  • fmBinary - работа с двоичными данными
  • fmText - работа с текстовыми данными

Методы объекта:

Метод Описание
bool Open(const string &in, int mode=0) Метод открывает файл для последующих операций записи или чтения.
bool IsOpen() Метод проверяет, открыт ли указанный файл для работы с ним.
void Close() Метод закрывает файл.
void Flush() Метод сбрасывает все данные из буфера вывода на диск.
bool IsEOF() Метод проверяет, установлен ли файловый указатель в конец файла.
bool Seek(int offset,int origin) Метод перемещает указатель внутри файла на заданное число байт. Параметр offset задает смещение в байтах, отрицательные значения соответствуют смещению в направлении начала файла, положительные - в направлении конца файла. Параметр origin указывает место, откуда задается смещение. Доступны следующие значения:
  • fsSet - смещение от начала
  • fsCurrent - смещение от текущего положения
  • fsEnd - смещение от конца файла
int Size() Метод возвращает размер файла в байтах.
int Tell() Метод возвращает смещение текущей позиции файлового указателя от начала файла.
void Delete(const string& in) Метод удаляет файл, путь к которому указан в переменной in. Например, для удаления файла data.txt, находящегося в папке Documents\NetTradeX Advisors\scripts\files, нужно указать file x; x.Delete("data.txt")
double ReadDouble() Метод читает число типа double из текущей позиции, в которой находится файловый указатель.
float ReadFloat() Метод читает число типа float из текущей позиции, в которой находится файловый указатель.
int ReadInteger() Метод читает число типа int из текущей позиции, в которой находится файловый указатель.
int64 ReadInt64() Метод читает число типа int64 из текущей позиции, в которой находится файловый указатель.
int16 ReadShort() Метод читает число типа int16(short) из текущей позиции, в которой находится файловый указатель.
int8 ReadByte() Метод читает число типа int8(Byte) из текущей позиции, в которой находится файловый указатель.
bool ReadString(string &out str,int sz=0) Метод читает строку из текущей позиции, в которой находится файловый указатель и помещает её в строку str, параметр sz определяет длину строки. Если параметр sz явно не задан, строка считывается до символа конца строки.
bool WriteDouble(double val) Метод записывает значение переменной val типа double в файл.
bool WriteFloat(float val) Метод записывает значение переменной val типа float в файл.
bool WriteInteger(int val) Метод записывает значение переменной val типа int в файл.
bool WriteInt64(int64 val) Метод записывает значение переменной val типа int64 в файл.
bool WriteShort(int16 val) Метод записывает значение переменной val типа int16 в файл.
bool WriteByte(int8 val) Метод записывает значение переменной val типа int8 в файл.
bool WriteString(const string &in str) Метод записывает строку str в файл.

Пример 1. Создадим советника, который будет записывать в файл время, цены bid и ask последней котировки. Если файл "ticks.txt" не существует, наш советник его создает, если же он уже существует, советник будет дописывать котировки в конец. Для просмотра файла "ticks.txt" нужно завершить работу советника.

file f;
int Initialize()
{
  // Если файл существует, открываем его для добавления 
  // Если файла не существует, создаем и открываем его на запись
  if(!f.Open("ticks.txt",fmRead|fmWrite|fmText))
  	f.Open("ticks.txt",fmWrite|fmText);
  f.Seek(0,fsEnd); // перемещаем указатель в конец файла, для добавления в конец.
  return(0);
}
int Run()
{
  // Записываем дату и время, цену бид, цену аск
  f.WriteString(""+System.Time+";"+Symbols.LastBid(Chart.Symbol)+";"+Symbols.LastAsk(Chart.Symbol)+"\n");
  // Сбрасываем строку на диск
  f.Flush();
  return(0);
}
int DeInitialize()
{
  f.Close();
  return(0);
}

Пример 2. Создадим скрипт, который будет записывать информацию в файл и считывать данные из файла и выводить их в журнал программы.

int Run()
{
  file f;
  
  //Открываем файл для записи
  f.Open("data.txt",fmWrite|fmBinary);
  
  //Записываем текущий символ, минимальную дистанцию установки ордеров, последний бид
  f.WriteString(""+Chart.Symbol+"\n");
  f.WriteInteger(Symbols.Distance(Chart.Symbol));
  f.WriteDouble(Symbols.LastBid(Chart.Symbol));
  
  //Закрываем файл
  f.Close();
  
  //Открываем файл для чтения
  f.Open("data.txt",fmRead|fmBinary);
  
  //Читаем символ, минимальную дистанцию установки ордеров, записанную цену бид
  string s="";
  f.ReadString(s);
  int dst=f.ReadInteger();
  double bid=f.ReadDouble();
  
  //Выводим информацию на вкладку Journal
  System.Print("Current symbol="+s+" distance="+dst+" bid="+bid);
  
  //Закрываем файл
  f.Close();
  return(0);
}