FAQ для NetTradex Advisors

Я собираюсь установить NetTradeX Advisors на другом компьютере. Как мне экспортировать все мои скрипты*?

Все скрипты NetTradeX Advisors хранятся в папке Documents\NeTTradeX Advisors\scripts. После установки терминала на другом компьютере необходимо скопировать все её содержимое в соответствующую папку на новом компьютере и перезапустить терминал.                   

Я создал индикатор, но его линия прерывается. Как я могу вывести индикаторную линию без пропусков?

Для вывода линии без пропусков используйте функцию SetIndexStyle c параметром type, имеющим значение ltSection.

После запуска эксперта он останавливается через несколько секунд и в журнале выводится сообщение "stopped by timeout". Почему это происходит?

После прихода тика эксперт должен выполнить всю логику программы в течении ограниченного времени (60 секунд). При превышении этого лимита эксперт принудительно останавливается, а на завершение работы эксперта дается 3 дополнительных секунды. Рекомендуется анализировать состояние флага System.IsStopped для корректного завершения работы эксперта. При остановке эксперта пользователю выводится сообщение "stopped by timeout". В этом случае нужно переработать программу таким образом, чтобы её выполнение занимало меньшее время.

Я посылаю запрос на открытие позиции при помощи функции Deals.Open(), но позиция не открывается. Как я могу понять, из-за чего это происходит?

После того как вы убедились, что функция Deals.Open() возвращает ноль, нужно обратиться к свойству System.LastError и получить код ошибки. Описание кодов ошибок приводится в инструкции пользователя в разделе "Основы языка"-"Коды ошибок". Обратите внимание, что обращение к свойству System.LastError нужно делать сразу после вызова торговой функции, иначе последующая торговая операция изменит это свойство в соответствии с результатами своей работы.

Я открыл позицию или установил ордер и пытаюсь получить его свойства, но получаемые значения не соответствуют действительности.

Для обращения к свойствам позиции или ордера сначала необходимо вызвать функцию Select(), а уже потом, убедившись, что Select() вернула значение true, обращаться к свойствам позиции или ордера.

Как я могу определить тип отложенного ордера (Buy stop или Buy limit)?

Для определения типа установленного ордера Вам надо обратиться к его свойствам, предварительно вызвав функцию Select(). Для ордера Buy Stop должны выполняться два условия: Orders.Direction == opBuy и Orders.IsLimit == false, соответственно для ордера Buy Limit необходимо выполнение условий Orders.Direction == opBuy и Orders.IsLimit == true.

Зачем нужно свойство SubType (подтип ордера)?

Свойство подтип ордера используется для "сложных" ордеров и позволяет идентифицировать какой ордер является основным, а какой подчиненным. Например, при наличии активационного ордера, при срабатывании которого будут устанавливаться два OCO ордера: активационный ордер будет основным (ордер 1-го уровня), а OCO ордера - подчиненными (ордера 2-го уровня).

Мне нужно открыть позицию на определенном символе. Я открыл окно "Make deal", но в нем нет нужного мне символа.

Список символов в диалоге открытия позиции содержит те же символы, что и в окне Market Watch. Поэтому прежде чем посылать запрос на открытие позиции, убедитесь, что Вы подписаны на нужный вам символ в Market Watch.

Как я могу получить информацию о прибыли позиций, которые я закрыл вчера или несколько дней назад?

Информация о закрытых позициях попадает на вкладку History терминала NetTradeX Advisors. К таким позициям можно получить доступ при помощи объекта History. Информация о закрытых позициях хранится до перезапуска терминала.

Я вызываю функцию Symbols.Distance(), но получаю нулевую минимальную дистанцию ордера.

Перед вызовом метода Symbols.Distance() подпишитесь на нужный вам символ в окне Market Watch.

Какие системные функции обязательно должны присутствовать в скрипте*? Если мне не нужно выполнять действия при инициализации и деинициализации скрипта, можно ли мне удалить соответствующие функции?

