Hearst-Index - Seite 33

 
Roman.:


Wie cool das alles geworden ist! :-)

Können diese Studien daran angehängt (ergänzt) werden oder kann etwas Ähnliches (für den Filter autark) für die gleiche einfache Anbindung an eine Trading-Eule wie ein Trend-Flat-Filter gezeichnet werden?

Hier ist mein Signal Teil der Trend Eule mit iVAR Indikator Lesungen.


Wenn sich die theoretischen Studien bestätigen, wird es eine ganze Reihe von Indikatoren geben, die chaotische und deterministische Effekte beschreiben.

Der prädiktive Wert von iVAR erscheint sehr fragwürdig. Optisch ist er nicht besser als MA und leidet eindeutig unter der Unbeständigkeit. Streng genommen sollten "chaotische" Indikatoren nicht auf die Volatilität reagieren, sondern auf den deterministischen Prozess und die Ausgangsbedingungen, und die sind nicht dasselbe. Das heißt, chaotische Indikatoren sollten oft schon vor der Preisänderung beginnen, sich zu verändern (die Änderung vorhersagen), aber das ist bei iVAR nicht der Fall.

p.s. Verwenden Sie besser einen polarisierten fraktalen Effizienzindikator. Sie zeigt viel mehr interessante Momente (imho).

 
C-4:


Wenn sich die theoretischen Studien bestätigen, wird es eine ganze Reihe von Indikatoren geben, die chaotische und deterministische Effekte beschreiben.

Der prädiktive Wert von iVAR erscheint äußerst fragwürdig. Visuell ist es wirklich nicht besser als MA und leidet eindeutig unter der Unbeständigkeit. Streng genommen sollten "chaotische" Indikatoren nicht auf Volatilität reagieren, sondern auf deterministische Prozesse und Ausgangsbedingungen, was nicht dasselbe ist. Das heißt, chaotische Indikatoren sollten oft schon vor der Preisänderung beginnen, sich zu verändern (die Änderung vorhersagen), aber das ist bei iVAR nicht der Fall.

p.s. Verwenden Sie besser einen polarisierten fraktalen Effizienzindikator. Er zeigt viel mehr interessante Momente (imho).


Vielen Dank,C-4.

Ich werde es mirgenauer ansehen, ich werde esin den Griff bekommen...

 

Guten Tag!

Ich lerne gerade die R/S-Analyse und schreibe ein Programm in C#, das sie implementiert. Ich habe ein paar Fragen. Ich hoffe, Sie können mir helfen

1. in seinem Buch transformiert Peters die ursprüngliche Zeitreihe

a) wird die Differenz zwischen dem Preis des ersten Tages und dem Preis des zweiten Tages als Yt verwendet?

b) Wie lauten die Konstanten a und b?

2. und wieder aus dem Buch:

Sagen wir, eine Reihe von 500 Werten, ich gebe als Anfangswert n 20 an, wie erhöhe ich dann die Zahl n???

Vielen Dank im Voraus, ich hoffe auf Ihre Hilfe.

 

b) Offenbar ist das zweite Buch von Peters gemeint, in dem es um die Beseitigung der AR-Effekte der Serie geht. Die beste Lösung wäre in diesem Fall, die Koeffizienten für jede Reihe einzeln analytisch zu ermitteln. Allerdings habe ich solche Transformationen noch nie verwendet, so dass ich nicht genau sagen kann, wie diese Koeffizienten gefunden werden sollten. Diesen Transformationen ist jedoch keine große Bedeutung beizumessen, da ihr Sinn darin besteht, eine extrem unbedeutende Überschätzung der RS-Schätzung bei Reihen wie dem Bogen zu beseitigen (ich kann mich irren, ich erinnere mich nur sehr vage). Beginnen Sie am besten mit normalverteilten Random Walks (bleiben Sie bereits in diesem Stadium bei dieser Methode hängen).

a) Verwenden Sie lieber logarithmische Renditen als Reihendifferenzen: ln(Pi/Pi-1).

