Elliot Dalga Teorisine dayalı ticaret stratejisi - sayfa 58

 
Hayatta ilk bakışta ya önemli görünen ya da tam tersi önemsiz görünen birçok şey vardır. Bu, Avals'a göre ilk önce kanıtlanması gereken ilkel bir Uzman Danışmanın sonuçlarıyla aynıdır, ancak içerdiği fikir sezgisel olarak doğrudur. Ama onu çürütmeye çalışmaktansa gerçek hayatta test etmek benim için daha kolaydı. Yıl sonuna kadar sürerse - muhtemelen test cihazında test etmeye başlayacağım :)


Özet:
Para Yatırma/Çekme: 5 000.00 Kredi İmkanı: 0.00
Kapalı İşlem P/L: 1.186.63 Değişken P/L: 560.29 Marj: 961.62
Bakiye: 6 186.63 Özkaynak: 6 746.92 Serbest Marj: 5 785.30

Brüt Kar: 3 669,45 Brüt Zarar: 2 482.82 Toplam Net Kar: 1 186.63
Kar Faktörü: 1,48 Beklenen Kazanç: 23,27
Mutlak Düşüş: 143.75 Maksimum Düşüş (%): 858.39 (%13.20)

Toplam İşlemler: 51 Kısa Pozisyon (kazanılan %): 26 (%42.31) Uzun Pozisyonlar (kazanılan %): 25 (%56.00)
Kârlı İşlemler (% toplam): 25 (% 49.02) Zararlı işlemler (% toplam): 26 (% 50.98)
En büyük kârlı ticaret: 540.94 zararlı ticaret: -292.62
Ortalama kâr ticareti: 146,78 zarar ticareti: -95,49
Maksimum ardışık kazanç ($): 6 (1.099.13) ardışık kayıp ($): 4 (-744.95)
Maksimum ardışık kar (sayı): 1 099.13 (6) ardışık zarar (sayı): -744.95 (4)
Ortalama ardışık kazanç: 2 ardışık kayıp: 2
 
Piyasaya giriş koşullarını kolaylaştırmak için Expert Advisor'da biraz değişiklik yaptım ve değişken bir lot ekledim.
Sonuçlar burada https://c.mql5.com/mql4/forum/2006/06/new_results.zip
Parti büyüklüğü 5 ila 80 dolar arasında değişiyordu.
Giriş/çıkış algoritması EURUSD'ye bakılarak keskinleştirildi ve buna bağlı olarak Expert Advisor 3 yıllık geçmişinde gözle görülür bir sonuç gösterdi. Büyük hesaplamalar nedeniyle, sistemin öngörülebilir sürede bir tahminini elde etmek için, kanalların hesaplandığı örneği sadece 300 bar boyutunda sınırlandırdım. Yani zaman içinde 12,5 işlem günüdür. Aslında giriş noktasının güvenilirliğini artırmak için çok daha uzun örnekleri saymanız gerekir. Varsayımımın deneysel bir kanıtını elde etmek için EA'yı tekrar örnek bir uzunlukla çalıştıracağım, ancak bu belirli bir hesaplama süresi gerektirecektir. Dosyada sunulan sonucu aldıktan sonra, Uzman Danışmanın GBPUSD ve USDCAD çiftlerinde EURUSD üzerinde keskinleştirildiği AYNI PARAMETRELERLE (sondaki durdurma parametresi bile dahil!) EURUSD üzerinde Expert Advisor'ı çalıştırdım. Doğal olarak diğer 2 çiftte gözle görülür bir sonuç elde etmek mümkün olmadı ama elde edilen sonucun yine de olumlu bir yanlılık taşıdığını düşünüyorum. Bu nedenle, 2 sonuç çıkarabilirim. Birincisi, Vladislav tarafından önerilen sistemin dikkatli teknik uygulama ile pekala karlı olabileceğidir. İkincisi, farklı döviz çiftleri için, uzmanın parametrelerini seçmelisiniz, ancak Vladislav'ın tüm döviz çiftlerinde düzeltme yapmadan çalışan evrensel işaretler bulması mümkün olsa da. Bu 3 döviz çiftini karşılaştırırsanız, aşağıdaki farklılıkları bulabilirsiniz. USDCAD çifti, EURUSD'ye kıyasla daha sık hızlı hareketlere sahiptir. Yani, EURUSD için örneğin 1.5 rakamı geçmek 3 saat sürerse, USDCAD için bu bazen bir saatte olabilir ve bu nedenle en azından H1 döneminde ciddi bir gecikme sorunu vardır. elde edilmiştir. Genel olarak, bu yönde araştırmalara devam edeceğim. Şimdi asıl görev olarak kabul ettiğim makul yukarı çekme durur. Ticaret yaparken onları ne zaman ve ne kadar yukarı çekeceğiniz. Standart takip eden durdurmanın fazla bir şey almanıza izin vermediği açık olduğundan. Daha fazla anlayacağız.
 
