генерируем входные сигналы, цены стоп-





// генерируем входные сигналы, цены стоп- и лимитных приказов,
// используя обученную нейросеть
signal=О;
PrepareNeurallnputs(var, cls, cb) ;
ntlset_inputv(nnet, &var[l]); // принимаем входные параметры сети
ntlfire (nnet); // запускаем сеть
netout = ntlget_output(nnet, 0); // получаем выходные данные
if(netout > thresh) signal = - 1; // сигнал на продажу
if(netout < (100 - thresh))
signal = 1; // сигнал на покупку
limprice = 0.5 * (hi [cb] + lo [cb] ) ;
stpprice = cls[cb] +0.5 * signal * exitatr[cb];
// входим в сделку, используя определенный тип приказа
if(ts.position() <= 0 && signal == 1) (
switch(ordertype) { // выбираем нужный вид приказа
case 1: ts.buyopen('1', ncontracts); break;
case 2: ts.buylimit{'2 ' , limprice, ncontracts); break;
case 3: ts.buystop('3', stpprice, ncontracts); break;
default: nrerror("Invalid buy order selected");
}
)
else if(ts.position() >= 0 && signal == - 1) (
switch(ordertype} { // выбираем нужный вид приказа
case 1: ts.sellopen('4', ncontracts); break;
case 2: ts.selllimit('5', limprice, ncontracts); break;
case 3: ts.sellstop('6', stpprice, ncontracts); break;
default: nrerror("Invalid sell order selected");
}
}
// симулятор использует стандартную стратегию выхода


tmp = exitatr[cb];
ts.stdexitcls('X', ptlim*tmp, mmstp*tmp, maxhold);
} // обрабатываем следующий день
// выгружаем обученную сеть после обработки последнего рынка
if(strcmp(ts.symbol(),"LB") == 0) ntldisp(nnet) ;
}
}

Код включает две функции — обычную функцию Model, реализующая торговую модель, и процедуру подготовки входов нейронной сети PrepareNeurallnputs. Процедура, которая подготавливает входы, требует для работы индекса текущего дня (cb) и серии цен закрытия (cls).
Функция PrepareNeurallnputs при наличии индекса текущего дня и серии цен закрытия рассчитывает для данного факта все входы, необходимые нейронной сети. В списке параметр pbars указывает на относительный по сравнению с текущим (приравненным к нулю) номер дня из прошлых данных, используемый для вычисления вышеописанных разностей цен. Первый блок кода после объявления переменных запускает таблицу факторов подстройки цен. Таблица запускается на первом проходе функции и содержит квадратные корни количества дней между каждой из пар цен, используемых для расчета разностей. Следующий блок кода рассчитывает скорректированные разности, а также суммы их квадратов, т.е. квадрат амплитуды или длину результирующего вектора.
Код, реализующий торговую модель, основан на наших обычных принципах. После объявления переменных ряд параметров копируется в локальные переменные для простоты ссылок. Затем рассчитываются средний истинный интервал, используемый для стандартного выхода, и обращенный во времени Медленный %К с периодом 10 дней.
Один из параметров (mode) выбирает режим работы кода. Mode = 1 запускает код для подготовки факта; файл открывается, заголовок (состоящий из числа входов — 18 и числа целей — 1) записывается, и счет фактов начинается с нуля. Это производится только при открытии первого из рынков в составе портфеля. Файл остается открытым все время дальнейшей обработки, вплоть до конца обработки последнего символа в портфеле. После заголовка в файл записываются факты. Все данные до начала периода выборки и после окончания периода вне выборки игнорируются. Используются только данные в пределах выборки. Каждый факт, записанный в файл, состоит из номера факта, 18 переменных входов, рассчитанных процедурой PrepareNeurallnputs, и цели (значения обращенного во времени Медленного %К). Пользователю сообщается информация о продвижении работы.
Если mode выбирается равным 2, то нейронная сеть, обученная на вышеописанномфайле с фактами, используется для генерации торговых входов. Первый блок кода открывает и загружает нужную сеть до начала расчетов по первому рынку. После выполнения стандартных функций обновления симулятора, расчета количества контрактов, избежания дней с остановленной торговлей и т.п. запускается блок, генерирующий сигналы входа и выхода. Функция PrepareNeurallnputs вызывается для получения входных данных, соответствующих текущему дню. Сеть обрабатывает эти данные, и на основании ее выхода генерируются сигналы на вход в рынок.
Правила генерации сигналов таковы: если на выходе нейронной сети значение превышает порог thresh, то подается сигнал на продажу — сеть предсказывает высокое значение обращенного во времени Медленного %К, т.е. текущая цена закрытия, возможно, близка к максимуму на ближайшее будущее. Если на выходе сети значение составляет менее 100 — thresh, то подается сигнал на покупку. Например, если thresh установлен на уровне 80, то любой предсказанный Медленный %К более 80 будет вызывать сигнал на продажу, а любой Медленный %К менее 20 — сигнал на покупку.
Кроме того, встроены еще два блока, обеспечивающие отдачу собственно приказа на вход в рынок и работу стандартизированного выхода.
Эти блоки подобны использованным в предыдущих главах.

Содержание раздела