img

Объект 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); }