İyi günler Solandr !

Hangi koşulları yumuşattınız söyler misiniz?
 
Hangi koşulları yumuşattığınızı söyler misiniz?

Hesaplama için örnek boyutu ve Murrey seviyeleri göstergesinin hesaplama süresi azaltıldı . Kısa bir örneğiniz varsa, giriş noktasını karşılayan daha fazla yerel inişler ve çıkışlar vardır. Ayrıca, Murrey seviyeleri daha kısa bir süre için hesaplanırsa, birbirlerine daha yakın konumlanırlar ve bu da piyasaya girme olasılığını artırır. Önceki dosyadaki 31 işlemi ve yeni dosyadaki 80 işlemi karşılaştırın. Giriş koşullarının kolaylaşması sonucunda işlem sayısı artmış, ancak kalitesi de buna bağlı olarak düşmüştür. Bununla birlikte, Vladislav'ınki gibi değişken bir parti büyüklüğünün tanıtılması, aynı miktarda risk için aynı zaman diliminde önceki dosyadan elde edilen sonucun üzerinde performans göstermeyi başardı.
 
Expert Advisor'ın yeni test sonuçları yayınlandı https://c.mql5.com/mql4/forum/2006/06/new_results2.zip
Sonuçlar, kanalların arandığı farklı örnek uzunluklarına sahip EURUSD çifti üzerinde elde edilen verileri içerir. H1 periyodunda 300 ve 1000 bar uzunluklarında yarıştım. Beklendiği gibi, daha uzun bir örnek, EA test raporunun performansını iyileştirdi. Gerçek çok önemli değil. Numune uzunluğunu 3 kattan fazla artırmak, nihai kârda sadece %4'lük bir artışa yol açtı. Beklendiği gibi, daha uzun bir örneklemde daha az anlaşma vardı (%19), ancak karlılıktaki %14'lük artışın kanıtladığı gibi, anlaşmaların kalitesi arttı. Sonuç olarak, kârlılık göstergesindeki artışla işlem sayısındaki azalma, nihai kârda yine de hafif bir artış sağladı.

Belirtilen dosya ayrıca, H1 döneminde 300 barlık bir örnek üzerinde USDCHF ve USDJPY döviz çiftlerinde EURUSD için uyarlanmış bir Uzman Danışman çalıştırmanın sonuçlarını da içerir. USDCHF döviz çiftinde, sonucun açık bir pozitif önyargısı var. Ve USDJPY çiftinde, sonuç tüm test süresi boyunca sıfır civarında dolaştığını gösterdi. Aynı zamanda, tamamlanan işlemlerin sayısının, aynı dönem için diğer döviz çiftlerinde test edildiğinde olduğundan yaklaşık 3 kat daha az olduğu ortaya çıktı. Buna dayanarak, USDJPY çiftinin doğasının daha önce test edilmiş olan çiftlerden önemli bir farkı olduğu sonucuna varabilirim. Buna göre, sahip olduğum stratejinin versiyonu USDJPY paritesi üzerinde çalışabilirse, bunun için biraz çaba sarf etmek gerekecek ve bu parite için piyasaya giriş / çıkış algoritmasını revize etmek mümkün olacak.
Bu arada, bir nedenden dolayı, Vladislav demodaki tüm çiftlerde işlem yapmıyor (prensipte teknik zorluklar olmamasına veya tamamen çözülebilir olmasına rağmen), ancak yalnızca 3 çift üzerinde işlem görüyor - EURUSD, USDCHF, GBPUSD. Ve bence belki de bu sadece böyle değil, ama bunun için bir nedeni vardı.
 
