허스트 지수 - 페이지 33

 
Roman. :


모든 것이 얼마나 위대한지! :-)

그리고 이러한 연구는 어떻게든 이것 (보충됨)과 연관될 수 있거나 유사한 것(필터에 대한 자급자족)이 추세 평면 필터와 같은 트레이딩 올빼미 에 대한 동일한 간단한 연결에 대해 묘사될 수 있습니까?

다음은 iVAR 인디카 판독값을 사용하는 트렌드 올빼미의 신호 부분입니다.


이론적 연구가 확인되면 혼란스럽고 결정론적인 영향을 설명하는 전체 일련의 지표가 있습니다.

iVAR의 예측값은 매우 의심스럽습니다. 시각적으로 실제로 MA보다 거의 낫지 않으며 변동성이 분명히 있습니다. 엄밀히 말하면 "혼돈" 지표는 변동성이 아니라 프로세스 및 초기 조건의 결정론에 응답해야 하며 이는 동일한 것이 아닙니다. 저것들. 혼돈 지표는 가격이 변경되기 전에도 변경되기 시작해야 하는 경우가 많으며(변경 예측), 이는 iVAR의 경우가 아닙니다.

ps 편광 프랙탈 효율 지표를 사용하는 것이 좋습니다. 그는 훨씬 더 흥미로운 순간을 보여줍니다 (IMHO).

 
C-4 :


이론적 연구가 확인되면 혼란스럽고 결정론적인 영향을 설명하는 전체 일련의 지표가 있습니다.

iVAR의 예측값은 매우 의심스럽습니다. 시각적으로 실제로 MA보다 거의 낫지 않으며 변동성이 분명히 있습니다. 엄밀히 말하면 "혼돈" 지표는 변동성이 아니라 프로세스 및 초기 조건의 결정론에 응답해야 하며 이는 동일한 것이 아닙니다. 저것들. 혼돈 지표는 가격이 변경되기 전에도 변경되기 시작해야 하는 경우가 많으며(변경 예측), 이는 iVAR의 경우가 아닙니다.

ps 편광 프랙탈 효율 지표를 사용하는 것이 좋습니다. 그는 훨씬 더 흥미로운 순간을 보여줍니다 (IMHO).


C-4 감사합니다.

자세히 살펴 볼게요 ...

 

안녕하세요!

저는 현재 R/S 분석을 공부하고 그것을 구현하는 C# 프로그램을 작성하고 있습니다. 몇 가지 질문이 있습니다. 당신이 나를 도울 수 있기를 바랍니다

1. 그의 책에서 Peters는 원래 시계열 을 변환합니다.

) 1일차 가격과 2일차 가격차이가 Yt로 사용되나요?

b) 상수는 무엇이어야 하며, b는 무엇입니까?

2. 그리고 다시 책에서:

일련의 500개 값을 가정해 보겠습니다. 초기 n은 20을 지정합니다. 그런 다음 숫자 n을 늘리는 방법은???

미리 감사드립니다. 도움이 되셨으면 합니다.

 

b) 분명히 이것은 Peters의 두 번째 책을 말하며 시리즈의 AR 효과를 제거하는 것에 관한 것입니다. 이 경우 가장 좋은 솔루션은 각 계열에 대한 계수를 개별적으로 분석적으로 검색하는 것입니다. 그러나 이러한 변환을 사용한 적이 없으므로 이러한 계수를 찾는 방법을 정확히 말할 수는 없습니다. 그러나 이러한 변환에 큰 중요성을 부여하지 마십시오. 그 의미는 일련의 아치 유형에 대한 RS 추정치의 극도로 무의미한 과대 평가를 제거하는 것입니다(틀릴 수 있으며 매우 모호하게 기억합니다). 정규 분포 랜덤 워크로 시작하는 것이 좋습니다(이 방법을 사용하면 이 단계에서 정지).

a) 계열 차이보다 로그 반환값을 사용합니다. ln(Pi/Pi-1).

