Elliot Dalga Teorisine dayalı ticaret stratejisi - sayfa 10

 
Genel olarak, her şey böyle. Hurst üssü her kanal için hesaplanır, ana şey bileşenlerinin çubuk sayısının belirli bir değeri aşmasıdır, örneğin 30 - t \ f önemli değildir çünkü hesaplama günlük kanallara dayanmaktadır, örneğin 3'te -5-7 gün (hepsi elde etmek istediğiniz doğruluğa bağlıdır - bir günlük seçim kararsız olabilir) - gün içi çubuklar yeterli olacaktır;). Ve ancak o zaman, bu kanalın geri dönüş bölgelerinin tahmin edilmesi ve inşa edilmesi için uygunluğu hakkında bir sonuca varılır. Farklı kanallar için aynı Murray geri dönüş seviyesi farklı güven aralıklarında olacaktır - sonuçta bir şekilde kesmeniz gerekiyor, değil mi? Ve kalite kriteri potansiyel enerjidir - ikinci dereceden formlara bakın - olağandışı bir şey değil.

HAZIR ÇÖZÜM paylaşmayacağım, ama teknik - lütfen, sorun değil.

İyi şanslar ve geçen trendler.
 

HAZIR ÇÖZÜM paylaşmayacağım, ama teknik - lütfen, sorun değil.

Genel olarak anlaşılabilir. Her şey bir tez gibi. Onsuz hiçbir şeyin işe yaramayacağı çok basit şema dışında her şey var; o)! Ve sadece onu icat eden şemayı biliyor ve onsuz her şey sadece kağıttan ibaret, ki bu zaten çok fazla. Kusura bakmayın ama ben sadece bir gerçeği dile getiriyorum, başka bir anlamı yok. Herkes hala kendi bisikletine binmek zorunda. Bu FOREX! :o)

Ve işte başka bir soru. Bütün bunlar ne üzerine uyguladınız? MT4'te mi?
Yani, MT4'te getirdiğiniz bir Murray göstergesi var. Bu temiz.
Ama kanal ve Hirst hesaplamasını neye göre yapıyorsunuz? Ayrıca MT4'te mi? Bir şekilde 0,5M mertebesinde kod boyutundan bahsetmişsiniz. Demek istediğin bu muydu? Hesaplama programı metninin mql4 cinsinden ağırlığı? Eğer öyleyse, dürüst olmak gerekirse, böyle bir hacmi hayal etmek benim için zor. Muhafazakar tahminime göre, böyle bir programın metni yaklaşık 10.000 satırlık bir bölgede olmalıdır. Kullandığım basit beyaz gürültü stratejisi sadece 1000 satır alıyor ve bu, farklı zaman dilimlerinden gelen bilgileri kullanan paralel olarak 6 işlem dizisini çalıştırmama ve parçalarını bırakmak daha kolay (olası daha fazla modernizasyon için daha uygun) olmasına rağmen. örneğin, 400-500 satıra dönüştürmek için dizileri kullanmaktan ziyade şu anda mevcut olan formda bu tür kodlar (gelecekte de bu tür planlar olmasına rağmen). Yani, bir iş parçacığının bir zaman diliminde başlatılması 400-500 satır alacaktır. İzlenmesi gerekmeyen tam özellikli bir EA kullanıyorum. Tabii ki, daha da geliştirilmesini reddetmiyorum, ancak şimdiye kadar test cihazında optimize edilebilecek her şeyi optimize ettim. Ancak yöntemlerinize belirli bir ilgi var ve elbette işe yararsa bir şeyler uygulamaya çalışacağım.