Merhaba ! Görünüşe göre MTSinka ile işim bitti;) - birkaç gündür işaretleniyor, önemli bir hata gözlemlenmedi, bu yüzden testin ikinci aşamasına geçeceğim: Pazartesi günü söylediğim gibi, doğrudan erişimi kapatacağım Işıklardaki hesap - bu, İmparatorluğa akan hesaptır. Belki sadece yatırımcı şifresini değiştiririm veya belki de izlemeyi tamamen bırakırım - bilgisayarı boş yere sürmeye gerek yok: Gerçek teste geçiyorum. Bundan sonra ne olacak - göreceğiz.
Umarım birçoğu pratik uygulamalarda ilerlemiştir?

İyi şanslar ve geçen trendler.
 
İyi günler Vladislav !

Bu konuya geri dönmene sevindim.
Siz konunun içinde değilken, birkaç konu aktif olarak tartışıldı:

1.
Jhonny 16.06.06 16:48

Vladislav, birkaç soruya cevap verebilir misin ....
1) Kanal seçim kriterlerinin önem düzeyi sizin için aynıdır (yani, bu kriterlerin en uygun kombinasyonunu bulursunuz) veya daha önemli kriterlerden daha az önemli olanlara sıralı bir seçim vardır.
2) Akıllı kitaplar okuduktan sonra ne bulacağımı unuttum :). Potansiyel enerji fonksiyoneli kavramıyla ne demek istediğinizi doğru anladıysam, o zaman onu neden aradığımız açık değil, çünkü arama sonucu yörüngenin bir denklemi (bir değer değil, bir fonksiyon!) olacaktır. potansiyel enerjideki değişimin (hareket sürecinde, ancak son noktaya ulaştığında değil!) minimum olacağı hareket ve anladığım kadarıyla, fiyat bu yörünge boyunca hareket ediyor ve denklemi zaten seçtik bu yörüngeye yaklaşmaya karar verdiğimiz (bu regresyon denklemidir), yani bu yörüngeye ne kadar iyi yaklaştığımız sonucuna varabiliriz. Ama yine de onu ararsanız, o zaman teoride sadece ikinci dereceden bir fonksiyon olacaktır ve şimdi Ax ^ 2 + Bx + C denklemindeki B ve C katsayıları regresyondaki katsayılara eşit (veya çok yakın) ise denklem, o zaman bu muhtemelen ihtiyaç duyulan kanal , zaten belirsiz şüphelerle parçalara ayrılmış olsam da :)


2. Kanal dağıtımı hakkında soru...

Vladislav 13.03.06 21:38

.... Ayrıca, herhangi bir yakınsak dağılımın artan serbestlik dereceleriyle normal bir dağılıma yakınsadığını söyleyen bir merkezi limit teoremi vardır (bu nedenle, yakınsadığı sürece, içinde ne olduğu bizim için gerçekten önemli değildir; )...

Bu ifadeyi kanaldaki dağılımı normal kabul edelim ve normal dağılım fonksiyonunu kullanarak güven aralıklarını hesaplayalım diye anladım. Ancak mantıksal olarak haklı başka görüşler de vardı ...


solandr 18.06.06 08:42