2) Peters의 경우 N은 각 실행에서 1씩 증가합니다: n++. 이 경우 독립 세그먼트의 수는 2개 이상이어야 합니다. 즉, 일련의 500개 값이 있는 경우 2로 나누면 N이 각각 20에서 250으로 변경됩니다. 이 경우 n이 나머지가 있는 급수를 포함할 때(예: n=33, 250/33 = 7.5757575) n이 정수 제수가 되는 막대 수를 취합니다( 예: n=33의 경우 막대 수). 그런 다음 먼저 세그먼트 1-231에 대한 rs를 계산한 다음 세그먼트 20-250에 대해 계산합니다. 두 세그먼트에 대한 산술 평균은 원하는 RS가 됩니다.

추신: 원칙적으로 C# 코드를 보내드릴 수 있습니다. 코드 자체는 쓸모가 없지만 이러한 모든 변환은 이미 수행되었습니다. Peters의 통계는 어떤 패턴도 보여주지 않으며 그의 책에 제시된 결과는 순수한 욕설입니다(결과는 현재 스레드의 24-26페이지 참조).

 

죄송합니다만 2)번의 내용을 잘 이해하지 못했습니다....코드를 버리기 어렵지 않다면....

추신: 결과를 살펴보았습니다... 지루하지 않게... 하지만 여전히... 이 알고리즘이 당신에게 허용되지 않는 이유는 무엇입니까?

 
나는 n을 1(n++) 증가시켰습니다... 하지만 n = 46이고 47의 마침표 수는 동일하다는 것이 밝혀졌습니다... 그리고 나는 일종의 계단식 그래프를 얻었습니다...
 
kexs1k :

죄송합니다만 2)에서 잘 이해가 되지 않았습니다.. 코드 버리기 어렵지 않다면....

1) 추신: 나는 결과를 보았고... 당신을 지루하게 하고 싶지 않습니다... 하지만 여전히... 이 알고리즘이 당신에게 허용되지 않는 이유는 무엇입니까?


kexs1k :
2) n을 1만큼 증가(n++)... 하지만 n = 46, 47에 대해 기간 수는 동일하고... 일종의 계단형 그래프가 얻어졌습니다...


1) 저에게 이 알고리즘은 작동하지 않기 때문에 사용할 수 없습니다!

2) 모든 미묘함을 설명하기는 어렵습니다. 코드를 보는 것이 더 낫습니다. 작습니다. 바로 여기에 가져옵니다.

#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
    }
}
그러나 WealthLab과 함께 작동하도록 설계되었기 때문에 직접 실행할 수 없습니다. 관련 라이브러리를 첨부합니다. 일정한 지속성으로 호출 방법을 알아낼 수 있습니다.
파일:
wld5lib.zip  268 kb
 

약속한 대로 흥미로운 연구를 발표합니다.

다음은 RTS 지수의 두 기간에 대한 연구입니다. 첫 번째 부분(녹색 선)은 2006년부터 2009년까지, 두 번째 부분은 2009년부터 2012년까지 테스트되었습니다. 2008년 이후 RTS가 근본적으로 바뀌었음을 알 수 있습니다. 가장 먼저 눈에 들어오는 것은 RTS가 훨씬 더 효율적이라는 것입니다. 곡선이 훨씬 무작위에 가까워졌습니다. 엔트로피와 불확실성의 정도가 증가했습니다. 그러나 순수한 랜덤 워크인 최대 엔트로피 정도에는 아직 도달하지 않았습니다. 그러나 현재 단계에서 알고리즘은 파레토 분포에 대한 판독값을 과대평가하는 경향이 있으며 실제로 현대 RTS의 결정론적 구성요소는 훨씬 더 적다는 것을 이해해야 합니다.