Not: Ve büyük bir lotla işlem yapmak için tek bir iş parçacığı değil, farklı zaman dilimlerinde küçük partilerle birkaç paralel iş parçacığı kullanmam, yalnızca bu tür ticaret sırasında maksimum düşüşü filtreleme etkisi gibi bir şey olduğu gerçeğiyle açıklanıyor. Yani, birkaç rastgele süreciniz varsa (bir iş parçacığı için bakiye dinamiği), o zaman bir hesaba bakiye eklerken, maksimum düşüş her iş parçacığı için düşüşlerin toplamına değil, her iş parçacığı için düşüşlerin toplamına eşit olacaktır, iş parçacığı sayısının kareköküne bölünür! Böylece, toplam maksimum düşüşü azaltmaya çalışıyorum. Yani, her biri 1,5 yıllık bir geçmişe sahip 50USD'lik bir düşüşe sahip 6 ipliğiniz varsa, o zaman mantıksal olarak, 6 ipliğin toplam düşüşü 300USD olmalıdır, ancak pratikte bu miktar, 6'nın kökü = 2, 45. Eh, bunun gibi bir şey test cihazında gösteriliyor. Test cihazına göre, yaklaşık 2,2'ye bölmeniz gerektiği ortaya çıktı. Bu da maksimum düşüşü azaltma fikrime çok uygun olduğunu düşünüyorum.
 
Genel olarak, kendi “planınızı” oluşturabilirsiniz, bunun kolay olacağını söylemeyeceğim, ancak ancak o zaman nasıl çalıştığını ve nasıl çalıştığını (ve neden tam olarak bu şekilde ve başka hiçbir şekilde) anlamak mümkün olacaktır. yolu) sinyaller yorumlanır. Kodla ilgili olarak: MKL4'te yazdım - yavaş çalışmasına rağmen uzun süredir programlama yaptığım C\C++'a çok benziyor - her şeyi C++ altında yeniden derleyeceğim. Programın boyutuyla ilgili olarak - gerçekten oldukça büyük: 0,5M, derlenen programın boyutudur, yani .ex4 dosyasının boyutudur. Satır sayısıyla ilgili küçük bir hata yaptınız - toplamda yaklaşık 6000 - temelde her şey fonksiyonlarda, döngülerde ve çok boyutlu dizilerde , yani sadece genişletirseniz - hayal bile edemiyorum :) .....


İyi şanslar ve geçen trendler.
 
Selam Vladislav!
Ve sonra başkasının şubesini sular altında bıraktık :). İyi şanlar.


Seninle aynı fikirde olmama izin ver. Bu konu ancak deneyimlerinizi ve fikirlerinizi paylaşmaya karar verdiğinizde ilginç hale geldi.

Bir fizikçi olarak alan, potansiyel vb. hakkında her şeyi anlıyorum. Optimizasyon ile de her şey açıktır - bu önemsiz ve ilginç bir problemdir. Matematiksel istatistiklere gelince, burada ne olduğunu ancak genel anlamda anlayabildim, ne yazık ki. Ve konu ilginç. Özellikle seviyelerin öneminin önsel değerlendirmesi ve rastgele olmayan tahmin olasılığı açısından.

Yaklaşımım (şimdiye kadar), trend olan bir pazardaki dönemleri belirlemeye odaklandı. Hurst üssünü yukarıdaki yazıda verilen formda veya başka bir şekilde kullanmadım. Bununla birlikte, kendi hesaplama algoritmama sahip bir piyasa fraktalitesi ölçüsüne de güvenmeye çalışıyorum. Trend dönemlerinin yanı sıra karşı trend dönemlerinin de kullanılabileceği fikri benim için tamamen beklenmedik bir şeydi. Bazen burnun altında ne olduğunu bile görmek zordur. :-)

Bu yüzden, bu forumda olmasa da, Murray seviye göstergesinde verilen e-postanız veya kişisel olarak bir örümcek üzerinden diyaloğu memnuniyetle sürdürürüm.

Her halükarda şunu söylemek istiyorum: Çalışmanız beni etkiledi! İlk defa bir amatörün (kendimi de dahil ettiğim) "mecazi düşünme" işini, matematiğin bir matematikçinin elinde olduğunu gördüm.
özellikle şunu beğendim:
...Ocak 2006'dan bu yana, herhangi bir veri beslemesinde, yani herhangi bir DC'de, tırnaklardaki bazı farklılıklara rağmen, aynı seviyelerde ve sınırlarda geri dönüş bölgeleri veren çözümler elde etmeyi başardım ve aynı zamanda, yumuşatma algoritmaları kullanın - hepsi geç kaldı.

Sonuçları farklı veri akışlarında ve yumuşatma kullanılmadan birleştirmek, tekniğinizin sürecin doğasına sahip olduğu anlamına gelir!
 