Для запуска скрипта необходима функция Run(). Функции Initialize() и DeInitialize() являются опциональными, и если не предполагается никаких действий при инициализации и деинициализации, то их можно исключить из программы.
В некоторых случаях, например, при создании файлов с описаниями вспомогательных пользовательских функций, в скрипте может отсутствовать и функция Run(). Эти файлы можно будет скомпилировать, но нельзя запустить. Такие скрипты используются совместно с директивой #include и включаются в код исполняемых скриптов.
* Понятие скрипта в языке NTL+ объединяет в себе три разновидности программ: эксперты, индикаторы и утилиты.

Существует ли какой-либо файл журнала, в который записывается информация о работе программы?

Да, вся информация, выводимая на вкладке Journal, также записывается в лог файл, который находится в папке Documents\ NetTradeX Advisors\ bases\ тип_аккаунта\ номер_аккаунта\ logs. Для каждого дня создается отдельный файл с расширением log. Такой файл можно открыть в текстовом редакторе.

Для чего перед некоторыми глобальными переменными используется модификатор extern?

Глобальная переменная может быть объявлена как с модификатором extern, так и без него. При наличии модификатора extern сразу после запуска скрипта раскроется окно, в котором можно будет изменить значения таких переменных. Кроме того, эти параметры можно изменять "на лету", т.е. при работающем советнике или индикаторе.

Какие существуют полезные комбинации клавиш для работы с программой?

Нажатие сочетания клавиш Ctrl+N открывает список символов, доступных для создания графика котировок.
При работе с графиками можно воспользоваться клавишами + / - на цифровом блоке клавиатуры для изменения масштаба графика по горизонтали. Эти же операции можно выполнить, если подвести курсор к шкале времени и, удерживая левую кнопку мыши, передвинуть мышь влево / вправо. Для изменения масштаба по вертикали нужно подвести курсор к шкале цен и, удерживая левую кнопку мыши, передвинуть мышь вверх / вниз.
Для отображения графика котировок до наиболее удаленной даты можно нажать клавишу Home, а для перехода к последним котировкам - End.
Двойной клик по пустому полю вкладки Open Positions откроет окно открытия позиции, а двойной клик по пустому полю вкладки ордеров - окно установки ордера. Эти же операции можно выполнить нажатием клавиш F4 (открытие позиции) или F3 (установка ордера).
В диалоговых окнах открытия позиции или установки ордеров значения цифровых полей удобно изменять поворотом колесика мыши. Например, при установке цены связанного ордера поворот колесика на одно деление изменяет значение цены на 1 пункт.

Я выполняю деление целых чисел System.Print("2/3="+2/3); и в результате получаю 2/3=0. Почему это происходит?

Так как оба операнда целочисленные, то и результат операции деления будет целочисленным. Поэтому необходимо привести один из операндов к типу double следующим образом double(2)/3, в этом случае результат будет 2/3=0,666667.

Где хранятся глобальные переменные пользовательского терминала?

Глобальные переменные можно просмотреть с помощью окна “Global Variables”, которое можно вызвать с помощью меню View – Global Variables. Обратите внимание, что для каждого аккаунта используются свои глобальные переменные.

Как определить цену последнего фрактала?

При использовании метода Indicators.Fractals бесполезно пытаться получить значения для самого последнего бара, так как они будут нулевыми. Достоверные значения фракталов формируются, начиная с четвертого бара (бара с индексом 3), так как, в этом случае, будут использоваться по два полностью сформированных бара по каждую сторону от нужного бара.

Как сравнить числа типа double ?

Числа в памяти компьютера хранятся в двоичной системе счисления, из-за этого многие числа, заданные в десятичной системе, могут быть представлены только в виде бесконечной дроби. Число, заданное, например, как 0.1, может в действительности быть равным 0.099999998, поэтому использовать двойное равенство для сравнения чисел с плавающей точкой некорректно. Лучше воспользоваться математическим методом Math.Abs(a - b) < delta, где 'a' полученное значение, 'b' - значение, с которым производится сравнивание и delta абсолютная погрешность.