Elliot Dalga Teorisine dayalı ticaret stratejisi - sayfa 28

 
Ve hesaplamalarla ilgili bir şey daha. Son zamanlarda normal dağılımın yoğunluk fonksiyonunu kullanma gereğini düşündüm, ancak şu ana kadar başlamadım. Ayrıca, zor bir işlevle veya bir tablo yöntemi kullanarak nasıl yapacağımı düşündüm, Excel'deki tabloyu binde bir (veya on binde bir) adımla doldurmaya daha meyilliydim. büyük bir diziyi doldurmak için mq4 kodunu içeren robots.txt dosyası. Sadece çok güzel olmadığını düşündüm, şimdi Vladislav sayesinde işlemci kaynaklarından da tasarruf ettiğini biliyorum.
Genel olarak, birçok yararlı şey öğrendim. :)
 

Aksiyomlarınızdan biri, optimizasyon sürecinin bir sonucu olarak belirlenen gerçek (yani benzersiz) bir yörüngenin varlığıdır. Tek bir yörünge nasıl birden fazla kanala yol açabilir?


Geç cevaplar için tekrar özür dilerim. Bir yörüngeye yaklaşırken, aynı güven aralığındalarsa , bir yaklaşımın diğerinden ne kadar daha iyi yörüngeyi tanımladığını asla bilemezsiniz. Ve buna göre, güven aralığı sınırları içinde kalan tüm yaklaşımlar eşdeğer kabul edilebilir. Prensip olarak, öyle. Bir dizi olası tahminden bir tahmin oluşturmak için (genellikle birden fazla yaklaşım, seçim kriterlerini karşılar, çünkü hata sınırları belirlenir), tabiri caizse “en” optimal olanı seçmek daha iyidir. Algoritmayı incelerken bir özelliğin daha farkına vardım - yaklaşımlar farklı olsa da, çoğu durumda tahminler aynıdır. Size bir kez daha hatırlatmama izin verin, yörüngenin kendisinin gerekli olmadığını ve onu aramadığımı. Kanallara gelince, kanalların benzersiz olmaması, incelenen yapıların "ayrıntı derecesi" (buna şöyle diyelim) ile ilgilidir. Dolayısıyla, eğilimlerin varlığında, geri dönüş bölgelerini belirlemek ve eğilimlerin sona ermesi, geri dönüş bölgelerinin dökümü vb. olasılıklarını değerlendirmek mümkündür. Veya piyasada pozisyonlara girmemenin daha iyi olacağı belirsizlik alanlarını vurgulayın. Ayrıca, numune boyutlarındaki sınırlamaların her zaman farkında olmanız gerekir, aksi takdirde sonuç çok yüksek bir belirsizlik derecesine sahip olacaktır.

İyi şanslar ve geçen trendler.
 
Sevgili Vladislav!

Hurst katsayısının hesaplanması konusunda bir yanlış anlama var.
Doğrusal regresyon durumunda, S ve R'yi hesaplamak için 2 seçeneğimiz vardır.

Seçenek 1.
S - doğrusal regresyon çizgisinin tüm uzunluğu boyunca sapmaların farklarının toplamı olarak hesaplayabiliriz.
yani:

S=0.0;
for (n=0; n<Period; n++) { S+ = MathPow( Close[n] - (a+b*n) , 2); }
S=MathSqrt( S / Nokta);

Ve R - tüm doğrusal regresyon çizgisi boyunca maksimum ve minimum sapma arasındaki fark olarak hesaplayabiliriz.
yani:

pMaks=0.0; pMin=0.0;
(n=0; n<Dönem; n++) için
{
dc=Kapat[n] - (a+b*n);
if (dc > pMax) pMax = dc;
eğer ( dc < pMin) pMin = dc
}
R=MathAbs( pMax - pMin);

Seçenek 2.
Standart teknik göstergeler kümesinden iStdDev() işlevini kullanarak son çubuğa göre S'yi hesaplayabiliriz. Ancak bu durumda, lineer regresyon çizgisinin ortasının değerine göre hesaplamaya eşdeğer olan, son çubuğa göre mov'dan hesaplanan S'ye sahip olacağız.

