Índice Hearst - página 33

 
Roman.:


¡Qué bien queda todo! :-)

¿Se pueden adjuntar (complementar ) estos estudios o se puede dibujar algo similar (autosuficiente para el filtro) para la misma conexión simple con un búho de comercio como un filtro de tendencia plana?

Aquí está mi parte de la señal del búho de la tendencia utilizando las lecturas del indicador iVAR .


Si los estudios teóricos se confirman, habrá toda una serie de indicadores que describirán los efectos caóticos y deterministas.

El valor predictivo del iVAR parece muy cuestionable. Visualmente, no es mejor que MA y sufre claramente de volatilidad. En sentido estricto, los indicadores "caóticos" no deben reaccionar a la volatilidad, sino al proceso determinista y a las condiciones iniciales, y no son lo mismo. Es decir, los indicadores caóticos a menudo deberían empezar a cambiar incluso antes de que el precio cambie (predecir el cambio), pero este no es el caso de iVAR.

p.d. Mejor utilizar el indicador de eficiencia fractal polarizado. Muestra momentos mucho más interesantes (en mi opinión).

 
C-4:


Si se confirman los estudios teóricos, habrá toda una serie de indicadores que describirán los efectos caóticos y deterministas.

El valor predictivo del iVAR parece muy cuestionable. Visualmente, no es mejor que MA y sufre claramente de volatilidad. En sentido estricto, los indicadores "caóticos" no deben reaccionar a la volatilidad, sino al proceso determinista y a las condiciones iniciales, que no son lo mismo. Es decir, los indicadores caóticos a menudo deberían empezar a cambiar incluso antes de que el precio cambie (predecir el cambio), pero este no es el caso de iVAR.

p.d. Mejor utilizar el indicador de eficiencia fractal polarizado. Muestra momentos mucho más interesantes (en mi opinión).


Gracias,C-4.

Lo mirarémás de cerca, me pondré a ello...

 

¡Buenas tardes!

Actualmente estoy aprendiendo el análisis R/S y escribiendo un programa en C# que lo implementa. Tengo algunas preguntas. Espero que pueda ayudarme

1.En su libro, Peters transforma la serie temporal original

a) ¿se utiliza la diferencia entre el precio del primer día y el del segundo como Yt?

b) ¿cuáles deben ser las constantes a, y b?

2. y de nuevo del libro:

Aquí digamos una serie de 500 valores, especifico un n inicial como 20, ¿cómo aumento entonces el número n?

Gracias de antemano, espero su ayuda.

 

b) Al parecer, el segundo libro de Peters se refiere a la eliminación de los efectos de AR de la serie. La mejor solución en este caso sería encontrar los coeficientes analíticamente para cada serie por separado. Sin embargo, nunca he utilizado este tipo de transformaciones, por lo que no puedo decir exactamente cómo deben encontrarse estos coeficientes. Pero no hay que dar gran importancia a estas transformaciones, porque su significado es eliminar la sobreestimación extremadamente insignificante de la estimación de RS en series de tipo arco (puedo estar equivocado, lo recuerdo muy vagamente). Es mejor empezar trabajando con paseos aleatorios de distribución normal (ya en esta fase, se ha atascado con este método).

a) Es mejor utilizar los rendimientos logarítmicos en lugar de las diferencias de series: ln(Pi/Pi-1).

2) El N de Peters aumenta en uno en cada ejecución: n++. El número de ejecuciones independientes debe ser al menos 2. Es decir, si tiene una serie de 500 valores, divídalos por 2 y tendrá N que varía entre 20 y 250 respectivamente. Cuando n cubra la serie con un resto, por ejemplo, n = 33, 250 / 33 = 7,5757575, toma el número de compases para el que n será un divisor entero, por ejemplo, para n = 33 el número de compases será 231. A continuación, calcule primero la rs para el segmento 1-231 y luego para el segmento 20-250. La media aritmética de ambas barras será la RS deseada.

P.D. Básicamente puedo enviarte mi código en C#. Allí todas estas conversiones ya están hechas, pero el código en sí es inútil, porque las estadísticas de Peters no muestran ninguna regularidad, y los resultados presentados en su libro son pura profanación (ver páginas 24-26 del hilo actual).

 

