Поскольку практически очевидна необходимость отдельных наборов правил для длинных и коротких позиций, мы провели два теста. В первом тесте система генерирует случайные входы в длинные позиции (сигналы к открытию коротких позиций игнорируются), а для выходов применяется МССВ, а также отдельные правила, которые разрабатываются генетическим алгоритмом. Во втором тесте все входы в длинные позиции игнорируются, открываются только короткие позиции. Делается попытка разработать правила, хорошо работающие в качестве дополнения к МССВ для коротких сделок.
static void Model {float *parms, float *dt, float *opn, float *hi, float *lo, float *cls, float *vol, float *oi, float *dlrv, int nb, TRDSIM &ts, float *eqcls) {
// Выполняет случайные входы с модифицированным стандартным выходом
// и с дополнительным генетически развитым "сигнальным выходом"
// File = x21mod01.c
// parms - набор [1..MAXPRM] параметров
// dt - набор [1..nb] дат в формате ГГММДД
// орn - набор [ 1..nb] цен открытия
// hi - набор [1..nb] максимальных цен
// lo - набор [l..nb] минимальных цен
// cls — набор [l..nb] цен закрытия
// vol - набор [l..nb] значений объема
// oi - набор [l..nb] значений открытого интереса
// dlrv — набор [l..nb] средних долларовой волатильности
// nb - количество дней в наборе данных
// ts — ссылка на класс торгового симулятора
// eqcls — набор [l..nb] уровней капитала по ценам закрытия
// объявляем локальные переменные
static int rc, cb, ncontracts, maxhold, signal, ranseed;
static float iranstp, ptlim, limprice, stpprice, entryprice;
static int entryposted, entrybar, exitsignal, modeltype;
static int rulel[MAXBAR+1], rule2[MAXBAR+1], rule3[MAXBAR+1];
static float exitatr[MAXBAR+1], rnum, thresh;
static long iseed;
// копируем параметры в локальные переменные для удобного обращения
ranseed = parms[14]; // используется для инициализации случайной
// последовательности
modeltype = parms[15]; // 1=длинные позиции, 2=короткие позиции
maxhold = 10; // период максимального удержания позиции