Руководство пользователя
-
Руководство по NTTX Advisors
- Терминал NetTradeX Advisors
-
Статьи
-
NetTradeX Language: Введение
- Основы языка
- Функции языка
-
Cистемные объекты языка
- Сделки
- Ордера
- Индикаторы
- Объектно-ориентированное программирование
-
DLL файлы
-
Объект Account
-
Объект Bars
-
Объект Chart
-
Объект datetime
-
Объект History
-
Объект file
-
Объект Globals
-
Объект Math
-
Объект Symbols
-
Объект System
Функция - это фрагмент кода или алгоритм, который выполняет свою определенную последовательность операций. Каждая функция может включать в себя:
- название функции
- возвращаемое значение
- формальные параметры
- тело функции
Пример:
int multiplication(int a, int b)
{
return a*b;
}
Название функции - "multiplication"; возвращаемое значение - int, формальные параметры "a" и "b" (оба типа int), тело функции состоит из единственного оператора - return a*b;
В функцию параметры могут передаваться как по значению, так и по ссылке. При передаче параметров по значению они при выходе из функции не изменяются.
Пример:
int Initialize()
{return(0);}
int Run()
{
int a=1;
changeA(a);
System.Print("a="+a);
return(0);
}
void changeA(int a)
{
a=2;
}
int DeInitialize(){return(0);}
Результат:
Параметры в функцию можно передавать по ссылке, при выходе из функции их значения могут измениться. Для этого между типом параметра и его идентификатором необходимо указать &out.
int Initialize()
{return(0);}
int Run()
{
int a=1;
changeA(a);
System.Print("a="+a);
return(0);
}
void changeA(int &out a)
{
a=2;
}
int DeInitialize(){return(0);}
Рузультат:
Параметры, передаваемые в функцию, могут иметь значения по умолчанию. Если какому-либо параметру задано значение по умолчанию, то и всем последующим параметрам должны быть даны значения по умолчанию.
Пример:
int Initialize()
{return(0);}
int Run()
{
System.Print("sum1="+sum(2));
System.Print("sum2="+sum(10,20,30));
return(0);
}
int sum(int a, int b=3, int c=4)
{
return a+b+c;
}
int DeInitialize(){return(0);}
Результат:
sum1 = 9 sum2 = 60
Функция может возвращать ссылку на глобальную переменную, при помощи этой ссылки возможно осуществлять запись и чтение значения глобальной переменной.
extern int a1=0;
extern int a2=0;
extern int a3=0;
extern int a4=0;
extern int a5=0;
int Initialize()
{return(0);}
int Run()
{
for(int i=0;i<5;i++)
{
changeGlobal(i)=7;
}
for(int i=0;i<5;i++)
{
System.Print("i="+i+" value="+changeGlobal(i));
}
return(0);
}
int DeInitialize(){return(0);}
int& changeGlobal(int i)
{
switch(i)
{
case 1: return a1;
case 2: return a2;
case 3: return a3;
case 4: return a4;
case 5: return a5;
}
return a5;
}
Результат:
i=0 value=7 i=1 value=7 i=2 value=7 i=3 value=7 i=4 value=7
Для удобства использования функций пользователя допускается их группировка и вынесение в отдельные файлы.
Эти файлы, при необходимости использования, необходимо включить при помощи директивы #include "раздел\имя_файла".
Пример:
Пусть имеется скомпилированный файл io.ntl, который находится в разделе Advisors :
void Print(array <int> a, string separator=" ")
{
string data="";
for(uint i=0;i<a.length();i++)
{
data+=a[i];
if(i<a.length()-1) data+=separator;
}
System.Print(data);
}
В скрипте ArrayExample.ntl используется функция Print, определенная в io.ntl:
#include "Advisors\io.ntl"
int Initialize()
{
return(0);
}
int Run()
{
array<int> a = {22,11,33};
Print(a);
return(0);
}
int DeInitialize()
{
return(0);
}