Lo siento, pero no entiendo bien el punto 2)... si no le importa enviar el código ....

P.D. He mirado los resultados... no quiero molestarte... pero aún así... ¿por qué no es aceptable para usted el uso de este algoritmo?

 
He aumentado n en uno (n++)... pero resultó que con n = 46, y 47 el número de períodos es el mismo... y había una especie de gráfico escalonado...
 
kexs1k:

Lo siento, pero no entiendo bien el punto 2)... si no le importa enviar el código ....

1) P.D. He mirado los resultados... no quiero molestarte... pero aún así... ¿por qué no es aceptable para usted el uso de este algoritmo?


kexs1k:
2) He aumentado n en uno (n++)... pero resultó que en n = 46, y 47 el número de períodos es el mismo... y resulta una especie de gráfico escalonado...


¡1) Para mí el uso de este algoritmo no es aceptable, porque NO FUNCIONA!

2) Es difícil explicar todos los entresijos, mejor ver el código, es pequeño, lo doy aquí mismo:

#pragma warning disable 1587
///<summary>
/// <para>
/// Класс WealthLab.Strategies.Herst реализует методы R/S статистики, такие как таблица R/S оценки к периоду R/S расчета
/// в двойном логарифмическом масштабе, U-статистика, V-статистика, Коэффициент Херста (H) и т.д.</para>
/// <para>
/// Используется  два вида расчета: 1. по скользящему окну; 2. по разбиению всех доступных данных на независимые подпериоды
/// длинной N (задается пользователем).
/// </para>
/// <para>
/// При втором методе для использования всех доступных данных в случае, если 
/// имеется остаток (количество наблюдений не делится на размерность периода N без остатка)расчет производится
/// дважды. Первый раз рассчитываются значения для данных таким образом, что неиспользованные данные (остаток)
/// остаются в самом конце, на втором проходе неиспользованные данные (остаток) остаются в самом начале. Т.е.
/// используется метод скользящего окна, с шагом равным величене остатка. Таким образом и при первом и при втором
/// методе рассчета используются все доступные для наблюдения данные.
/// </para>
/// </>
///</summary>
#pragma warning restore 1587
using System;
using System.Collections.Generic;
using System.Linq;
using WealthLab.Indicators;

namespace WealthLab.MyIndicators
{
    /// <summary>
    /// Задает тип рассчета статистики Херста
    /// <param name="NotDependentSubperiods"> Не зависимые подпериоды</param>
    /// <param name="SlidingWindow"> Скользящее окно</param>
    /// </summary>
    public enum HerstCalculation
    {
        NotDependentSubperiods,
        SlidingWindow,
        Modern
    } ;
    public class EmptyStrategy : WealthScript
    {
        protected override void Execute()
        {
            PrintDebug("Run Empty Strategy...");
        }
    }


    public abstract class MyIndicators
    {
        protected WealthScript ws_strategy;
        protected bool InitEnable = false;
        public MyIndicators() : this (null){}
        /// <summary>
        /// Основной конструктор требует текущего окружения WealtLab через класс WealthLab.WealthLabScript
        /// </summary>
        /// <param name="wl_script">Класс типа WealthLab.WealthLabScript содержащий все необходимые данные</param>
        public MyIndicators(WealthScript wl_script)
        {
            if(wl_script == null) return;
            ws_strategy = wl_script;
        }
    }

    public class Herst : MyIndicators
    {
        //Хранит ценовой (аккумулятивный) ряд доходностей
        private List<double> series = new List<double>();
        /// <summary>
        /// Инициализиурет класс Herst текущем окружением WealthScript 
        /// </summary>
        /// <param name="ws"> Текущий класс WealthScript</param>
        
