tmp = thresh * mal[k] ;
if(savg[k] > tmp && savg[k- l] <= tmp)
signal = 1;
else if(savg[k] < - tmp && savg[k- l] >= - tmp)
signal = - 1;
break;
case 2 : // основная модель пересечения
k = cb + disp;
if (CrossesAbove (mal, ma2 , k) } signal = 1 ;
else if (CrossesBelow{mal, ma2, k)} signal = - 1;
break;
case 3: // пересечение с подтверждением
k = cb + disp;
if(CrossesAbove{mal, ma2, k)) {
if(stoch[cb] < 25.0) signal = 1;
}
else if {CrossesBelow(mal, ma2, k)) {
if(stoch[cb] > 75.0} signal = - 1;
}
break;
case 4 : // пересечение с подтверждением и инверсией
k = cb + disp;
if{CrossesAbove(mal, ma2, k)) {
if (stoch[cb] < 25.0) signal = 1;
else if{stoch[cb] > 75.0} signal = - 1;
}
else if (CrossesBelow (rnal, ma2 , k) } {
if (stoch[cb] > 75.0) signal = - 1;
else if (stoch[cb] < 25.0} signal = 1;
}
break;
)
limprice = 0.5 * (hi [cb] + lo [cb] ) ;
stpprice = cls[cb] + 0.5 * signal * exitatr[cb] ;
// входим в сделку, используя определенный тип приказа
if (ts.position{) <= 0 && signal == 1) {
switch(ordertype) { // select desired order type
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);
} // обрабатываем следующий день
}