Hurst üssü - sayfa 33

 
Roman. :


Her şey ne kadar harika çıkıyor! :-)

Ve bu çalışmalar bir şekilde buna (tamamlanmış) bağlanabilir veya benzer bir şey (bir filtre için kendi kendine yeterli), trend düz bir filtre ile aynı basit bir baykuşa bağlantı için tasvir edilebilir mi?

İşte iVAR gösterge okumalarını kullanan trend olan bir baykuşun sinyal parçası.


Teorik çalışmalar doğrulanırsa, kaotik ve deterministik etkileri tanımlayan bir dizi gösterge olacaktır.

iVAR'ın tahmin değeri oldukça şüpheli görünüyor. Görsel olarak, MA'dan neredeyse daha iyi değil ve açıkça oynaklıktan muzdarip. Açıkçası, "kaotik" göstergeler oynaklığa değil, sürecin ve başlangıç koşullarının determinizmine cevap vermelidir ve bu aynı şey değildir. Onlar. kaotik göstergeler genellikle fiyat değişikliklerinden önce bile değişmeye başlamalıdır (değişiklikleri tahmin edin) ve iVAR'da durum böyle değildir.

ps Polarize fraktal verimlilik göstergesini kullanmak daha iyidir. Hatta çok daha ilginç anlar gösteriyor (IMHO).

 
C-4 :


Teorik çalışmalar doğrulanırsa, kaotik ve deterministik etkileri tanımlayan bir dizi gösterge olacaktır.

iVAR'ın tahmin değeri oldukça şüpheli görünüyor. Görsel olarak, MA'dan neredeyse daha iyi değil ve açıkça oynaklıktan muzdarip. Açıkçası, "kaotik" göstergeler oynaklığa değil, sürecin ve başlangıç koşullarının determinizmine cevap vermelidir ve bu aynı şey değildir. Onlar. kaotik göstergeler genellikle fiyat değişikliklerinden önce bile değişmeye başlamalıdır (değişiklikleri tahmin edin) ve iVAR'da durum böyle değildir.

ps Polarize fraktal verimlilik göstergesini kullanmak daha iyidir. Hatta çok daha ilginç anlar gösteriyor (IMHO).


Teşekkürler C-4.

Daha yakından bakacağım...

 

Tünaydın!

Şu anda R/S analizi okuyorum ve onu uygulayan bir C# programı yazıyorum. Bir kaç sorum var. umarım bana yardım edebilirsin

1. kitabında, Peters orijinal zaman serisini dönüştürüyor

a) İlk gün fiyatı ile ikinci gün fiyatı arasındaki fark Yt olarak mı kullanılıyor?

b) a ve b sabitleri ne olmalıdır?

2. ve yine kitaptan:

Diyelim ki 500 değerlik bir dizi, ilk n'yi 20 belirleyeceğim, o zaman n sayısı nasıl arttırılır???

Şimdiden teşekkürler, yardımınızı umuyorum.

 

b) Görünüşe göre bu, Peters'ın ikinci kitabına atıfta bulunuyor ve serinin AR etkilerini ortadan kaldırmakla ilgili. Bu durumda en iyi çözüm, her seri için ayrı ayrı katsayılar için analitik bir arama olacaktır. Ancak bu tür dönüşümleri hiç kullanmadım, bu yüzden bu katsayıların nasıl aranacağını tam olarak söyleyemem. Ancak bu dönüşümlere büyük önem vermeyin, çünkü. onların anlamı, kemer tipi seriler üzerindeki RS tahmininin son derece önemsiz fazla tahminini ortadan kaldırmaktır (yanılıyor olabilirim, çok belirsiz hatırlıyorum). Normal olarak dağıtılmış rastgele yürüyüşlerle başlamak daha iyidir (bu yöntemle, bu aşamada duraklayın).

a) Seri farkları yerine logaritmik dönüşleri kullanın: ln(Pi/Pi-1).