        public Herst() : this(new EmptyStrategy()){}
        public Herst(WealthScript ws) : base(ws) {}
        #region RSAnalysis
        /// <summary>
        /// Возвращает пролагорифмированное по основанию 10 отношение R/S для периода N.
        /// </summary>
        /// <param name="N"> Период расчета R/S</param>
        /// <param name="CalcType"> Тип рассчета</param>
        /// <returns>
        /// Значение RS
        /// </returns>
        /*public static DataSeries operator + (DataSeries ds1, DataSeries ds2){}*/
        public double RS(ref DataSeries data, int N, HerstCalculation CalcType)
        {
            if (N > data.Count) return -1.0;
            switch (CalcType)
            {
                case HerstCalculation.NotDependentSubperiods:
                    return RSAnalysisInLogScaleSubperiods(ref data, N);
                //case HerstCalculation.Modern(N):
                //    return RSAnalysisInLogModern(N);
                default:
                    return RSAnalysisInLogScaleSubperiods(ref data, N);
            }
        }
        
        private double RSAnalysisInLogScaleSubperiods(ref DataSeries series, int N)
        {
            //находим количество не используемых наблюдений для выбранного периода.
            int NotUsingM = series.Count - (int)(Math.Floor((double)series.Count/N))*N;
            //Создаем конвертер данных
            //Для простоты рассчетов конвертируем DataSeries в List<double>
            List<double> first = Convert.DataSeriesToList(ref series);
            //if(NotUsingM != 0){}

            List<double> second = Convert.DataSeriesToList(ref series);
            //1. Удаляем неиспользуемые наблюдения с начала списка
            first.RemoveRange(0, NotUsingM);
            //2. Затем удаляем неиспользуемые наблюдения с конца списка (0 - первый элемент)
            second.RemoveRange(second.Count - NotUsingM, NotUsingM);
            //3. Разбиваем ряд на k равных групп, и для каждой из них подсчитываем R/S размах к периоду затем
            //   находим их среднее значение.
            //Для простоты рассчета индикатора снова конвертируем списки в DataSeries
            DataSeries firstDS = Convert.ListToDataSeries(ref first);
            DataSeries secondDS = Convert.ListToDataSeries(ref second);
            double avrg_r1 = CountR(ref firstDS, N);
            double avrg_r2 = CountR(ref secondDS, N);
            double R = (avrg_r1 + avrg_r2)/2;
            return R;
        }
        private double CountR(ref DataSeries series, int N)
        {
            //DataSeries R = new DataSeries("R");
            double R = 0.0;
            int count = 0;
            for (int i = 0; i < series.Count; i++)
            {
                if ((i + 1) % N == 0)
                {
                    count++;
                    int first_element = i + 1 - N;
                    //находим среднее значение или математическое ожидание периода:
                    double sma = Indicators.SMA.Value(i, series, N);
                    //находим стандартное отклонение
                    double std_dev = Indicators.StdDev.Value(i, series, N, StdDevCalculation.Sample);
                    double acum = 0.0;
                    DataSeries acum_series = new DataSeries("Acum Series");
                    double min = double.MaxValue, max = double.MinValue;
                    for (int k = first_element; k <= i; k++)
                    {
                        acum += series[k] - sma;
                        acum_series.Add(acum, DateTime.Now);
                        if (acum < min) min = acum;
                        if (acum > max) max = acum;
                    }
                    if (std_dev == 0.0) return 0.0;
                    R += Math.Log10((max - min)/std_dev);
                }
            }
            R /= count;
            return R;
        }

        public double RSS(DataSeries series, int bar, int N)
        {
            if(bar < N) return 0.0;
            int first_element = bar + 1 - N;
            //находим среднее значение или математическое ожидание периода:
            double sma = Indicators.SMA.Value(bar, series, N);
            //находим стандартное отклонение
            double std_dev = Indicators.StdDev.Value(bar, series, N, StdDevCalculation.Sample);
            double acum = 0.0;
            DataSeries acum_series = new DataSeries("Acum Series");
            double min = double.MaxValue, max = double.MinValue;
            for (int k = first_element; k <= bar; k++)
            {
                acum += series[k] - sma;
                acum_series.Add(acum, DateTime.Now);
                if (acum < min) min = acum;
                if (acum > max) max = acum;
            }
            if (std_dev == 0.0) return 0.0;
            double RS = Math.Log10((max - min) / std_dev);
            return RS;
        }

