русeng

Простые роботы. Welcome!
Тестируем возможности встроенного языка торгового терминала Transaq


Источник: журнал «D'» Рубрика: IT Механика Дата публикации: 14.05.2010

В некоторых системах интернет-трейдинга существуют встроенные языки программирования, которые позволяют автоматизировать те или иные функции. В том числе запрограммировать торговые стратегии. Интерес к теме алгоритмического трейдинга в России стабильно растет, сейчас проходит конкурс торговых систем «Алгоритмус», поэтому мы решили рассказать о некоторых возможностях языка программирования системы Transaq.

Дело в том, что в некоторых случаях для реализации своей торговой стратегии можно обойтись без специальных программ для технического анализа с их широкими возможностями, таких как Metastock или Wealth-Lab. Использование этих программ может оказаться лишним для новичка в системном трейдинге: если опустить вопрос их высокой стоимости, то остаются трудности с настройкой экспорта данных из системы интернет-трейдинга и с передачей сигналов на совершение сделок на торги. В то же время, если робот использует не очень сложный алгоритм, то его можно запрограммировать непосредственно в торговом терминале. В QUIK, например, интегрирован язык QPILE, а разработчики Transaq снабдили терминал встроенным языком ATF, о возможностях которого мы поговорим ниже.

ВОЗМОЖНОСТИ ЯЗЫКА

Как и любая система интернет-трейдинга, Transaq используется для получения биржевой информации и совершения сделок. В программе отображается состояние портфеля, можно просматривать графики цен и проводить технический анализ. С появлением же ATF появилась возможность разрабатывать собственные технические индикаторы и реализовывать на их основе автоматизированные торговые стратегии.

По сигналам робота выставляются заявки и совершаются сделки, которые могут быть стразу отображены на графике ценной бумаги. Состояние механической торговой системы – активизирована она или нет – видно по значку робота внизу экрана.

Основной чертой языка ATF (Advanced Trading Facility), который основан на принципах Easy Language, является то, что его синтаксис отражает его назначение. Функции языка имеют обозначения как MovAvg, Close и так далее.

Приведем пример создания простого торгового робота, который будет торговать по индикатору MACD, следующему за тенденцией рынка. Высокие значения линии MACD говорят о состоянии перекупленности рынка, а низкие – о перепроданности. Пересечение сигнальной линией линии MACD снизу вверх дает сигнал на покупку, сверху вниз — на продажу.

Пример автоматизированной торговой стратегии на ATF 
Основа любого индикатора — это функция calc(), которая в нашем случае содержит формулу, задающую значения линий индикаторов line[i] для каждого бара.  

function calc()
{
	//Это быстрая линия MACD:
	line[0] = MovAvg(ind_ema, 12, pt_close) - MovAvg(ind_ema, 26, pt_close);
	
	//Это медленная линия MACD:
	line[1] = MovAvg(ind_ema, 9, line[0]);
}
 
Следующим шагом зададим условия покупки/продажи и выведем информацию об их выполнении на экран.

function calc()
{
	// сигналы:
		//Быстрая линия пересекла медленную снизу вверх:
	if (line[0] > line[1] and line[0][-1] < line[1][-1]) {
		signal::alert("Покупай " + getSecName());
	}
	
	// Быстрая линия пересекла медленную сверху вниз::
	if (line[0] < line[1] and line[0][-1] > line[1][-1]) {
		signal::alert("Продавай " + getSecName());
	}
}
 
Код ATF с помощью функции signal::alert выводит на экран сообщение с рекомендацией покупки либо продажи при пересечении линий MACD. Обратите внимание на индикаторы line[0][-1] и line[1][-1] – с их помощью мы получаем значения линий 0 и 1 на предыдущем баре. Сравнение этих значений помогает определить сверху или снизу быстрая линия MACD пересекает медленную. Функция getSecName() возвращает имя текущей бумаги.
 Для того чтобы автоматизировать процесс, доверив ATF совершение сделок, достаточно заменить команду signal на команду trade_action. С помощью функции IndRef воспользуемся встроенным в TRANSAQ индикатором MACD Histogram, пересечение которого с нулем и говорит о пересечении линий MACD, - это упростит код стратегии. 
 