2) Peters için N, her çalıştırmada bir artar: n++. Bu durumda bağımsız bölüm sayısı en az 2 olmalıdır. 500 değerlik bir diziniz varsa, bunları 2'ye bölün ve N'niz sırasıyla 20'den 250'ye değişecektir. Bu durumda, n kalanlı seriyi kapsadığında, örneğin n=33, 250 / 33 = 7.5757575, n'nin tamsayı bölen olacağı çubuk sayısını alın, örneğin n=33 için çubuk sayısı 231 olur. Sonra önce 1-231 segmenti için rs'yi, sonra segment 20-250 için hesaplayın. Her iki segment için aritmetik ortalama, istenen RS olacaktır.

Not Prensip olarak size C# kodumu gönderebilirim. Orada, tüm bu dönüşümler zaten yapıldı, ancak kodun kendisi işe yaramaz çünkü. Peters'ın istatistikleri herhangi bir kalıp ortaya çıkarmaz ve kitabında sunulan sonuçlar tamamen küfürdür (sonuçlar için mevcut konunun 24-26. sayfalarına bakın).

 

Üzgünüm, ama 2. maddeyi tam olarak anlamadım... kodu atmak zor değilse...

Not: Sonuçlara baktım... canınızı sıkmak istemiyorum... ama yine de... bu algoritma neden sizin için kabul edilebilir değil?

 
n'yi bir artırdım (n++)... ama n = 46 ve 47 ile periyot sayısının aynı olduğu ortaya çıktı... ve bir çeşit kademeli grafik elde ettim...
 
kexs1k :

Üzgünüm, ama 2. maddeyi tam olarak anlamadım... kodu atmak zor değilse...

1) Not: Sonuçlara baktım... canınızı sıkmak istemiyorum... ama yine de... bu algoritma neden sizin için kabul edilebilir değil?


kexs1k :
2) n'yi bir artırdım (n++)... ama n = 46 ve 47 için periyot sayısının aynı olduğu ortaya çıktı... ve bir çeşit kademeli grafik elde edildi...


1) Benim için bu algoritmanın kullanımı kabul edilemez, çünkü ÇALIŞMIYOR!

2) Tüm incelikleri açıklamak zor, koda bakmak daha iyi, küçük, hemen buraya getiriyorum:

#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
    }
}
Ancak, WealthLab ile birlikte çalışmak üzere tasarlandığından, doğrudan başlatamazsınız. İlgili kütüphaneleri ekliyorum. Belirli bir ısrarla, arama yöntemlerini anlayabilirsiniz.
Dosyalar:
wld5lib.zip  268 kb
 

Söz verdiğim gibi, ilginç bir araştırma yayınlıyorum:

İşte RTS endeksinin iki zaman diliminin bir çalışması. İlk segment (yeşil hat) 2006'dan 2009'a, ikincisi 2009'dan 2012'ye kadar test edildi. 2008'den sonra RTS'nin temelden değiştiği görülebilir. Gözünüze çarpan ilk şey, RTS'nin çok daha verimli hale gelmesidir: eğrisi rastgele olmaya çok daha yakındır. Entropi ve belirsizlik derecesi arttı. Ancak saf rastgele yürüyüş olan maksimum entropi derecesine henüz ulaşılamamıştır. Ancak mevcut aşamada algoritmanın Pareto dağılımları üzerindeki okumalarını olduğundan fazla tahmin etme eğiliminde olduğunu ve gerçekte modern RTS'deki deterministik bileşenin daha da az olduğunu anlamak gerekir.