        public double CountH(double RS, int Period)
        {
            double n = RS / (Math.Log10(Period));
            return n;
        }
        #endregion
    }
}
No se puede ejecutar directamente, porque está diseñado para trabajar en conjunto con WealthLab. Adjunto las bibliotecas correspondientes. Con un poco de persistencia, es posible entender los métodos de llamada.
Archivos adjuntos:
wld5lib.zip  268 kb
 

Tal y como prometí, voy a publicar un interesante estudio:

Ante ustedes está el estudio de dos segmentos temporales del Índice RTS. El primer segmento (línea verde) prueba de 2006 a 2009, el segundo de 2009 a 2012. Se puede ver que el RTS ha cambiado fundamentalmente desde 2008. Lo primero que llama la atención es que el RTS se ha vuelto mucho más eficiente: su curva se ha acercado mucho más al azar. El grado de entropía e incertidumbre ha aumentado. Sin embargo, aún no se ha alcanzado el grado de máxima entropía, que es un paseo aleatorio puro. Pero hay que entender que en la etapa actual el algoritmo tiende a sobreestimar sus lecturas en las distribuciones de Pareto y en realidad el componente determinista en el RTS moderno es aún menor.

Interesa el horizonte temporal de 3 a 30 minutos (el periodo es 10^N min, donde N se representa en el eje de abscisas en el rango de 0,5 (10^0,5 = 3 min) a 3,5 (10^3,5 = 3162 min, o 52 horas o 3,7 días)). Obsérvese que en esta franja hay un componente antitendencia muy poco significativo pero estadísticamente distinguible. Es probable que sea incluso mayor en la realidad, ya que hemos inflado las estimaciones de las distribuciones de Pareto. No existía antes de 2009. El mercado estuvo muy de moda en todos los horizontes temporales disponibles para el análisis. ¿Qué es esto? Tal vez estemos viendo los efectos de los algoritmos de HFT que no estaban tan extendidos antes de la crisis de 2008. No en vano los scalpers en RTS llevan mucho tiempo diciendo que es casi imposible operar - los robots no permiten operar las formaciones habituales.

Podemos suponer que los resultados tan diferentes de los dos segmentos se deben a la reducción de la muestra estadística a la mitad. Pero la cantidad total de datos es grande y asciende a cerca de 1 000 000 de barras de minutos de 2006 a 2012, lo que da 500 000 puntos de datos para cada intervalo. En el caso de los periodos pequeños, se trata de decenas de miles de subperiodos, lo que significa que la reducción de la significación estadística es extremadamente pequeña y no puede dar una dispersión tan grande de los resultados (lo que es evidente por la planitud de las curvas). Sin embargo, hay una variante más: de 2006 a 2009, el mercado RTS era más pareto y con cola, ahora el mercado es más líquido y se acerca más a la distribución normal. Este es un fuerte contraargumento, por lo que ahora estoy trabajando duro en la estimación de la volatilidad para suavizar los efectos de tales distribuciones y contrarrestar eficazmente el meneo aleatorio de tipo Pareto.

 
C-4:


Se trata más bien del método en sí. Si su método da 0,5 en la Norma. Al azar exactamente 0,5 y 0,47-0,48 en monedas - significa que debemos entender seriamente su metodología. Teóricamente, los mercados no deberían dividirse en tendencia y antitendencia. En Peters todos los mercados estudiados tenían H por encima de 0,5.

¿Has probado a mezclar aleatoriamente los datos de las series? En teoría debería destruir las correlaciones y llevar las estimaciones de H como máximo a 0,5 (se trata de comprobar la corrección del método de cálculo).

En cuanto a la anti-recompensa - después de todo la mayoría de las divisas principales, por lo que recuerdo, tienen AC de rendimientos vecinos menores de 0, y si asumimos que la serie es un movimiento browniano generalizado, entonces C ~ 2^(H-1) - 1, es decir, H debe ser menor de 0,5...

 

¡¡¡Qué maldito lío!!! ¡Es una tontería!