Ve R - yatay projeksiyonda maksimum ve minimum değerler arasındaki fark olarak:

pMax=Yüksek[En yüksek(NULL,0,MODE_HIGH,Period,i)];
pMin=Düşük[En Düşük(NULL,0,MODE_Düşük,Periyot,i)];

ki bu tamamen doğru değil, başlangıçta Close ile sayarsak MODE_CLOSE kullanmak biraz daha doğru olur.

Anladığım kadarıyla ikinci seçeneği uyguladınız mı? Ya da ben hatalıyım?

Genel olarak soru şudur: Hurst katsayısının daha doğru hesaplanması için hangi seçenek daha doğrudur?

Cevabınız için şimdiden teşekkürler - İskender.
 
güven aralığı sınırları içinde kalan tüm yaklaşımlar eşdeğer kabul edilebilir

Teşekkürler Vladislav, bir şekilde bu anı hesaba katmadım. Ama gerçekten öyle. Bu, aslında, birkaç kanalın elde edilmediği, ancak maksimum ve minimum açıya sahip çizgilerle sınırlanan bütün bir aralığın elde edildiği anlamına gelir.
Ayrıca numune boyutlarındaki sınırlamaları da her zaman hatırlamanız gerekir, aksi takdirde sonuç çok yüksek bir belirsizlik derecesine sahip olacaktır.

Ne belirsizliğinden bahsettiğini tam olarak anlamadım. Ancak, başka bir şey anlıyorum. Örnek, regresyon kanalını tanımlamalıdır ve regresyon kanalı, trend kanalıdır. Hem trendi hem de daireyi örneğe koyarsanız, böyle bir örneğin en azından faydalı bir şey elde etmenize izin vermesi olası değildir. Bu nedenle, piyasayı aşamalara ayırma ve daha da önemlisi, erken aşamalarda, yani gerçek hayatta bir trend ve bir daire belirleme sorunu ortaya çıkıyor. Bence, görev çok önemsiz değil.
 
merhaba,
Kartinka mne napomnila standartnyj indikator kanalov, vot i spomnil svoju razrabotku kokda iskal filtra dlia ods4iota kokda na4inajetsia bolshyje volny Elliota - po Standart Sapma formülü:



Vot kod mojevo göstergesi:

//+------------------------------------------------------------------+
//|                                                   StdDevChan.mq4 |
//|                           Copyright © 2005, Arunas Pranckevicius |
//|                                      irc://irc.omnitel.net/forex |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Arunas Pranckevicius(T-1000), Lithuania"
#property link      "irc://irc.omnitel.net/forex"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 White
#property indicator_color3 Blue

//---- input parameters
extern int       PriceBars=350;
extern int       Shift;
extern bool      Comments=false;

double Support[];
double StdDev[];
double Resistance[];

//---- buffers
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void SetObject(string ObjName,int ObjType,datetime ObjTime1,double ObjPrice1,datetime ObjTime2=0,double ObjPrice2=0,color ObjColor=Red,int ObjSize=1,int ObjStyle=STYLE_SOLID,datetime ObjTime3=0,double ObjPrice3=0)
{

if (ObjectFind(ObjName) != -1) ObjectDelete(ObjName);
ObjectCreate(ObjName, ObjType, 0,ObjTime1 , ObjPrice1, ObjTime2, ObjPrice2, ObjTime3, ObjPrice3);
ObjectSet(ObjName,OBJPROP_COLOR,ObjColor); 
ObjectSet(ObjName,OBJPROP_STYLE,ObjStyle); 
ObjectSet(ObjName,OBJPROP_WIDTH,ObjSize); 
}


int init()
  {
//---- indicators
   IndicatorBuffers(3);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Resistance);
   SetIndexDrawBegin(0,0);
   SetIndexEmptyValue(0,0);
   SetIndexShift(0,0);
   SetIndexLabel(0,"Standart Deviation Support-");
//----
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,StdDev);
   SetIndexDrawBegin(1,0);
   SetIndexEmptyValue(1,0);
   SetIndexShift(1,0);
   SetIndexLabel(1,"Standart Deviation");