관심 있는 시간 범위는 3분에서 30분입니다(기간은 10 ^ N min입니다. 여기서 N은 0.5(10 ^ 0.5 \u003d 3분)에서 3.5(10 ^ 3.5 \u003d) 범위의 가로 좌표에 표시됩니다. 3162분 또는 52시간 또는 3.7일)). 이 범위에는 매우 작지만 통계적으로 뚜렷한 반추세 구성 요소가 있습니다. 아마도 실제로는 훨씬 더 많기 때문입니다. 우리는 파레토 분포를 과대평가했습니다. 2009년까지는 그렇지 않았습니다. 시장은 분석에 사용할 수 있는 모든 시간대에서 매우 유행했습니다. 그것은 무엇입니까? 아마도 우리는 2008년 위기 이전에는 그렇게 널리 대표되지 않았던 HFT 알고리즘의 효과를 보고 있을 것입니다. RTS의 스캘퍼가 오랫동안 작업하는 것이 거의 불가능해졌다고 말한 것은 아무 것도 아닙니다. 로봇은 일반적인 대형을 협상하는 것을 허용하지 않습니다.

두 세그먼트의 이러한 다른 결과는 통계 샘플의 절반으로 인해 발생했다고 가정할 수 있습니다. 그러나 총 데이터 양은 2006년부터 2012년까지 약 1,000,000분 막대로 커서 각 막대에 500,000개의 데이터 포인트를 제공합니다. 작은 기간의 경우 이는 수만 개의 하위 기간으로, 통계적 유의성의 감소가 극히 미미하고 결과의 분산을 제공할 수 없음을 의미합니다(곡선의 균일성에서 알 수 있음). 사실, 하나의 옵션이 더 남아 있습니다. 2006년부터 2009년까지 RTS 시장은 더 파레트적이고 꼬리가 있었습니다. 이제 시장은 더 유동적이며 정규 분포에 더 가깝습니다. 이것은 강력한 반론입니다. 이것이 제가 현재 그러한 분포의 영향을 부드럽게 하고 파레토 유형 랜덤 워크에 효과적으로 대응하기 위해 변동성을 추정하기 위해 열심히 노력하고 있는 이유입니다.

 
C-4 :


방법 자체에 관한 것입니다. 귀하의 방법이 Norm을 제공하는 경우. 랜덤은 정확히 0.5이고 통화는 0.47-0.48이므로 방법론을 심각하게 이해해야 합니다. 이론적으로 시장은 추세와 반대 추세로 나누어져서는 안 됩니다. Peters는 그가 연구한 모든 시장에서 H가 0.5 이상이었습니다.

행 데이터를 무작위로 섞으셨습니까? 이론적으로 이것은 상관 관계를 파괴하고 H의 추정치를 가능한 0.5에 가깝게 가져와야 합니다(이것은 계산 방법의 정확성을 확인하는 문제입니다)

안티렌딩에 관해서는 내가 기억하는 한 대부분의 주요 통화는 인접 수익의 QC가 0보다 약간 작으며 시리즈가 일반화된 브라운 운동이라고 가정하면 C ~ 2^(H-1 ) - 1, 즉 H는 0.5보다 작아야 합니다 ...

 

젠장!!! 그냥 말도 안돼!

지금은 데이터 믹싱 작업을 하고 있습니다. 처음에는 그렇게 했습니다. 모든 RTS 막대를 혼합하고 혼합 막대에 대해 테스트를 실행한 결과 RS 기울기가 훨씬 더 높아졌습니다! 그러나 이것은 있을 수 없습니다. RS가 분포가 정규적이지 않다는 사실만 표시하는 경우 추정치는 변경되지 않아야 합니다. 결국 통계적으로 두 분포는 동일합니다. RS가 복잡한 상관 관계를 포착하면 데이터 혼합에 의해 파괴되어야 하며 RS는 랜덤 워크와 분리될 수 없어야 합니다. 대신 세 번째 옵션은 완고하게 빠져 있습니다. 아마도 문제는 다른 기간에 대한 RTS 막대의 완전한 치수 비호환성에 있습니다. 2006년의 변동성은 최근 몇 년과 너무 다릅니다. 결과적으로 2006년의 큰 막대는 최근 몇 년의 중간 범위에 산재되어 있어 이상값이 훨씬 더 큰 것처럼 보입니다. 내 알고리즘은 이론적으로 이러한 발생을 효율적으로 처리해야 하지만 여전히 방어를 심각하게 뚫고 나가는 방식으로 작성되었습니다.