2) Peters' N erhöht sich bei jedem Durchlauf um eins: n++. Die Anzahl der unabhängigen Durchläufe muss mindestens 2 betragen, d. h. wenn Sie eine Reihe von 500 Werten haben, teilen Sie diese durch 2, und Sie erhalten N, das zwischen 20 und 250 variiert. Wenn n die Reihe mit einem Rest abdeckt, z. B. n = 33, 250 / 33 = 7,5757575, nimm die Anzahl der Balken, für die n ein ganzzahliger Teiler ist, z. B. für n = 33 ist die Anzahl der Balken 231. Berechnen Sie dann zuerst rs für das Segment 1-231, dann für das Segment 20-250. Das arithmetische Mittel der beiden Balken ergibt den gewünschten RS.

P.S. Im Grunde kann ich Ihnen meinen Code in C# schicken. Dort sind all diese Transformationen bereits durchgeführt, aber der Code selbst ist nutzlos, da Peters' Statistiken keine Regelmäßigkeiten aufweisen und die in seinem Buch präsentierten Ergebnisse reine Schändung sind (siehe Seiten 24-26 des aktuellen Threads).

 

Es tut mir leid, aber ich verstehe den Punkt 2) nicht ganz... wenn es Ihnen nichts ausmacht, code.... zu senden

P.S.: Ich habe mir die Ergebnisse angesehen... Ich will Sie nicht belästigen... aber trotzdem... warum ist die Verwendung dieses Algorithmus für Sie nicht akzeptabel?

 
Ich habe n um eins erhöht (n++)... aber es stellte sich heraus, dass bei n = 46 und 47 die Anzahl der Perioden die gleiche ist... und es gab eine Art gestaffeltes Diagramm...
 
kexs1k:

Es tut mir leid, aber ich verstehe den Punkt 2) nicht ganz... wenn es Ihnen nichts ausmacht, code.... zu senden

1) P.S.: Ich habe mir die Ergebnisse angesehen... Ich will Sie nicht belästigen... aber trotzdem... Warum ist die Verwendung dieses Algorithmus für Sie nicht akzeptabel?


kexs1k:
2) Ich habe n um eins erhöht (n++)... aber es stellte sich heraus, dass bei n = 46 und 47 die Anzahl der Perioden die gleiche ist... und es stellt sich heraus, dass es sich um eine Art Stufenkurve handelt...


1) Für mich ist die Verwendung dieses Algorithmus nicht akzeptabel, weil er NICHT FUNKTIONIERT!

2) Es ist schwer zu erklären, alle Feinheiten, besser sehen den Code, es ist klein, ich gebe es hier:

#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
    }
}
Sie können es nicht direkt ausführen, da es für die Zusammenarbeit mit WealthLab konzipiert ist. Ich füge die entsprechenden Bibliotheken bei. Mit etwas Ausdauer ist es möglich, die aufrufenden Methoden zu verstehen.
Dateien:
wld5lib.zip  268 kb
 

Wie versprochen, veröffentliche ich eine interessante Studie:

Vor Ihnen liegt eine Studie über zwei Zeitabschnitte des RTS-Index. Das erste Segment (grüne Linie) testet von 2006 bis 2009, das zweite von 2009 bis 2012. Sie können sehen, dass sich die RTS seit 2008 grundlegend verändert hat. Als erstes fällt auf, dass das RTS viel effizienter geworden ist: Seine Kurve hat sich dem Zufall angenähert. Der Grad der Entropie und der Unsicherheit hat zugenommen. Der Grad der maximalen Entropie, der eine reine Zufallsbewegung darstellt, ist jedoch noch nicht erreicht. Es muss jedoch klar sein, dass der Algorithmus in der gegenwärtigen Phase dazu neigt, seine Messwerte für die Pareto-Verteilungen zu überschätzen, und in Wirklichkeit ist die deterministische Komponente im modernen RTS sogar noch kleiner.

