Методология тестирования 4





// генерируем торговые сигналы
if (goodcycle) {
domperiod = filter [domperndx- 1] .period() ;
phase = (180.0 / PI) *
atan2(inquad[domperndx] [cb],
inphase[domperndx] [cb]);
oldphase = (180.0 / PI) *
atan2(inquad[domperndx] [cb- 1],
inphase[domperndx] [cb- 1] );
phaseb - (phase<0.0) ? (360.0+phase) : phase;
oldphaseb = (oldphase<0.0)
? (360.0+oldphase) : oldphase;
sellphase = 0.0 - (disp + 180.0 / domperiod);
buyphase = 180.0 + sellphase;
if (phaseb > buyphase && oldphaseb <- buyphase)
signal = 1; // сигнал на покупку
if (phase > sellphase && oldphase <= sellphase)
signal = - 1; // сигнал на продажу
}
break; }
limprice = 0.5 * (hi [cb] + lo [cb] ) ;
stpprice = cls[cb] + 0.5 * signal * exitatr[cb];
// печатаем отладочную информацию
#ifdef SIGNALDEBUG
fprintf(fil, "%8d %8.1f %8d %8d %8d %8d\n",
cb, cls[cb], signal,
(int)filter[domperndx- 1].period(),
(int)peakpower, {int)peaknoise);
#endif
// входим в сделку, используя определенный тип приказа
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);
} // обрабатываем следующий день
// закрываем, если в режиме отладки
#ifdef SIGNALDEBUG
fclose(fil);
exit(0);
#endif
}