Bu yüzden, bu forumda olmasa da, Murray seviye göstergesinde verilen e-postanız veya kişisel olarak bir örümcek üzerinden diyaloğu memnuniyetle sürdürürüm.


Sorun yok .


Sonuçları farklı veri akışlarında ve yumuşatma kullanılmadan birleştirmek, tekniğinizin sürecin doğasına sahip olduğu anlamına gelir!


Biraz daha mütevazı konuşurdum - bu, matematiksel istatistik yöntemlerinin işe yaradığı anlamına gelir - yalnızca doğru uygulanmaları gerekir ve yine de birçok TA yönteminin bir gerekçesi vardır. (yani, piyasada önceden belirlenmiş hareket bölümleri vardır). Elliott veya Gann gibi nitel yöntemler dahil, ancak daha önce yazdığım gibi, nicel değerlendirmelerin olmaması nedeniyle Elliott'tan pek hoşlanmıyorum.

Her durumda - iyi şanslar ve geçen trendler.

Not Örümcek üzerinde matematiksel istatistikler üzerine birkaç iyi kitap var - McCormick'in "Ticaret Stratejileri Ansiklopedisi"ne ve Bulashev'in " Tüccarlar İçin İstatistikler "ine bakın - uygulamalı anlamda çok faydalı - yöntemlerin uygulanmasının mantığı gösteriliyor.
 
Tartışmanızı ilgiyle ve profesyonel faaliyetlerim nedeniyle kullanılan yöntemlerin bana çok ama çok yakın olduğunu daha da büyük bir ilgiyle okudum. Küçük katkımı yapayım.
Kenar yumuşatma algoritmaları kullanmıyorum - hepsi geç kaldı

Difraktif çekirdeğe sahip bir DCT deneyin - çok iyi pürüzsüzleşir, hiç gecikme olmaz. IMHO, geleneksel LCF'den daha iyi çalışıyor. Aşağıda C++'daki kod parçacıkları bulunmaktadır. Kullanım yöntemi, bence, yorumlardan açık.