Dürüst olmak gerekirse, beni ilgilendiren sadece farklı N değerleri arasındaki fark. Öğrencinin dağılımı, niteliksel olarak aynı kalırken, niceliksel parametrelerini farklı serbestlik derecelerinde değiştirir. Çok sayıda serbestlik derecesi ile normal dağılımla örtüşmelidir. Az sayıda serbestlik derecesi ile normalden farklıdır.
Farklı serbestlik dereceleri için öğrenci dağılımı:
%99 olasılık için:
q(30 bar)=2.750
q(100 bar)=2.626
q(300 bar)=2.593
q(1000 bar)=2.581
30 bar ve 1000 bar için kantil değer arasındaki %6'lık farkın ekstra acıya değmeyeceğini düşünüyorsanız, bu sizin kişisel seçiminizdir. Ben biraz farklı bir görüşteyim.


3. Hurst katsayısı hakkında bir soru daha


17.06.06 16:49

... genel olarak, Hurst'e göre, örnekleri yaklaşık 80'den az olan kanallar için gösterge > 1'dir, yani bir yerde bir hata var...

Ancak http://www.xaoc.ru/index.php?option=com_forum&Itemid=0&page=viewtopic&p=2380 sayfasında bununla ilgili şu ifade var:
sadece doğrusal bir yaklaşımla göstergeyi bulurken, bir hata oluşur, bunun 1 olduğunu düşünün

Bu ifade doğru kabul edilebilir mi yoksa büyük olasılıkla algoritmamda bir hata mı var?

Not : Umarım bu sorularla sizi çok fazla rahatsız etmiyorum ve sizden haber almak için sabırsızlanıyorum.
 
İyi günler Vladislav !

Bu konuya geri dönmene sevindim.
Siz konunun içinde değilken, birkaç konu aktif olarak tartışıldı:

1.
Jhonny 16.06.06 16:48

Vladislav, birkaç soruya cevap verebilir misin ....
1) Kanal seçim kriterlerinin önem düzeyi sizin için aynıdır (yani, bu kriterlerin en uygun kombinasyonunu bulursunuz) veya daha önemli kriterlerden daha az önemli olanlara sıralı bir seçim vardır.

Hayır, aynı değil - her birinin kendi ağırlık faktörü vardır.

2) Akıllı kitaplar okuduktan sonra ne bulacağımı unuttum :). Potansiyel enerji fonksiyoneli kavramıyla ne demek istediğinizi doğru anladıysam, o zaman onu neden aradığımız açık değil, çünkü arama sonucu yörüngenin bir denklemi (bir değer değil, bir fonksiyon!) olacaktır. potansiyel enerjideki değişimin (hareket sürecinde, ancak son noktaya ulaştığında değil!) minimum olacağı hareket ve anladığım kadarıyla, fiyat bu yörünge boyunca hareket ediyor ve denklemi zaten seçtik bu yörüngeye yaklaşmaya karar verdiğimiz (bu regresyon denklemidir), yani bu yörüngeye ne kadar iyi yaklaştığımız sonucuna varabiliriz. Ama yine de onu ararsanız, o zaman teoride sadece ikinci dereceden bir fonksiyon olacaktır ve şimdi Ax ^ 2 + Bx + C denklemindeki B ve C katsayıları regresyondaki katsayılara eşit (veya çok yakın) ise denklem, o zaman bu muhtemelen ihtiyaç duyulan kanal , zaten belirsiz şüphelerle parçalara ayrılmış olsam da :)


Bu konuda zaten defalarca yazdım. Bir regresyon kanalı oluşturmak için bir örnek ararken, bu örneğin belirli bir zamanda birden fazla şekilde oluşturulabileceğini göreceksiniz. Öyle ya da böyle bir seçim yapılmalı. Bu kriteri ana kriter olarak seçtim - gerekçe yukarıda şubede belirtildi. Algoritma basit: inşa ediyoruz, kontrol ediyoruz, aşırı olanı seçiyoruz.

2. Kanal dağıtımı hakkında soru...

Vladislav 13.03.06 21:38

.... Ayrıca, herhangi bir yakınsak dağılımın artan serbestlik dereceleriyle normal bir dağılıma yakınsadığını söyleyen bir merkezi limit teoremi vardır (bu nedenle, yakınsadığı sürece, içinde ne olduğu bizim için gerçekten önemli değildir; )...