3 ila 30 dakika arasındaki zaman ufku ilgi çekicidir (süre 10 ^ N dak., Burada N, apsis üzerinde 0,5 (10 ^ 0,5 \u003d 3 dak) ila 3,5 (10 ^ 3.5 \u003d) aralığında çizilir. 3162 dakika veya 52 saat veya 3,7 gün)). Bu aralıkta son derece küçük ama istatistiksel olarak farklı bir anti-trend bileşeni olduğunu unutmayın. Büyük olasılıkla, gerçekte daha da fazla çünkü. Pareto dağılımlarını fazla tahmin ettik. 2009 yılına kadar öyle değildi. Piyasa, analiz için mevcut tüm zaman dilimlerinde son derece modaydı. Bu ne? Belki de 2008 krizinden önce çok yaygın olarak temsil edilmeyen HFT algoritmalarının etkilerini görüyoruz. RTS'deki yüzücülerin uzun süredir çalışmanın neredeyse imkansız hale geldiğini söylemesi boşuna değil - robotlar olağan oluşumları müzakere etmeye izin vermiyor.

İki segmentin bu kadar farklı sonuçlarının istatistiksel numunenin yarıya bölünmesinden kaynaklandığı varsayılabilir. Ancak toplam veri miktarı büyüktür, 2006'dan 2012'ye kabaca 1.000.000 dakikalık çubuklarda, her çubuk için 500.000 veri noktası verir. Küçük periyotlar için, bunlar on binlerce alt dönemdir, yani istatistiksel anlamlılıktaki azalma son derece önemsizdir ve (eğrilerin düzgünlüğünden görülebileceği gibi) böyle bir sonuç dağılımı veremez. Doğru, bir seçenek daha var: 2006'dan 2009'a kadar, RTS piyasası daha Paretian ve kuyrukluydu, şimdi piyasa daha likit ve normal bir dağılıma daha yakın. Bu güçlü bir karşı savdır, bu yüzden şu anda bu tür dağılımların etkilerini yumuşatmak ve Pareto tipi rastgele yürüyüşlere etkili bir şekilde karşı koymak için oynaklığı tahmin etmek için çok çalışıyorum.

 
C-4 :


Daha çok yöntemin kendisi hakkında. Yönteminiz Norm veriyorsa. Rastgele tam olarak 0,5 ve 0,47-0,48 para birimlerinde - bu nedenle metodolojinizi ciddi şekilde anlamanız gerekir. Teorik olarak, piyasalar trend ve trend karşıtı olarak ayrılmamalıdır. Peters, incelediği tüm pazarlarda 0,5'in üzerinde bir H'ye sahipti.

Satır verilerini rastgele karıştırmayı denediniz mi? teorik olarak, bu korelasyonları yok etmeli ve H tahminini 0,5'e mümkün olduğunca yaklaştırmalıdır (bu, hesaplama yönteminin doğruluğunu kontrol etme meselesidir)

Kırılma karşıtı gelince, hatırladığım kadarıyla, döviz ana paralarının çoğu, 0'dan biraz daha az komşu getiri QC'sine sahiptir ve serinin genelleştirilmiş bir Brown hareketi olduğunu varsayarsak, o zaman C ~ 2^(H-1) ) - 1, yani H 0,5'ten küçük olmalıdır...

 

Lanet bir şey!!! Sadece saçmalık!

Şu anda verileri karıştırmak için çalışıyorum. İlk başta tam da bunu yaptım: Tüm RTS çubuklarını karıştırdım, karışık olanlar üzerinde testi yaptım ve sonuç olarak RS eğimini daha da fazla elde ettim! Ama bu olamaz. RS yalnızca dağılımın normal olmadığı gerçeğini gösteriyorsa, tahmin değişmemelidir: sonuçta, istatistiksel olarak her iki dağılım da aynıdır. RS karmaşık bağıntıları yakalarsa, veri karıştırma ile yok edilmelidir ve RS rastgele bir yürüyüşten ayrılamaz olmalıdır. Bunun yerine, üçüncü seçenek inatla düşüyor. Belki de mesele, farklı periyotlarda RTS çubuklarının tam boyut uyumsuzluğundadır. 2006 yılı oynaklıkları geçtiğimiz yıllara göre çok farklı. Sonuç olarak, son yılların ılımlı aralığına serpiştirilmiş 2006'nın büyük çubukları, aykırı değerlerin daha da büyük görünmesini sağlıyor. Algoritmam, teoride, bu tür olayları verimli bir şekilde işlemesi gerektiği şekilde yazılmıştır, ancak görünüşe göre, savunmayı ciddi şekilde kıran bir şey var.