//*************************************************************************//
/////////////////////////////////////////////////////////////////////////////
//+-----------------------------------------------------------------------+//
//| Прямое дискретное косинус-преобразование (DCT) x[] --> y[]            |//
//+-----------------------------------------------------------------------+//
/////////////////////////////////////////////////////////////////////////////
/*
   Входные глобальные переменные:
 double x[]           // входной массив
   Входные локальные переменные:
 int    n_bars        // полное число баров для DCT-преобразования
   Выходные локальные переменные: нет
   Выходные глобальные переменные:
 double y[]           // массив гармоник
*/
void DCT(int n_bars, double x [], double y [])
{ 
 int k;                                // счетчик строк матрицы коэффициентов
 int n;                             // счетчик столбцов матрицы коэффициентов
 double sum;                                                    // накопитель
 double PIN2 = PI / (n_bars * 2.0);
 double wgt_zero = 1.0 / sqrt(n_bars);            // вес при 0-м коэффициенте
 double wgt_nzero = sqrt(2.0) * wgt_zero;           // вес при всех остальных
 //----
 // dct-преобразование
 for (k = 0; k < n_bars; k++)
 {                                                               // цикл по k
  sum = 0.0;                                           // обнуляем накопитель
  for (n = 0; n < n_bars; n++)
  { sum += x[n] * cos(PIN2 * (2.0 * n + 1.0) * k); }             // цикл по n
   if (k != 0)
   { y[k] = wgt_nzero * sum; } 
   else
   { y[k] = wgt_zero  * sum; }
  }                                                              // цикл по k
 //----
 return;
} 
//
//*************************************************************************//
/////////////////////////////////////////////////////////////////////////////
//+-----------------------------------------------------------------------+//
//| Обратное дискретное косинус-преобразование (IDCT) y[] --> x[]         |//
//+-----------------------------------------------------------------------+//
/////////////////////////////////////////////////////////////////////////////
/*
   Входные глобальные переменные:
 double y[]           // массив гармоник
   Входные локальные переменные:
 int    n_bars        // полное число баров для DCT-преобразования
   Выходные локальные переменные: нет
   Выходные глобальные переменные:
 double x[]           // выходной массив
*/
void IDCT(int n_bars, double x [], double y [])
{ 
 int k;                                // счетчик строк матрицы коэффициентов
 int n;                             // счетчик столбцов матрицы коэффициентов
 double sum;                                                    // накопитель
 double PIN2 = PI / (n_bars * 2.0);
 double wgt_zero = 1.0 / sqrt(n_bars);            // вес при 0-м коэффициенте
 double wgt_nzero = sqrt(2.0) * wgt_zero;           // вес при всех остальных
 //----
 // idct-преобразование
 for (n = 0; n < n_bars; n++)
 {                                                               // цикл по n
  sum = 0.0;                                           // обнуляем накопитель
  for (k = 0; k < n_bars; k++)
  {                                                              // цикл по k
   if (k != 0)
   { sum += wgt_nzero * y[k] * cos(PIN2 * (2.0 * n + 1.0) * k); }
   else
   { sum += wgt_zero  * y[k] * cos(PIN2 * (2.0 * n + 1.0) * k); }
  }                                                              // цикл по k
    x[n] = sum;
 }                                                               // цикл по n
 //----
 return;
} 
//
//*************************************************************************//
/////////////////////////////////////////////////////////////////////////////
//+-----------------------------------------------------------------------+//
//| Вычисление левой части уравнения y[] --> y[] (диффракционное ядро)    |//
//+-----------------------------------------------------------------------+//
/////////////////////////////////////////////////////////////////////////////
/*
   Входные глобальные переменные:
 double y[]            // массив гармоник
   Входные локальные переменные:
 int    n_bars         // полное число баров для расчета
 double eye            // размер "окна"
 double alfa           // параметр регуляризации
   Выходные локальные переменные: нет
   Выходные глобальные переменные:
 double y[]            // массив значений левой части уравнения 
*/
void GetDiffrLeftSide(int n_bars, double eye, double alfa, double y []) 
{
 double kern;   //
 double omega;  //
 double domega; //
 double omega2; // 1 + omega^2
 double delta = 2.0 * PI / (n_bars - 1);
 int i;
 //----
 for (i = 0; i < n_bars; i++)
 {
  omega  = i * delta;
  domega = omega * eye;
  omega2 = 1.0 + omega * omega;                  // 1. + omega^2
  kern   = (sin(domega) + EPS) / (domega + EPS); // sin(arg)/arg
  y[i]  = (kern * y[i]) / (kern * kern + alfa * omega2);
 }
 //----
 return;
}
//
//*************************************************************************//
/////////////////////////////////////////////////////////////////////////////
//+-----------------------------------------------------------------------+//
//| Линейное сглаживание массива x[] по 5 точкам; результат - y[]         |//
//+-----------------------------------------------------------------------+//
/////////////////////////////////////////////////////////////////////////////
/*
   Входные глобальные переменные:
 double x[]    // входной массив - аргумент;
   Входные локальные переменные:
 int    n_beg  // номер начального бара
 int    n_end  // номер конечного бара
   Выходные локальные переменные: нет
   Выходные глобальные переменные:   
 double y[]    // выходной массив - ответ;
*/
void GetSmooth5(int n_beg, int n_end, double x [], double y [])
{ 
 int i;
 //----
 y[n_beg] = (3.0 * x[n_beg] + 2.0 * x[n_beg+1] + 
                                    x[n_beg+2] - x[n_beg+4]) / 5.0;
 y[n_beg+1] = (4.0 * x[n_beg] + 3.0 * x[n_beg+1] + 
                                2.0 * x[n_beg+2] + x[n_beg+3]) / 10.0;
 for (i = n_beg + 2; i < n_end - 2; i++)
 { y[i] = (x[i-2] + x[i-1] + x[i] + x[i+1] + x[i+2]) / 5.0; }
 y[n_end-2] = (x[n_end-4] + 2.0 * x[n_end-3] + 
                            3.0 * x[n_end-2] + 4.0 * x[n_end-1]) / 10.0;
 y[n_end-1] = (3.0 * x[n_end-1] + 2.0 * x[n_end-2] + 
                                        x[n_end-3] - x[n_end-5]) / 5.0;
 //----
 return;
} 
//



Ve bu nasıl kullanılır:

//
//*************************************************************************//
/////////////////////////////////////////////////////////////////////////////
//+-----------------------------------------------------------------------+//
//| Сглаживание методом DCT-преобразования (без запаздывания)             |//
//+-----------------------------------------------------------------------+//
/////////////////////////////////////////////////////////////////////////////
/*
   Входные глобальные переменные:
 double x[]     // несглаженный массив значений аргумента (цена);
   Входные локальные переменные:
 int    n_bars  // полное число баров для преобразования
 double eye     // размер "окна"
 double alfa    // параметр регуляризации 
   Выходные локальные переменные: 
 int nn_tot     // число сглаженных баров
   Выходные глобальные переменные:
 double x[]     // ответ - сглаженный массив значений аргумента;
*/
MT4_EXPFUNC int __stdcall GetDiffrDCTS (int nn_tot, double eye,  double alfa,
                                                                 double x [])
{
 int err_code = 0;                                              // код ошибки
 int i;                                                            // счетчик
 //
 // ########################### Error Definitions ###########################
 // *** Ошибка: если превышено максимальное число баров, выход ***
 if (nn_tot > NN_MAX) 
 { 
	 err_code = -1;
	 return(err_code); 
 } 
 // *** Ошибка: для преобразования задано слишком мало баров, выход ***
 if (nn_tot < NN_MIN) 
 {  
	 err_code = -2;
	 return(err_code); 
 }  
 // *** Ошибка: параметр alfa = 0 при eye <> 0, выход ***
 if ((alfa == 0.0) && (eye != 0.0)) 
 {  
	 err_code = -3;
	 return(err_code); 
 }  
 // *** Ошибка: параметр eye_size < 0, выход ***
 if (eye < 0.0) 
 {  
	 err_code = -4;
	 return(err_code); 
 }  
 // *** Ошибка: параметр eye_alfa < 0, выход ***
 if (alfa < 0.0) 
 { 
	 err_code = -5;
	 return(err_code); 
 }  
 // #########################################################################
 //
 //----
 //
 DCT (nn_tot, x, y);                                           // x[] --> y[]
 GetDiffrLeftSide (nn_tot, eye, alfa, y);                      // y[] --> y[]
 IDCT (nn_tot, x, y);                                          // y[] --> x[]
 GetSmooth5 (0, nn_tot, x, y);                                 // x[] --> y[]
 for (i = 0; i < nn_tot; i++) { x[i] = y[i]; }                 // y[] --> x[]

 //
 //----
 err_code = nn_tot;
 return(err_code);
}
//



Örneğin, Göz = 2.5, Alfa = 0.5 parametrelerini deneyin. (Göz !=0, Alfa == 0) kombinasyonuna izin verilmediğini hatırlamak önemlidir. EPS, tip 0/0 belirsizliğini önlemek için kullanılır. EPS = 1.0E-09 alıyorum.
Düzleştirilmiş dizi, nn_tot çubukları için fiyat değişiklikleri aralığına göre normalleştirilmelidir:

//
/////////////////////////////////////////////////////////////////////////////
//+-----------------------------------------------------------------------+//
//| Нормировка результов вычислений на заданный диапазон значений         |//
//+-----------------------------------------------------------------------+//
/////////////////////////////////////////////////////////////////////////////
/*
   Входные глобальные переменные:
 double x[]    // неномированный массив значений аргумента;
   Входные локальные переменные:
 int    n_beg  // номер начального бара
 int    n_end  // номер конечного бара
 double v_max  // максимальное значение диапазона для нормировки;
 double v_min  // минимальное значение диапазона для нормировки;
   Выходные локальные переменные: нет
   Выходные глобальные переменные:
 double x[]    // ответ - нормированный массив значений аргумента;
*/
MT4_EXPFUNC int __stdcall NormRange(int n_beg, int n_end, 
                                    double v_max, double v_min, double x [])
{ 
 int    err_code = 0;                              // возвращаемый код ошибки
 double x_max;                 // максимальное значение в нормируемом массиве
 double x_min;                  // минимальное значение в нормируемом массиве
 double x_curr;                           // текущее ненормированное значение
 double x_norm;                             // текущее нормированное значение
 double coef_1;                              // 1-й нормировочный коэффициент
 double coef_2;                              // 2-й нормировочный коэффициент
 double diff_x;                                     // разность x_max - x_min
 int    n_bars;                                              // n_end - n_beg
 int    i;                                                         // счетчик
 //
 n_bars = n_end - n_beg;
 // ########################### Error Definitions ###########################
 // *** Ошибка: если перепутаны местами начальный и конечный бары, выход ***
 if (n_bars < 0) 
 { 
	 err_code = -6;
	 return(err_code); 
 } 
 // *** Ошибка: если превышено максимальное число баров, выход ***
 if ((n_bars > 0) && (n_bars > NN_MAX))
 { 
	 err_code = -1;
	 return(err_code); 
 } 
 // *** Ошибка: для преобразования задано слишком мало баров, выход ***
 if ((n_bars > 0) && (n_bars < NN_MIN))
 {  
	 err_code = -2;
	 return(err_code); 
 }  
 // #########################################################################
 //
 //----
 // находим максимумы и минимумы в массиве результата
 x_min =  999999999.0;
 x_max = -999999999.0;
 for (i = n_beg; i < n_end; i++)
 { 
  x_curr = x[i];
  if (x_curr >= x_max) { x_max = x_curr; }
  if (x_curr <= x_min) { x_min = x_curr; }
 } 
 diff_x = x_max - x_min;
 //
 // ########################### Error Definitions ###########################
 // *** Ошибка: diff_x = 0 ***
 if (diff_x == 0.0)
 {
  err_code = -7;
  return(err_code);
 }
 // #########################################################################
 //
 // находим коэффициенты пересчета   
 coef_1 = (v_min * x_max - v_max * x_min) / diff_x;
 coef_2 = (v_max - v_min) / diff_x;
 // нормируем результат на заданный диапазон
 for (i = n_beg; i < n_end; i++)
 { 
  x_curr = x[i];
  x_norm = coef_1 + x_curr * coef_2;
  x[i]   = x_norm;
 } 
 //----
 return(err_code);
} 
//



v_max ve v_min değişkenleri, işleme için bir fiyat dizisi oluşturulurken daha önce elde edilmelidir.

 
Vladislav ,
Yüksek profilli ifadeler olmadan yapma arzunuzu ve matematiksel istatistik yöntemlerine karşı tutumunuzu anlıyorum.
Ancak benim farklı bir görüşüm var.

Piyasa, durağan olmayan, kaotik bir süreçtir. Ve matematiksel istatistikler esas olarak durağan süreçlerle ilgilenir. İçindeki sınıra geçmek, iddiaları kanıtlamanın ana yöntemlerinden biridir. Piyasanın limit durumu nedir? Brown hareketi kapalı bir sistemdeki bir olgudur ve piyasa esasen açık bir sistemdir. Öte yandan, piyasa kendi kendini örgütleyen bir süreçtir, bu nedenle bu kendi kendine örgütlenmenin yasaları vardır.

Benim açımdan, başarınız matematiksel yöntemlerin kullanılmasından kaynaklanmıyor,
Stratejinizin yapıcı kısmından matematiksel istatistik yöntemlerine ilişkin bir KISITLAMA.
Yöntemin (yani aracın) onu uygulamanın ayrıntılarına ayırmasına izin vermeden önemli bir şeyi yakalamaya yardımcı olan bu sınırlamalardı.

Kitaplar için teşekkürler, mutlaka bakacağım.
Örümcek üzerindeki takma adın aynı mı?
 

Örümcek üzerindeki takma adın aynı mı?


Örümcek üzerinde - VG.

İyi şanslar ve geçen trendler.
 
alexjou
Bu üç kaynak, onları MT4 ile birlikte kullandığınız anlamına mı geliyor (buna benzer). Ve derleme için C ortamı yoksa nasıl hissedersiniz?
 
alexjou
Bu üç kaynak, onları MT4 ile birlikte kullandığınız anlamına mı geliyor (buna benzer). Ve derleme için C ortamı yoksa nasıl hissedersiniz?

MT'yi deneyebilirsiniz. Başlangıçta hata ayıklama için MQL'de programlandılar ve daha sonra minimum değişikliklerle C'ye taşındılar ve en eski sürüm assembler'daydı.