Bu ifadeyi kanaldaki dağılımı normal kabul edelim ve normal dağılım fonksiyonunu kullanarak güven aralıklarını hesaplayalım diye anladım. Ancak mantıksal olarak haklı başka görüşler de vardı ...


Hayır - en kötü yakınsak olan kabul edilir :) (artan serbestlik dereceleriyle normale de yakınsar). Bunun hakkında yazdım ve solandr doğru anladı.

solandr 18.06.06 08:42

Dürüst olmak gerekirse, beni ilgilendiren sadece farklı N değerleri arasındaki fark. Öğrencinin dağılımı, niteliksel olarak aynı kalırken, niceliksel parametrelerini farklı serbestlik derecelerinde değiştirir. Çok sayıda serbestlik derecesi ile normal dağılımla örtüşmelidir. Az sayıda serbestlik derecesi ile normalden farklıdır.
Farklı serbestlik dereceleri için öğrenci dağılımı:
%99 olasılık için:
q(30 bar)=2.750
q(100 bar)=2.626
q(300 bar)=2.593
q(1000 bar)=2.581
30 bar ve 1000 bar için kantil değer arasındaki %6'lık farkın ekstra acıya değmeyeceğini düşünüyorsanız, bu sizin kişisel seçiminizdir. Ben biraz farklı bir görüşteyim.



3. Hurst katsayısı hakkında bir soru daha


17.06.06 16:49

... genel olarak, Hurst'e göre, örnekleri yaklaşık 80'den az olan kanallar için gösterge > 1'dir, yani bir yerde bir hata var ...

Ancak http://www.xaoc.ru/index.php?option=com_forum&Itemid=0&page=viewtopic&p=2380 sayfasında bununla ilgili şu ifade var:
sadece doğrusal bir yaklaşımla göstergeyi bulurken, bir hata oluşur, bunun 1 olduğunu düşünün

Bu ifade doğru kabul edilebilir mi yoksa büyük olasılıkla algoritmamda bir hata mı var?

Not : Umarım bu sorularla sizi çok fazla rahatsız etmiyorum ve sizden haber almak için sabırsızlanıyorum.



Tabii ki, hesaplamalarda hatalar var. Ana kriter, 0,5'in üzerindeki / altındaki değerdir (bu, kaydırma parametresine göre sırasıyla sıfıra veya bire kaydırırsanız, 0,5 faktörlü formülün versiyonundadır). Algoritmanızdaki hatayla ilgili olarak - ve olabilir;). Senden başka kim kontrol edebilir?

İyi şanslar ve geçen trendler.
 
Teşekkürler Vladislav . Affedersiniz ve şimdiden çok küstah olmaya başladım...
Ama benim için işlevsellik sorusu en azından açık kaldı. Bu alanda kendim bir şeyler icat edeceğim :). Tekrar teşekkürler!
 
Bu şubeye uzun süre gittim, ama sonra hala en ilginç şeylerin başladığı dördüncü bir konu yoktu. Tüm katılımcılara teşekkürler, kendim için çok ilginç şeyler öğrendim. Ama dedikleri gibi, çok bilgi - çok şey sorun olacak bir şey değil, daha çok sorular.

Hurst üssünün hesaplanmasıyla ilgili ek materyalleri okuduktan sonra Feder'in araştırmasıyla karşılaştım. Deneysel yasanın - H=Log(R/S)/Log(0.5*N) oldukça kötü çalıştığını ve yalnızca küçük örnekler için nispeten doğru veriler verdiğini savundu (bu örneklerin boyutu hakkında hiçbir şey söylenmedi). Bu nedenle, Hurst üssünün hesaplamasını kesinlikle metodolojik materyallere göre uygulamaya karar verdim (görünüşe göre Bay Feder'in uyardığından bile daha kötü çıktı).