Der Zeithorizont von 3 bis 30 Minuten ist von Interesse (die Periode ist 10^N min, wobei N auf der Abszissenachse im Bereich von 0,5 (10^0,5 = 3 min) bis 3,5 (10^3,5 = 3162 min, oder 52 Stunden oder 3,7 Tage) aufgetragen ist). Man beachte, dass es in diesem Bereich eine höchst unbedeutende, aber statistisch erkennbare Anti-Trend-Komponente gibt. In Wirklichkeit ist sie wahrscheinlich noch größer, da wir die Schätzungen der Pareto-Verteilungen überhöht haben. Vor 2009 gab es sie nicht. Der Markt lag in allen für die Analyse verfügbaren Zeithorizonten extrem im Trend. Was ist das? Vielleicht sehen wir die Auswirkungen von HFT-Algorithmen, die vor der Krise von 2008 noch nicht so weit verbreitet waren. Nicht umsonst sagen Scalper auf RTS seit langem, dass es fast unmöglich ist, mit Robotern zu handeln - die üblichen Formationen lassen sich nicht handeln.

Wir können davon ausgehen, dass diese unterschiedlichen Ergebnisse der beiden Segmente auf die Halbierung der statistischen Stichprobe zurückzuführen sind. Die Gesamtmenge der Daten ist jedoch groß und beläuft sich auf etwa 1 000 000 Minutenbalken von 2006 bis 2012, was 500 000 Datenpunkte für jedes Intervall ergibt. Bei kleinen Zeiträumen handelt es sich um Zehntausende von Unterzeiträumen, was bedeutet, dass die Verringerung der statistischen Signifikanz äußerst gering ist und nicht zu einer derartigen Streuung der Ergebnisse führen kann (was aus der Flachheit der Kurven ersichtlich ist). Es gibt jedoch noch eine andere Variante: Von 2006 bis 2009 war der RTS-Markt eher pareto- und schwanzförmig, jetzt ist der Markt liquider und näher an der Normalverteilung. Dies ist ein starkes Gegenargument, weshalb ich jetzt intensiv an der Volatilitätsschätzung arbeite, um die Auswirkungen solcher Verteilungen zu glätten und der zufälligen Pareto-Verschiebung wirksam zu begegnen.

 
C-4:


Hier geht es eher um die Methode selbst. Wenn Ihre Methode 0,5 auf Norm. Random genau 0,5 und 0,47-0,48 auf Währungen - das bedeutet, dass wir Ihre Methodik ernsthaft verstehen sollten. Theoretisch sollten sich die Märkte nicht in trendig und antitrendig aufteilen. Bei Peters hatten alle untersuchten Märkte einen H-Wert von über 0,5.

Haben Sie versucht, die Datenreihen zufällig zu mischen? Theoretisch sollte dies die Korrelationen zerstören und die Schätzungen für H maximal auf 0,5 bringen (es geht um die Überprüfung der Korrektheit der Berechnungsmethode).

In Bezug auf Anti-Belohnung - schließlich haben die meisten der Währung Majors, soweit ich mich erinnere, AC der benachbarten Renditen weniger als 0, und wenn wir davon ausgehen, dass die Serie ist eine verallgemeinerte Brownsche Bewegung, dann C ~ 2^(H-1) - 1, dh H muss weniger als 0,5 sein ...

 

Was für ein verdammtes Durcheinander!!! Das ist einfach Unsinn!

Im Moment arbeite ich daran, die Daten zu mischen. Das habe ich zuerst auch gemacht: Ich habe alle RTS-Balken gemischt und einen Test mit den gemischten Balken durchgeführt, der damit endete, dass RS noch mehr verzerrt wurde! Aber so kann es nicht sein. Wenn RS nur die Tatsache aufzeigt, dass die Verteilung nicht normal ist, sollte sich die Schätzung nicht ändern: Schließlich sind beide Verteilungen statistisch gesehen identisch. Wenn RS komplexe Korrelationen auffängt, dann sollten diese durch Datenmischung gebrochen werden, und RS sollte nicht von Random Walk unterscheidbar sein. Stattdessen fällt die dritte Option hartnäckig aus. Vielleicht liegt es an der völligen Unvergleichbarkeit der RTS-Balken in verschiedenen Zeiträumen. Die Volatilitäten des Jahres 2006 unterscheiden sich zu sehr von denen der letzten Jahre. Die großen Balken von 2006, die sich in den moderaten Bereich der letzten Jahre schleichen, lassen die Ausreißer noch größer erscheinen. Mein Algorithmus ist so geschrieben, dass er mit solchen Ausreißern effektiv umgehen sollte, aber anscheinend durchbricht etwas die Schutzmaßnahmen.