Tamam, aşağıdakilere dayanarak, en olumsuz seçeneği hayal edelim: Algoritma sadece dağılımın anormal olduğu gerçeğini yakalar. Piyasa serisinde deterministik bir bileşen yoktur. Şu şekilde kontrol edelim: Eğer bir fiyat artışını bir artış takip ediyorsa (ve tam tersi, bir düşüşü bir düşüş takip ediyorsa), o zaman ne derse desin, grafik daha düzgün olacaktır. N çubukluk bir periyot için dönüş sayısı daha az olacaktır, bu da zag-zag satırlarının sayısının da daha az olacağı anlamına gelir. Bağımlılığı şu şekilde tanımlarız: çubuk sayısını zikzak çizgi sayısına böleriz, ZZ çizgisi başına ortalama çubuk sayısını elde ederiz. Bu durumda kat edilen mesafe önemli değildir, bu da dağılım türünün bir rol oynamaması gerektiği anlamına gelir. Çift logaritmik ölçekte benzer bir grafik oluşturuyoruz. Test edilmiş bir enstrüman olarak EURUSD'nin 1 milyon barlık son geçmişini alıp üzerinde test ediyoruz. Sonra aynı EURUSD hacimlerinde rastgele bir yürüyüş oluşturuyoruz. Normal dağıtılmayacaktır. Şimdi iki grafiği karşılaştırıyoruz, eğer aynılarsa, algoritma sadece dağıtım anormalliğini yakalar ve hiçbir şey için iyi değildir. Öyleyse bakalım:

Oppa-pa. En büyük korkularımız gerçek oldu. Her iki grafik de aynıdır. Her ikisi de Pareto dağıtılmış ve rastgele bir yürüyüşten ayırt edilemez, ancak biri gerçek bir piyasa, diğeri ise gerçek hacimlere dayalı basit bir üreticidir.

Son kontrol: Yine bu iki satırı alıp onlar için mesafeyi hesaplıyoruz. Gösterge yalnızca dağılımın normal olmamasına tepki veriyorsa, normal rastgele değişkenin aralığı kesinlikle 0,5'i göstermelidir, gerçek eurusd aralığı 0,5'ten yüksek olacaktır (dağılım normal olmadığı için), aralığı oluşturulan rastgele dağılım, yukarıdaki çizelgede görülebileceği gibi, gerçek eurusd'dan pratik olarak ayırt edilemez olacaktır. Test ediyoruz ve görüyoruz:

Kahretsin!!! Gördün mü!? Rastgele EURUSD, normal rastgele yürüyüşün sadece çok az üzerindedir. Eğim açısı neredeyse 0,5'e eşittir. Rastgele değişken beklendiği gibi değişmeden kaldı. Ancak EURUSD, aralığının ciddi bir şekilde hafife alındığını (!) gösteriyor! Aynı zamanda, eurusd'un Hurst üssü 0,53 kadardır, yani. para birimi trendde, ancak trendinin yalnızca en başlangıcını görüyoruz. Trendi ancak 70 gün sonra(!) yükselir ve bundan önce güçlü bir geri çekilme piyasasıdır. Bu, EURUSD'nin dev bir aksiyon ufkuna sahip olduğu anlamına gelir, biz sadece prologun en başlangıcını görüyoruz.

Görünüşe göre, tüm deterministik etkileri gizleyen dağılımın normal olmamasıdır. Aynı zamanda, ana anormallik, fiyat artışlarının (çubuklarının) kendisinde olduğu gibi garip oynaklıkta değil. Bu çok karmaşık ve derin bir mekanizmadır ve onunla rastgele çalışmak imkansızdır.

ps yanlış veri ve yöntemlerden dolayı yanlış sonuçlar çıksa da. x.z.