Kodun performans açısından en uygun olmayabileceğini anlıyorum (birçok işlev çağrısı ve tüm bunlar), ancak asıl şey farklı - hesaplama mantığını doğru bir şekilde temsil edip etmediğimi kendime açıklığa kavuşturmak istiyorum, çünkü aldığım sonuçlar şüpheli geldi ve bilenlere yönelmeye karar verdim.

Hesaplamalarıma sadece eğitim kılavuzlarındaki formüllerden başladım, başka bir şey değil.

Uygulama, bir komut dosyası şeklinde oldukça basittir. Aşağıda açıklaması eklenmiş olan toplam sekiz fonksiyon vardır, ayrıca kaynak kodunda yorumlar vardır. Aşağıdaki gibi uygulanan bir fonksiyondan hesaplanmış verilerle bir dizi alma. Double out[] dizisi her fonksiyona iletilir, bu dizi fonksiyon gövdesinde başlatılır ve fonksiyonun amacına bağlı olarak hesaplanan veri diziye yazılır.

void GetVn(double out[], int N, int i)
"Giriş" oluşturma - v[]. Giriş olarak, kapanış fiyatını alıyorum. Sonuç, out[] dizisine yazılır

void SetArrayMv(double v[], double out[], int N)
Tüm gözlemler için ortalama girişi - mv[] hesaplarım. Giriş, fonksiyona iletilir ve gözlem sayısı N'dir.

void SetArrayDv(double v[], double out[], double mv[], int N)
Birikmiş giriş sapmasını hesaplarım - dv[]. "Giriş", "ortalama giriş" dizilerini ve gözlem sayısını iletirim

void SetArrayR(double dv[], int N, double out[])
- r[] aralığını hesaplıyorum. Akışı ve gözlem sayısını işleve iletirim.

void SetArrayS(double v[], double mv[], double out[], int N)
Standart sapmayı s[] hesaplıyorum. "Giriş", "ortalama giriş" ve gözlem sayısını geçiyorum

void SetArrayRS(double r[], double s[], double out[], int N)
Normal aralığı hesaplayın. R/S değerlerini rs[] dizisine yazıyorum. "Aralık", "standart sapma" işlevlerini ve gözlem sayısını geçiyorum

void LogN(çift çıkış[], int N)
N'nin logaritmasının bir dizisini hesaplar

void GetLine(double x[],double y[], int N)
Yaklaşık düz çizginin katsayılarını hesaplarım.

//+------------------------------------------------------------------+
//|                                                        HERST.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "grasn@rambler.ru"

int start()
{
   int i=0;
   int N=100;

   double v[];                         // Приток
   
   double mv[];                        // Средний приток
   double dv[];                        // Накопившееся отклонение
   
   double r[];                         // Размах
   double s[];                         // Стандартное отклонение
   
   double rs[];                        // Нормированный размах
   double logN[];                      // логарифм от N
   
   GetVn(v, N, i);
   SetArrayMv(v, mv, N);
   SetArrayDv(v, dv, mv, N);

   SetArrayR(dv, N, r);
   SetArrayS(v, mv, s, N);
   SetArrayRS(r, s, rs, N);
   
   LogN(logN, N);
            
   GetLine(logN, rs, N);
   
   return(0);
}

// Приток
// ________________________________________________________________________________________
// "Приток".....................................................................double out[]
// Длина выборки......................................................................int N
// номер бара с которого выполняется выборка..........................................int i

void GetVn(double out[], int N, int i)
{
   int n;
   int k;      

   double x[];

   ArrayResize(x, N);
   ArrayInitialize(x, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);

   k=i+N-1;
      
   for(n=0; n<=N-1; n++)
   {
      x[n]=Close[k];
      k=k-1;
   }

   ArrayCopy(out, x, 0, 0, WHOLE_ARRAY);
      
   return(0);
}

// Средний приток 
// ________________________________________________________________________________________
// Приток ........................................................................double v[]
// Средний приток ..............................................................double out[]
// Число наблюдений...................................................................int N