//----
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,Support);
   SetIndexDrawBegin(2,0);
   SetIndexEmptyValue(2,0);
   SetIndexShift(2,0);
   SetIndexLabel(2,"Standart Deviation Resistance+");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counter,counter2;
   double DevAvg=0;
   double DevPlus1=0;
   double DevMinus1=0;
   double DevPlusStart=0;
   double DevMinusStart=0;
   double DevAvgStart=0;
   double DevPlusEnd=0;
   double DevMinusEnd=0;
   double DevAvgEnd=0;
   double DevPlus2=0;
   double DevMinus2=0;
   double DevAvg1=0;
   double DevAvg2=0;
   double PriceDiff;
   double deviance,Max,Min;
   int DrawBegin = Shift;   
   int DrawEnd;
   int counted_bars=IndicatorCounted();
   DrawEnd=Bars-counted_bars;
   
   if ( DrawEnd < DrawBegin + PriceBars) DrawEnd = DrawBegin + PriceBars;
   
   if (Bars < (PriceBars * 2 + Shift)) return(0);
   
   for (counter=DrawBegin-1;counter<=DrawEnd;counter++)
   {
   deviance=iMA(Symbol(),Period(),PriceBars,0,MODE_SMA,PRICE_MEDIAN,counter);
   Max=High [Highest (NULL,0,MODE_HIGH,PriceBars,counter)];
   Min=Low [Lowest (NULL,0,MODE_LOW,PriceBars,counter)];
   //DevAvg=MathPow((Max + Min + deviance) / 3,2);  
   DevAvg=(Max + Min + deviance) / 3;  

   for (counter2=(PriceBars + counter);counter2 >=counter;counter2--)
   {
   PriceDiff = (Max + Min + Open[counter2]) / 3;
   deviance+= MathPow((PriceDiff - DevAvg),2);   
   }

   // Calculate average deviation
   deviance = deviance / (PriceBars + 1);
   DevAvg = MathSqrt(deviance/Point) * Point; 

   // Calculate deviation channel starting/current average deviation prices
   DevAvg1 = (DevPlus1 + DevMinus1 + (Max + Min + Open[PriceBars + counter]) / 3) / 3;

   // Calculate deviation channel +/- starting points
   DevPlus1 = (Min+Max + Open[PriceBars + counter]) / 3 + DevAvg;
   DevMinus1 = (Min+Max + Open[PriceBars + counter]) / 3 - DevAvg;     

  // Calculate deviation channel current +/- points
   DevPlus2 = (Max + DevAvg1) / 2 + DevAvg;
   DevMinus2 = (Min + DevAvg1) / 2 - DevAvg;

   DevAvg2 = (DevPlus2 + DevMinus2 + (Max + Min + DevAvg1) / 3) / 3;
   
   Resistance[counter]=DevMinus2;
   Support[counter]=DevPlus2;
   StdDev[counter]=DevAvg2;   
   //if (counter == DrawEnd && Symbol() == "EURUSD" ) Print ("DevMinus2=",DevMinus2," DevPlus2=",DevPlus2," DevAvg2=",DevAvg2);

   if (counter == DrawBegin)
   {
   DevPlusEnd=Resistance[counter];
   DevMinusEnd=Support[counter];
   DevAvgEnd=StdDev[counter];
//   if (Symbol() == "EURUSD" ) Print ("DrawBegin=",DrawBegin," DrawEnd=",DrawEnd," DevMinus2=",DevMinus2," DevPlus2=",DevPlus2," DevAvg2=",DevAvg2);
   }      
   
   if (counter == DrawBegin + PriceBars)
   {
   DevPlusStart=Resistance[counter];
   DevMinusStart=Support[counter];
   DevAvgStart=StdDev[counter];
   }      

   }
