Используется функцией Rules для облегчения
#define BiasedPosScale(х,а) (0 . 000001*(х)*(х)*{а}) #define Compare{a,b,dir) (((dir)> = 0)?((a)>(b) }: (fa)<(b))) // локальные переменные static int lbl, lb2, per, cb, maxlb=100; static float thr, fac, thr2, thrl, tmp, tiny=l.ОЕ- 20; static int IsNewHigh[MAXBAR+l], IsNewLow[MAXBAR+l]; static float Serl[MAXBAR+1] ; // шаблоны правил switch(vl} { // выбираем правило case 1: // сравнение изменения цены с порогом lb1 = (int)BiasedPosScale(v2, 50.0); lb2 = (int)BiasedPosScale(v3, 50.0); fac = LinearScale(v4, - 2.5, 2.5) * sqrt(abs(lbl - I b 2 ) > ; for(cb- maxlb; cb<=nb; cb++) { thr = fac * atr [cb]; ans[cb] = cls[cb- lbl] - cls[cb- lb2] > thr; ] break; case 2: // сравнение цены с простым скользящим средним per = 2 + (int)BiasedPosScale(v2, 48.0); Averages(Serl, cls, per, nb) ; for(cb=maxlb; cb<=nb; cb++) ans[cb] = Compare(cls[cb], Serl[cb], V4- 500.0); break; case 3: // сравнение цены с экспоненциальным скользящим средним per = 2 + (int)BiasedPosScale(v2, 48.0); XAverageS(Serl, cls, per, nb) ; for(cb- maxlb; cb<=nb; cb++) ans[cb] = Compare(cls[cb], Serl[cb], V4- 500.0); break; case 4: // сравнение падения открытого интереса с пороговым значением 1b1 = 2 + (int)BiasedPosScale (v2, 48.0); thr = LinearScale(v3, 0.01, 0.50); for{cb=maxlb; cb<=nb; cb++) { tmp = (oi[cb- lbl] - oi[cb- l]) / (oi [cb- lbl] + tiny); ans [cb] = tmp > thr; ] break; case 5: // сравнение увеличения открытого интереса с пороговым значением 1b1 = 2 + (int) BiasedPosScale(v2, 48.0); thr = LinearScale(v3, 0.01, 0.99); for(cb=maxlb; cb<=nb; cb++) { tmp = (oi [cb- 1] - oi[cb- lblj) / (oi [cb- lbl] + tiny) ; ans [cb] = tmp > thr; } break;