void SetArrayMv(double v[], double out[], int N)
{
   int n;
   int i;
   
   double SUM;
   double mv[];

   ArrayResize(mv, N);
   ArrayInitialize(mv, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);
      
   for(n=0; n<=N-1; n++)
   {
      SUM=0.0;   
      
      for(i=0; i<=n; i++)
      {
         SUM=SUM+v[i];
      }
      
      mv[n]=(1.0/(n+1))*SUM;
   }
   
   ArrayCopy(out, mv, 0, 0, WHOLE_ARRAY);
 
   return(0);
}

// Накопившееся отклонение притока от среднего
// ________________________________________________________________________________________
// Приток ........................................................................double v[]
// Накопившееся отклонение притока..............................................double out[]
// Средний приток................................................................double mv[]
// Число наблюдений...................................................................int N

void SetArrayDv(double v[], double out[], double mv[], int N)
{
   int n;
   int i;
   
   double dv[];
   double SUM;

   ArrayResize(dv, N);
   ArrayInitialize(dv, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);

   for(n=0; n<=N-1; n++)
   {
      SUM=0.0;
      
      for(i=0; i<=n; i++)
      {
         SUM=SUM+(v[i]-mv[i]);
      }
      
      dv[n]=SUM;
   }
   
   ArrayCopy(out, dv, 0, 0, WHOLE_ARRAY);
      
   return(0);   
}

// Размах
// ________________________________________________________________________________________
// Накопившееся отклонение притока от среднего...................................double dv[]
// Размах.......................................................................double out[]
// Число наблюдений...................................................................int N

void SetArrayR(double dv[], int N, double out[])
{
   int n;
   
   int idMax;
   int idMin;
   
   double rn[];
      
   double max;
   double min;

   ArrayResize(rn, N);
   ArrayInitialize(rn, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);   

   for(n=1; n<=N; n++)
   {
      idMax=ArrayMaximum(dv, n, 0);
      idMin=ArrayMinimum(dv, n, 0);
      
      max=dv[idMax];
      min=dv[idMin];
      
      rn[n]=MathAbs(max-min);
   }
   
   ArrayCopy(out, rn, 0, 0, WHOLE_ARRAY);
   
   return(0);
}

// Стандартное отклонение
// ________________________________________________________________________________________
// Приток.........................................................................double v[]
// Среднее приток................................................................double mv[]
// Стандартное отклонение.......................................................double out[]
// Число наблюдений...................................................................int N

void SetArrayS(double v[], double mv[], double out[], int N)
{
   int n;
   int i;
   
   double sn[];
   double SUM;

   ArrayResize(sn, N);
   ArrayInitialize(sn, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);   
   
   for(n=0; n<=N-1; n++)
   {
      SUM=0.0;
      
      for(i=0; i<=n; i++)
      {
         SUM=SUM+MathPow((v[i]-mv[i]), 2);
      }
     
      sn[n]=MathSqrt((1.0/(n+1))*SUM);
   }
   
   ArrayCopy(out, sn, 0, 0, WHOLE_ARRAY);
   
   return(0);
}

// Нормированный размах
// ________________________________________________________________________________________
// Размах.........................................................................double r[]
// Стандартное отклонение.........................................................double s[]
// Нормированный размах.........................................................double out[]
// Число наблюдений...................................................................int N
void SetArrayRS(double r[], double s[], double out[], int N)
{
   int n;
   
   double rs[];

   ArrayResize(rs, N);
   ArrayInitialize(rs, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);  
      
   for(n=3; n<=N-1; n++)
   {  
      if(s[n]==0)
      {
         rs[n]=0.0;
      }
      else 
      {
         rs[n]=MathLog(r[n]/s[n]);
//         Print("rs ", rs[n]);
      }
   }
   
   ArrayCopy(out, rs, 0, 0, WHOLE_ARRAY);
   
   return(0);
}

// Логарифм N
// ________________________________________________________________________________________
// Логарифм N...................................................................double out[]
// Число наблюдений...................................................................int N
void LogN(double out[], int N)
{
   int n;
      
   double logN[];
   
   ArrayResize(logN, N);
   ArrayInitialize(logN, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);   
   
   for(n=3; n<=N-1; n++)
   {
      logN[n]=MathLog(n);
//      Print("n ", logN[n]);
   }
   
   ArrayCopy(out, logN, 0, 0, WHOLE_ARRAY);
   
   return(0);   
}