//----

   if (Comments) Comment(Symbol()," DevAvg=",DevAvg," DevAvgStart=",DevAvgStart," DevAvgEnd=",DevAvgEnd," DevPlusStart=",DevPlusStart," DevPlusEnd=",DevPlusEnd," DevMinusStart=",DevMinusStart," DevMinusEnd=",DevMinusEnd);
   //Draw channel
   SetObject(Symbol()+"_StdDev+",OBJ_TREND,Time[PriceBars + Shift],DevPlusStart,Time[Shift],DevPlusEnd,Blue,1,STYLE_SOLID);
   ObjectSetText(Symbol()+"_StdDev+","Standart Deviation Resistance", 8, "Arial", Green);
   SetObject(Symbol()+"_StdDev-",OBJ_TREND,Time[PriceBars + Shift],DevMinusStart,Time[Shift],DevMinusEnd,Red,1,STYLE_SOLID);
   ObjectSetText(Symbol()+"_StdDev-","Standart Deviation Support", 8, "Arial", Green);
   SetObject(Symbol()+"_StdDevAvg",OBJ_TREND,Time[PriceBars + Shift],DevAvgStart,Time[Shift],DevAvgEnd,White,1,STYLE_SOLID);
   ObjectSetText(Symbol()+"_StdDevAvg","Standart Deviation Average", 8, "Arial", Green);
   
   return(0);
  }
//+------------------------------------------------------------------+
 
2 ANG3110 aslında bu soruyu yukarıdaki başlıkta cevaplamıştım. Tekrar cevap vereceğim - sonuncusu - çok tembelim;). Standart sapmanın hesaplanması, yaklaşıklık ve elde edilen gerçek fiyatlara göre yapılmalıdır. Kapanış fiyatlarına hareketli bir ortalama ile yaklaşıyorsanız, bu, Klose ile her çubuktaki hareketli ortalamanın değeri arasındaki fark olmalıdır. Ve standart algoritmayı kullanabilirsiniz - iStdDev(). Doğrusal bir regresyon kanalı ile ise, o zaman regresyon çizgisinin değeri ile klose arasındadır. Eğer başka bir şey varsa, o zaman yaklaşık fonksiyonun değeri ile elde edilen gerçek değer arasındaki fark alınmalıdır. İşlem başına karlılık gibi başka bir şeye yaklaşıyorsanız, diğer değişkenleri seçmeniz gerekir. Hesaplamalarımda iStdDev() kullanmıyorum.

ki bu tamamen doğru değil, başlangıçta Close ile sayarsak MODE_CLOSE kullanmak biraz daha doğru olur.

Buradaki anahtar şudur: Başlangıçta Kapat ile sayarsak

2Yurixx Belirsizlikle ilgili olarak - örnekte yetersiz sayıda serbestlik derecesi ile, yakınsaması güvenilir bir şekilde değerlendirilemez ve buna göre, yalnızca yakınsak örnekler için geçerli olan farklı bir örneğe istatistik analiz yöntemleri uygulayabilirsiniz. Buna göre sonuç belirsiz olacaktır.

Not Burada, "örnek" terimi dağıtım anlamına geliyordu. Yani, "Örneğin serbestlik derecesi sayısı, verilen örneğe etki eden dağılımın yakınsamasını belirlemede güvenilirlik derecesini etkiler" demek daha doğru olur. Ve buna göre, yakınsak dağılımlar üzerinde çalışan yöntemler, ıraksak dağılımlara (veya bilinmeyen bir yakınsama gerçeğine sahip dağılımlara) uygulanabilir.

İyi şanslar ve geçen trendler.
 
merhaba,

Vot po4emu ja dal kod svojevo indikatora - ras4ioty idut po vsem parametresi:

   sapma=iMA(Symbol(),Period(),PriceBars,0,MODE_SMA,PRICE_MEDIAN,counter);
   Maks=Yüksek [En Yüksek (NULL,0,MODE_HIGH,PriceBars,counter)];
   Min=Düşük [En Düşük (NULL,0,MODE_LOW,PriceBars,counter)];
   DevAvg=(Maks + Min + sapma) / 3;  



Göstergeyi bir grafikte izle :-D

 
Sevgili Vladislav!

Hurst katsayısının hesaplanması konusunda bir yanlış anlama var.
Doğrusal regresyon durumunda, S ve R'yi hesaplamak için 2 seçeneğimiz vardır.


