МЕТОДИКА ТЕСТИРОВАНИЯ Все прив
Энциклопедия торговых стратегий














МЕТОДИКА ТЕСТИРОВАНИЯ Все прив

МЕТОДИКА ТЕСТИРОВАНИЯ Все приведенные ниже тесты были осуществлены с помощью осцилля-торных моделей на портфеле разнообразных ценных бумаг. Можно ли получать прибыльные сделки с осцилляторными моделями? Как они работают во времени - ухудшается или улучшается их функционирование за последние годы? Целью нашего тестирования был ответ на эти вопросы Во всех тестах использовался стандартный выход, описанный в предыдущих главах. Правила входов будут рассмотрены параллельно с кодом модели и отдельными тестами. Сделки закрывались при поступлении приказа на вход в обратном направлении или при исполнении стандартного выхода. Платформа тестирования тоже была стандартной. За последние годы мы закодировали на языке C++ ряд осцилляторов, описанных в Technical Analysis of Stocks and Commodities и в ряде других источников. В этой главе мы сравниваем работу версий C++ осцилляторов MACD, RSI и стохастического с их версиями в TradeStation. В большинстве случаев результаты идеально совпадали, но в одном случае, а именно для Медленного %К, результат разительно отличался. Разбор кода показал, что TradeStation рассчитывает Медленный %К как экспоненциальное скользящее среднее от Быстрого %К. В нашем же коде отдельно рассчитываются простые скользящие средние с периодом 3 дня для числителя и знаменателя формулы Быстрого %К. Согласно уравнениям, приведенным Мейбахом (Meibahr, 1992) и другими источниками, правильной является наша версия на C++. Если читатели захотят повторить наши расчеты в TradeStation и обнаружат расхождения, мы настоятельно рекомендуем проверить функции индикаторов TradeStation. Кроме того, при попытке закодировать правильную версию Медленного %К для TradeStation на EasyLanguage мы неожиданно обнаружили, что TradeStation без предупреждения может выдать неверные результаты, если одна пользовательская функция вызывает другую. Когда мы изменили код так, чтобы рассчитывалась промежуточная переменная (чтобы избежать совместных вызовов), были получены правильные результаты. В этих тестах использовалась версия TradeStation 4.02 от 29 июля 1996 г. Нижеследующий код включает большинство использованных в тестах моделей входов на основе осцилляторов. Реальный расчет осцилляторов достигается путем вызова внешних функций. 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 = xllmodOl.c // parms - набор [1.. MAXPRM] параметров // dt - набор [l..nb] дат в формате ГГММДД // орn - набор [l..nb] цен открытия // hi - набор [l..nb] максимальных цен // 1о - набор [1..пЬ] минимальных цен // cls - набор [l..nb] цен закрытия // vol - набор [l..nb] значений обьема // oi - набор [l..nb] значений открытого интереса // dlrv - набор [l..nb] средних долларовой волатильности // nb - количество дней в наборе данных // ts - ссылка на класс торгового симулятора // eqcls - набор [l..nb] уровней капитала при закрытых позициях // объявляем локальные переменные static int rc, cb, ncontracts, maxhold, len1, len2, len3; static int modeltype, ordertype, osctype, signal, i, j, k; static float mmstp, ptlim, stpprice, limprice, tmp; static float exitatr[MAXBAR+1]; static float sigline[MAXBAR+1], oscline[MAXBAR+1]; static float upperband[MAXBAR+1] , lowerband [MAXBAR+1] ; mmstp =1 ; // копируем параметры lenl = parms[l]; 1еn2 = parms[2] ; 1епЗ = parms[3]; modeltype = parms[7]; osctype - parms[8]; ordertype = parms[9]; maxhold =10; // ptlim =4; // локальные переменные для удобного обращения // более короткий для первого параметра длины // более длинный для второго параметра длины // длина теста дивергенции // тип осцилляторной модели входа // тип осциллятора // тип входного приказа период максимального удержания позиции целевая прибыль в единицах волатильности // защитная остановка в единицах волатильности // пропускаем неправильные комбинации параметров, if ( (osctype==4 && len1>=len2) ) ( set_vector(eqcls, 1, nb, 0.0); return; } // выполняем вычисления для всех данных, используя процедуры быстрой обработки // массивов AvgTrueRangeS{exitatr,hi,lo,cls,50,nb); // средний истинный диапазон для выхода switch(osctype} { // выбираем осциллятор case 1: // классические быстрые стохастики //Быстрый %К //Быстрый %D //верхняя граница //пробой нижней границы StochOsc(oscline,hi,lo,cls,1,len1,nb); MovAvg(sigline, oscline, 1, 3, nb); set_vector(upperband, 1, nb, 80.0); set_vector(lowerband, 1, nb, 20.0); break; case 2: // классические медленные стохастики //Медленный %К //Медленный %D //верхняя граница //пробой нижней границы StochOsc(oscline,hi,lo,cls,2,lenl,nb); MovAvg(sigline, oscline, 1, 3, nb); set_vector(upperband, 1, nb, 80.0); set_vector(lowerband, 1, nb, 20.0); break; case 3: // классический RSI //RSI //3-дневное ПСС //верхняя граница //пробой нижней границы RsiOsc(oscline, cls, 1, lenl, nb); MovAvgtsigline, oscline, 1, 3, nb) ; set_vector(upperband, 1, nb, 70.0); set_vector(lowerband, 1, nb, 30.0); break; case 4 : // классический MACD //классический MACD //9-дневное ЭСС MacdOsc(oscline,cls,1,lenl,len2,nb); MovAvg(sigline, oscline, 2, 9, nb) ; for{i=l; i<=nb; i++} lowerband[i]=1.5*fabs(oscline[i] ) ; / / п о р о г и MovAvg(upperband,lowerband,1,120,nb); //как долгосрочная for{i=l; i<=nb; i++} //отклонение от среднего lowerband[i]= -upperband[i]; //полосы break; default: nrerror("Invalid moving average selected"); }; проходим через штрихи (дни), чтобы смоделировать реальную торговлю // 1; cb <= nb; cb++} { for{cb // не открываем позиций до начала периода выборки // ... то же самое, что и установка MaxBarsBack в TradeStation Назад

Интернет-магазин: веломагазин в москве - купить в многовело. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
Hosted by uCoz