function calc()
{
	line[0] = IndRef("macdhistogram", 12, 26, 9, ind_ema, ind_ema, ind_ema, pt_close)[0];
	if (line[0] > 0 and line[0][-1] < 0) {
		trade_action::buy(1, ::lots);
	}
	if (line[0] < 0 and line[0][-1] > 0) {
		trade_action::sell(1, ::lots);
	}
}
 

Можно сделать стратегию сложнее и открывать позиции только при наличии выраженного тренда. Для этой цели будем проверять значение индикатора ADX (индекс направленного движения), введя в код стратегии дополнительное условие:
 
	if (IndRef("adx", 27)[1] > 20 or getSecBalance() > 0) 

Обратите внимание на функцию getSecBalance(), которая возвращает значение количества бумаг, находящихся в портфеле. Она введена в код алгоритма для того, чтобы упростить условия выхода из позиции. Если робот ATF уже что-то купил, команда на закрытие сделки будет подаваться вне зависимости от значения индикатора ADX. Используемое слово «or» указывает на то, что для выполнения кода нам достаточно одного из двух условий.

Итоговый алгоритм, который совершает сделки после пересечения линий MACD при условии выраженного тренда, выглядит следующим образом:

function calc()
{
	line[0] = IndRef("macdhistogram", 12, 26, 9, ind_ema, ind_ema, ind_ema, pt_close)[0];
	if (IndRef("adx", 27)[1] > 20 or getSecBalance() > 0) {
		if (line[0] > 0 and line[0][-1] < 0) {
			trade_action::buy(1, ::lots);
		}
		if (line[0] < 0 and line[0][-1] > 0) {
			trade_action::sell(1, ::lots);
		}
}
}

Синтаксис ATF хорошо описан на сайте разработчика программы. Проверить эффективность робота без риска для своего счета можно на «Учебных счетах» Transaq. Правда, полноценного тестирования на истории в ATF пока нет, но разработчики обещают исправить этот недостаток в ближайшее время. На сайте компании в числе перспективных проектов указывается разработка дополнительные конструкции языка ATF: доступ к «стаканам», протоколирование сигналов/сделок и обстоятельств их возникновения для последующего анализа, вспомогательные индикаторы для хранения промежуточных расчётных данных.

Вместе с появлением интегрированного языка Transaq сохранил возможности подключения внешних роботов. Программа использует открытый API (протокол взаимодействия) серверной части, что позволяет сторонним программам, подключаться к серверу Transaq напрямую – модуль Connector. Кроме того, TRANSAQ может взаимодействовать с программами технического анализа, то есть позволяет использовать роботов, созданных, например, в Metastock. Здесь действует традиционная схема: котировки идут из Transaq в Metastock, откуда решение о покупке или продаже передается в Transaq через текстовый файл или документ MS Excel.

История создания Transaq

В начале 90-х разработчики нынешнего Transaq делали первую в России полностью автоматизированную торгово-клиринговую систему в информационно-техническом центре Московской центральной фондовой биржи (МЦФБ). На базе этого опыта была разработана система Transaq, первая версия которой появилась в 2000 году. В конце 2007 года владельцем 50% акций компании «Скрин маркет системз», разработчика Transaq, стал инвестиционный холдинг «Финам». Сейчас система работает в «Финаме», «Дойче банке», «Росбанке», банке «ЦентроКредит», «Номос-банке» и других финансовых компаниях.

В апреле 2010 года в системе была внедрена технология прямого доступа к Франкфуртской фондовой бирже. Российские трейдеры получили возможность совершать операции на рынках Xetra Frankfurt (акции, облигации, фонды) и Scoach Frankfurt (спотовые деривативы – варранты, сертификаты). В планах компании подключение к американским спотовым рынкам и реализация системы внебиржевых (Forex) и дилинговых (CFD dealing) сервисов.

Ccылка: http://www.expert.ru/printissues/d/2010/09/roboty/