Ama bu ilginç bir soru :)
Diyelim ki standart sapmanın yakınsaklığı için kriteri karşılayan, örneğin artan bir doğrusal regresyon kanalımız var. Bir yandan, kanal yükseldiği için, içerdiği çubuklar üzerinde hesaplanan KH 1.0 eğiliminde olacaktır (çünkü kayma yüzdedir). Öte yandan, eğer CF'yi regresyon doğrusuna göre hesaplarsak (böylece yanlılığı ortadan kaldırırsak), standart sapma normal dağılıma yakın olduğu için CF 0,5'e meyledecektir. Bence herkes kendisi kontrol etmeli (böylesi çok daha ilginç).
 
Dayanamadım ve Solandr'ın senaryosunu yeniden düzenledim. RMS hesaplamasını dahil etmek, yerleşik iStdDevOnArray kullanarak yapmak daha doğrudur, çünkü bölme (derece-1 sayısı) 30 öğeye kadar olan örnekler için doğrulanır.
//+------------------------------------------------------------------+
//|                                                     Herst-II.mq4 |
//|                             solandr (обработал напильником Rosh) |
//|                       http://www.metaquotes.ru/forum/6839/page11 |
//+------------------------------------------------------------------+
#property copyright "solandr (обработал напильником Rosh)"
#property link      "http://www.metaquotes.ru/forum/6839/page11"
#property show_inputs

extern int start_bar=500;
extern int end_bar=0;

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
double viborka[];
int size_of_array,i;

size_of_array=start_bar-end_bar+1;
ArrayResize(viborka, size_of_array);
for(i=size_of_array-1;i>=0;i--) viborka[i]=Open[i+end_bar];

double S_A=iMAOnArray(viborka,0,size_of_array,0,MODE_SMA,0);
Print("Среднее арифметическое выборки = ",DoubleToStr(S_A,8));

double S=iStdDevOnArray(viborka,0,size_of_array,MODE_SMA,0,0);

Print("СКО выборки (размах) = ",DoubleToStr(S,8));

double pMax=viborka[ArrayMaximum(viborka)];
double pMin=viborka[ArrayMinimum(viborka)];

double R=pMax-pMin;
Print("pMin = ",pMin," pMax = ",pMax, " R = ",R);

double Hrst;
if( (R>0)&&(S>0)) Hrst = MathLog(R/S)/MathLog(size_of_array*0.5);
Print("Хёрст = ",DoubleToStr(Hrst ,8));
  
  return(0);
}
//+------------------------------------------------------------------+



Pekala, ekstremumların aranması , iniş ve çıkışlara değil, ilk verilere dayanmaktadır.

Buna göre, kriter biraz farklıdır:

2006.05.28 14:53:08 Herst EURUSD,M15: kaldırıldı
2006.05.28 14:53:08 Herst EURUSD,M15: Hurst = 0.27582880
2006.05.28 14:53:08 Herst EURUSD,M15: pMin = 1.2691 pMax = 1.2892 R = 0.0201
2006.05.28 14:53:08 Herst EURUSD,M15: örnek standart sapma (aralık) = 0.00438062
2006.05.28 14:53:08 Herst EURUSD,M15: Örnek varyans = 0.00001919
2006.05.28 14:53:08 Herst EURUSD,M15: Örnek aritmetik ortalama = 1.27924631
2006.05.28 14:53:06 Herst EURUSD,M15: başarıyla yüklendi
2006.05.28 14:52:59 Herst-II EURUSD,M15: kaldırıldı
2006.05.28 14:52:59 Herst-II EURUSD,M15: Hurst = 0.26196806
2006.05.28 14:52:59 Herst-II EURUSD,M15: pMin = 1.2696 pMax = 1.2882 R = 0.0186
2006.05.28 14:52:59 Herst-II EURUSD,M15: örnek standart sapma (aralık) = 0.00437625
2006.05.28 14:52:59 Herst-II EURUSD,M15: Örnek aritmetik ortalama = 1.27924631
2006.05.28 14:52:59 Herst-II EURUSD,M15: başarıyla yüklendi
2006.05.28 14:52:54 'Herst II'yi Derlemek

 
Sevgili Vladislav!
Kapsamlı cevabınız için teşekkür ederim.