d9e5a92d

Модели на основе точки разворота

Для работы таких моделей требуются два дополнительных набора фактов, идентичных фактам для обращенного во времени Медленного %К во всем, кроме целевого параметра. Цель первого набора равна 1, что обозначает нижнюю точку разворота (минимум), когда завтрашняя цена открытия ниже цен трех предыдущих и десяти последующих дней. Если это условие не выполняется, то значение цели приравнивается к 0. Целью второго набора является 1, т.е. максимум, являющийся точкой разворота в случае, если завтрашняя цена открытия выше цен трех предыдущих и десяти последующих дней. Если это условие не выполняется, то значение цели приравнивается к 0. Если считать, что на рынке присутствуют устойчивые модели, то нейронная сеть должна иметь способность усваивать их и предсказывать положение завтрашней цены открытия.
В отличие от набора фактов для обращенного во времени Медленного %К в этих наборах факты генерируются только в тех случаях, когда завтрашняя цена открытия имеет вероятность стать точкой разворота. Например, если завтрашняя цена открытия выше сегодняшней цены открытия, то, согласно предыдущим правилам, завтрашнее открытие уже не может считаться точкой разворота, что бы ни случилось в дальнейшем.
Зачем заставлять сеть делать прогнозы, когда нет никакой неопределенности? Прогнозирование производится только в случаях, когда завтрашняя цена открытия может составить точку разворота, и факты генерируются только для таких случаев.
Обработка вводов, использование статистики и другие аспекты методологии тестирования для моделей, основанных на точке разворота, идентичны используемым для модели на обращенном во времени Медленном %К. Обе модели в принципе идентичны, различаются только цели предсказания и, следовательно, цели для обучения нейронных сетей. Кроме того, ввиду отличия прогнозов различаются правила получения сигналов входа на их основе.
Выходы обученных сетей представляют вероятности (от 0 до 1) присутствия максимума или минимума. Два набора правил для двух моделей генерации сигналов входа таковы: для первой модели — если прогноз минимума выше некоего порога, следует покупать; для второй модели — если прогноз максимума выше некоторого порога, следует продавать. Для обеих моделей порог представляет собой доверительный уровень для заключения о будущем максимуме или минимуме рынка, которое делает нейронная сеть перед отдачей приказа.

// запись фактов в файл
for(cb = 1; cb <= nb; cb++) {
if(dt[cb] < IS_DATE) continue; // период анализа
if(dt [cb+10] > OOS_DATE) break; // игнорируем данные вне пределов
// выборки
if(opn[cb+l] >= Lowest (opn, 3, cb)}
continue; // пропускаем эти факты
fprintf(fil, "%6d", ++factcount); // номер факта
PrepareNeurallnputs{var, els, cb) ;
for(k = 1; k <= 18; k++)
fprintf(fil, "%7.3f", var[k] ); // стандартные входные данные
if(opn[cb+l] < Lowest {opn, 9, cb+10))
netout = 1.0; else netout =0.0; // считаем цель


fprintf(fil, "%6.1f\n", netout); // цель
if{(cb % 500) == 1)
printf("CB = %d\n", cb); // информация о прогрессе
}
// генерируем входные сигналы, цены лимитных приказов и стоп- приказов
signal=0;
if(opn[cb+1] < Lowest (opn, 3, cb)) { // пускаем только эти
PrepareNeurallnputs(var, cls, cb) ; // обрабатываем данные
ntlset_inputv{nnet, &var[l]); // передаем в сеть входные данные
ntlfire (nnet); // запускаем тест
netout = ntlget_output(nnet, 0); // получаем выходные данные
netout *= 100.О; // переводим в проценты
if(netout > thresh) signal = 1; // сигнал на покупку
}
limprice = 0.5 * (hi[cb] + lo [cb]);
stpprice = cls [cb] +0.5 * signal * exitatr[cb] ;


Поскольку код для модели, прогнозирующей минимумы, почти идентичен коду модели на основе обращенного во времени Медленного %К, выше приведены только два измененных блока. В первом блоке обращенный Медленный %К не используется, а вместо этого рассчитывается цель — серия нулей или единиц, указывающая на наличие (1) или отсутствие (0) минимумов. При записи фактов вместо значения Медленного %К записываются значения цели. Во втором блоке вводятся правила для сравнения выхода нейронной сети с соответствующим порогом и генерации собственно сигналов входа в рынок. В обоих блоках включен код, препятствующий записи фактов и использованию прогнозирования в случае, когда завтрашняя цена открытия не может образовать минимум согласно правилам. В коде ниже приведены аналогичные правила прогнозирования максимумов.



if(dt[cb+10] > OOS_DATE) break; / / игнорируем данные вне пределов
// выборки
if(opn[cb+l] <= Highest(opn, 3, cb))
continue; // пропускаем эти факты
fprintf{fil, "%6d", ++factcount); // номер факта
PrepareNeurallnputs(var, cls, cb) ;
for (k = 1; k <= 18; k++)
fprintf(fil, "%7.3f", var[k]); // стандартные входные значения
if{opn[cb+l] > Highest(opn, 9, cb+10))
netout = 1.0; else netout =0.0; // считаем цель
fprintf(fil, "%6.1f\n", netout); // цель
if({cb % 500) == 1)
printf("CB = %d\n", cb); // информация о прогрессе
}
// генерируем входные сигналы, цены лимитных приказов и стоп- приказов
signal=0;
if(opn[cb+l] > Highest(opn, 3, cb)) { // запускаем только эти
PrepareNeurallnputs{var, cls, cb) ; // обрабатываем данные
ntlset_inputv(nnet, &var[l]); // передаем в сеть входные значения
ntlfire (nnet); // запускаем сеть
netout = ntlget_output(nnet, 0); // получаем выходные значения
netout *= 100.О; // переводим в проценты
if(netout > thresh) signal = - 1; // сигнал на продажу
}
limprice = 0.5 * (hi[cb] + lo[cb]);
stpprice = cls[cb] + 0.5 * signal * exitatr[cb];
Информатика -взгляд 2Содержание раздела