Ahora mismo estoy trabajando en mezclar los datos. Eso es lo que hice al principio: barajé todas las barras RTS, hice una prueba con las barajadas, ¡y acabé con la RS sesgada aún más! Pero no puede ser así. Si la RS sólo muestra el hecho de que la distribución no es normal, entonces la estimación no debería cambiar: después de todo, estadísticamente ambas distribuciones son idénticas. Si la RS capta correlaciones complejas, entonces deberían romperse por la mezcla de datos, y la RS no debería distinguirse del paseo aleatorio. En cambio, la tercera opción se queda obstinadamente fuera. Tal vez sea la completa incomparabilidad dimensional de las barras de RTS en diferentes períodos. Las volatilidades de 2006 son muy diferentes a las de los últimos años. Como resultado, las grandes barras de 2006 que se arrastran hacia el rango moderado de los últimos años hacen que los valores atípicos parezcan aún más grandes. Mi algoritmo está escrito de tal manera que debería manejar eficazmente tales valores atípicos, pero aparentemente algo está rompiendo las defensas.

Bien, basándonos en lo siguiente, presentemos el escenario más negativo: El algoritmo sólo capta el hecho de que la distribución es no normal. No hay ningún componente determinista en las series de mercado. Comprobemos lo siguiente: si a la subida del precio le sigue más bien la subida (y viceversa, si a la bajada le sigue la bajada), entonces el gráfico será más plano, independientemente de cómo lo gire. El número de inversiones para el período de N barras será menor y, por lo tanto, el número de líneas zag-zag también será menor. Describimos la dependencia de la siguiente manera: dividimos el número de barras por el número de líneas en zig-zag y obtenemos el número medio de barras por línea ZZ. La distancia recorrida no es importante, por lo que el tipo de distribución no debería influir. Dibujamos un gráfico similar en escala logarítmica doble. Tomamos el último historial del EURUSD de 1 millón de barras como herramienta de prueba y lo probamos. A continuación, generemos un paseo aleatorio sobre los mismos volúmenes del EURUSD. No tendrá una distribución normal. Ahora compare dos gráficos, si son idénticos, significa que el algoritmo sólo capta la distribución no normal y no sirve de nada. Así que, echemos un vistazo:

Whoa, whoa. Nuestros peores temores se han hecho realidad. Ambos gráficos son idénticos. Ambos están distribuidos en Pareto y son indistinguibles de un paseo aleatorio, pero uno es un verdadero mercado y el otro un simple generador basado en volúmenes reales.

Una última comprobación: de nuevo tomamos estas dos series y calculamos la distancia para ellas. Si el indicador reacciona sólo a la no normalidad de la distribución, entonces la oscilación del valor aleatorio normal debería mostrar estrictamente 0,5, la oscilación del eurusd real estará por encima de 0,5 (porque la distribución no es normal), la oscilación de la distribución aleatoria generada será casi indistinguible del eurusd real como se ve en el gráfico anterior. Pruebe y observe:

¡¡¡Mierda!!! ¿¡Has visto eso!? El EURUSD aleatorio es sólo un poco más alto que la rampa aleatoria normal. Su pendiente es casi igual a 0,5. El valor aleatorio ha permanecido sin cambios, como se esperaba. Pero el EURUSD ha subestimado seriamente (!) su rango! Al mismo tiempo, el índice Hurst del eurusd llega a 0,53, es decir, la divisa está en tendencia, pero sólo vemos el principio de su tendencia. Su tendencia cobra fuerza sólo después de 70 días (¡!), y antes de eso es un mercado fuertemente retrocedido. Esto significa que el EURUSD tiene un horizonte gigantesco, sólo vemos el principio del prólogo.

Aparentemente, es la no normalidad de la distribución la que oculta todos los efectos deterministas. Sin embargo, la principal anomalía no está tanto en la extraña volatilidad, sino en los propios incrementos de precios (barras). Es un mecanismo muy complejo y profundo y no hay manera de trabajar con él al azar.

s.s. aunque tal vez sean conclusiones erróneas debido a datos y métodos equivocados. hh.

Razón de la queja: