24398f5c

Используется функцией Rules для облегчения


static int EventPresent (int *es, int m, int cb) { // Используется функцией Rules для облегчения кодирования int i ; for(i=cb- m+l; i<=cb; i++) if(es[i]) return TRUE; return FALSE ; } static void Rules (float *opn, float *hi, float *lo, float *cls, float *vol, float *oi, float *atr, int nb, int vl, float v2, float v3, float v4, int *ans) { // Процедура определяет шаблоны правил, используемых // в генетическом процессе эволюции модели, основанной на правилах. // opn, hi, lo, cls — стандартные ценовые данные [l..nb] // vol, oi — объем и открытый интерес [l..nb] // nb — количество дней // vl, v2, v3, v4 — селектор правил и параметры // ans — выходные ценовые данные [l..nb] // локальные макрофункции #define LinearScale(х,a,b) ( (х)* ( {b}- (а))/1000.0+(а) )

#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; Содержание Назад Вперед