Руководство пользователя
В языке 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); }