Руководство пользователя
В языке 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 указывает место,
откуда задается смещение. Доступны следующие значения:
|
| 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);
}