Okay, lassen Sie uns im Folgenden das negativste Szenario vorstellen: Der Algorithmus erkennt nur, dass die Verteilung nicht normal ist. Es gibt keine deterministische Komponente in den Marktreihen. Überprüfen wir das auf folgende Weise: Wenn auf einen Preisanstieg eher ein Anstieg folgt (und umgekehrt, wenn auf einen Rückgang ein Rückgang folgt), dann wird das Diagramm flacher, egal wie man es dreht und wendet. Die Anzahl der Umkehrungen für eine Periode von N Takten wird geringer sein und somit auch die Anzahl der Zick-Zack-Linien. Wir beschreiben die Abhängigkeit wie folgt: Wir teilen die Anzahl der Balken durch die Anzahl der Zickzacklinien und erhalten die durchschnittliche Anzahl der Balken pro ZZ-Linie. Die zurückgelegte Strecke ist nicht wichtig, so dass die Art der Verteilung keine Rolle spielen sollte. Wir zeichnen ein ähnliches Diagramm in doppelt logarithmischer Skala. Wir nehmen die letzte EURUSD-Historie von 1 Million Barren als Testwerkzeug und testen sie. Dann lassen Sie uns einen zufälligen Spaziergang auf demselben EURUSD-Volumen erzeugen. Sie ist nicht normalverteilt. Wenn die beiden Diagramme identisch sind, bedeutet dies, dass der Algorithmus nur nicht-normale Verteilungen erfasst und somit nutzlos ist. Schauen wir es uns also an:

Wow, wow. Unsere schlimmsten Befürchtungen sind wahr geworden. Beide Diagramme sind identisch. Beide sind Pareto-verteilt und nicht von einem Random Walk zu unterscheiden, aber der eine ist ein echter Markt und der andere ein einfacher Generator, der auf realen Volumen basiert.

Eine letzte Überprüfung: Wir nehmen wieder diese beiden Reihen und berechnen den Abstand für sie. Wenn der Indikator nur auf die Nicht-Normalität der Verteilung reagiert, sollte der Swing des normalen Zufallswertes streng 0,5 betragen, der Swing des realen eurusd wird über 0,5 liegen (weil die Verteilung nicht normal ist), der Swing der generierten Zufallsverteilung wird fast nicht vom realen eurusd zu unterscheiden sein, wie in der obigen Grafik zu sehen ist. Testen und beobachten:

Heilige Scheiße!!! Hast du das gesehen? Der zufällige EURUSD ist nur ein klein wenig höher als die normale Zufallsrampe. Seine Steigung ist fast gleich 0,5. Der Zufallswert ist wie erwartet unverändert geblieben. Aber EURUSD hat seine Bandbreite ernsthaft unterschätzt(!)! Gleichzeitig liegt der Hurst-Index des eurusd bei 0,53, d.h. die Währung befindet sich im Trend, aber wir sehen nur den Anfang ihres Trends. Der Trend verstärkt sich erst nach 70 Tagen(!), und vorher ist es ein starker Pullback-Markt. Das bedeutet, dass der EURUSD einen gigantischen Horizont hat, wir sehen nur den Anfang des Prologs.

Offensichtlich ist es die Nicht-Normalität der Verteilung, die alle deterministischen Effekte verbirgt. Die Hauptanomalie liegt jedoch nicht so sehr in der seltsamen Volatilität, sondern in den Preisschritten (Balken) selbst. Es handelt sich um einen sehr komplexen und tiefgreifenden Mechanismus, mit dem man nicht willkürlich arbeiten kann.

s.s. aber vielleicht sind es alles falsche schlussfolgerungen aufgrund falscher daten und methoden. hh.