좋습니다. 다음을 기반으로 가장 부정적인 옵션을 상상해 보겠습니다. 알고리즘은 분포가 비정상적이라는 사실만 포착합니다. 시장 시리즈에는 결정적 요소가 없습니다. 다음과 같이 확인해 보겠습니다. 가격 인상 후에 인상이 뒤따를 가능성이 더 높으면(그 반대의 경우도 마찬가지입니다. 하락 후에는 하락이 뒤따름) 어떤 말을 해도 차트는 더 부드러워집니다. N개의 막대 기간 동안의 수익률이 더 적을 것이며, 이는 지그재그 라인의 수도 더 적을 것임을 의미합니다. 종속성을 다음과 같이 설명합니다. 막대 수를 지그재그 선 수로 나누고 ZZ 선당 평균 막대 수를 얻습니다. 이 경우 이동 거리는 중요하지 않습니다. 즉, 분포 유형이 역할을 해서는 안 됩니다. 이중 로그 척도에서 유사한 그래프를 작성합니다. 테스트된 도구로서 우리는 100만 막대의 지속 시간을 가진 EURUSD의 마지막 기록을 가져와 테스트합니다. 그런 다음 동일한 EURUSD 거래량에 대해 랜덤 워크를 생성합니다. 정상적으로 배포되지 않습니다. 이제 우리는 두 그래프를 비교합니다. 만약 그들이 동일하다면 알고리즘은 분포 이상만을 포착하고 아무 것도 좋지 않습니다. 살펴보겠습니다.

오빠. 우리의 최악의 두려움이 현실이 되었습니다. 두 그래프는 동일합니다. 둘 다 파레토 분포이며 랜덤 워크와 구별할 수 없지만 하나는 실제 시장이고 다른 하나는 실제 볼륨을 기반으로 하는 단순 생성기입니다.

마지막 확인: 다시 이 두 행을 가져와서 거리를 계산합니다. 지표가 분포의 비정규성에 대해서만 반응하는 경우 정규 확률 변수의 범위는 엄격하게 0.5를 보여야 하며 실제 유로화의 범위는 0.5보다 높을 것입니다(분포가 정규성이 아니기 때문에). 생성된 무작위 분포는 위의 차트에서 볼 수 있듯이 실제 유로화와 거의 구별할 수 없습니다. 우리는 테스트하고 확인합니다:

못쓰게 만들다!!! 봤어!? 랜덤 EURUSD는 일반 랜덤 워크보다 약간 높습니다. 기울기 각도는 거의 0.5입니다. 확률 변수는 예상대로 변경되지 않았습니다. 그러나 EURUSD는 범위를 심각하게 과소평가(!)하고 있습니다! 동시에 eurusd의 Hurst 지수는 0.53입니다. 통화는 추세이지만 우리는 추세의 시작 부분만을 볼 수 있습니다. 그 추세는 70일(!)이 지나야 강세를 보이고, 그 전에는 강한 철수 시장입니다. 이것은 EURUSD가 거대한 행동 지평선을 가지고 있다는 것을 의미하며, 우리는 프롤로그의 맨 처음만 볼 수 있습니다.

분명히 모든 결정론적 효과를 숨기는 것은 분포의 비정규성입니다. 동시에, 주요 이상은 이상한 변동성보다는 가격 증분(막대) 자체에 있습니다. 이것은 매우 복잡하고 심오한 메커니즘이며 무작위로 작업하는 것은 불가능합니다.

추신 잘못된 데이터와 방법으로 인해 모두 잘못된 결론일 수 있지만. x.z.