// Расчет коэффициентов аппроксимирующей линии
// ______________________________________________________________
// log(R/S).......................................................................double x[]
// log(N)................................................................................y[]
// Число наблюдений...................................................................int N
void GetLine(double x[],double y[], int N)
{
   double m=0;
   double b=0;
   double tan = 0;
      
   int size=N;
   double sum_x=0.0;
   double sum_y=0.0;
   double sum_xy=0.0;
   double sum_xx=0.0;
      
   for (int i=3; i<size; i++)
   {
      sum_x=sum_x+x[i];
      sum_y=sum_y+y[i];
      sum_xy=sum_xy+(x[i]*y[i]);
      sum_xx=sum_xx+(x[i]*x[i]);
   }

   m = (size*sum_xy - sum_x*sum_y) / (size*sum_xx - sum_x*sum_x);
   b = sum_y/size - m * sum_x / size;

           
   Print("Аппроксимирующая прямая: y(x)=", m, "x+", b);
   Print("Показатель Херста= ", m);
   
   return(0);
}



Rastgele bir seri ve günlük EURUSD fiyatları için logaritmik koordinatlar log(R/S) ve log(N) olarak grafikler sunuyorum
Aşağıdaki parametrelerle MathRand() işlevi kullanılarak oluşturulan rastgele seriler.
N=100
Sonuç:
H=0.5454
Y(x)=0.5454x+0.2653

N arttıkça Hurst üssü 0,5'e yaklaşır


EURUSD D1 hesaplaması aşağıdaki parametrelerle yapılmıştır:
i=0 (27.06'dan itibaren)
N=100

Hesaplama sonuçları:
H=1.0107 (ve neden bu kadar büyük?)
y(x)=1.0197x-0.5885



Birkaç soru var:
1. Giriş için ne alınmalı? Tam fiyat, modülo farkı, sadece pozitif fark mı? Başka bir deyişle, söz konusu yöntemdeki "giriş" kavramının verilerin ön hazırlığı üzerinde bir etkisi var mı? Veya araştırılacak verileri almak için akışı takip eder. Örneğin sezgisel olarak hesaplamalarda kapanış fiyatını aldım.

2. Aralığın değerleri ve özellikle standart sapma sıfıra eşitse normalleştirilmiş aralık nasıl belirlenir. Bu, küçük dizi dizinleri için neredeyse her zaman mevcuttur. Sıfırların algılanması durumunda, normalleştirilmiş aralığa yine sıfır atarım. Doğru mu? Şimdilik, ilk değerleri hesaplamayı reddedin.

3. Ben de sonuçları beğenmiyorum. EURUSD için birkaç hesaplama seçeneği örneği vereceğim:

Tüm çubuklarda içeri akış (Kapat[] D1) Hurst üssü 0.9069
Giriş (Kapat[] D1) i=0, N=200 Hurst üssü 0.8264

Rakamlar acı verici derecede iyimser ve ayrıca veriler Vladislava'nın verileriyle uyuşmuyor (tüm seri için 0,64), ancak çok küçük değerler de var. Tüm çubuklardaki fiyat farkı için Hurst üssü 0,5119'un değerlerini alıyorum

4. Ortalama girişi doğru hesaplıyor muyum? Tüm yinelemeler için bir değer mi yoksa mevcut N'ye bağlı olarak değişmeli mi?

5. Her şeyi karıştırmış olma ihtimalim var ve gösterge tamamen farklı hesaplanıyor. Lütfen nerede yanlış yaptığımı açıklayın :o(

Not: Umarım forum üyeleri bunu çözmeme yardımcı olur. Vladislav bana biraz zaman verir ve bu kadar basit bir teknikle nerede yanıldığımı açıklarsa çok minnettar olurum.

Neden: