엘리엇 파동 이론에 기반한 거래 전략 - 페이지 28

 
그리고 계산에 대해 한 가지 더. 최근에 정규분포의 밀도함수를 사용할 필요성에 대해 생각했지만 아직까지는 시작하지 않았습니다. 그리고 어떻게 하면 좋을까 하는 생각도 들었는데, 복잡한 기능을 통해서든 표 형식으로든 엑셀에서 표를 1000분의 1(또는 10000) 단위로 채우고, 큰 배열을 채우기 위한 mq4 코드가 포함된 txt 파일입니다. 나는 그것이 그다지 아름답지 않다고 생각했습니다. 이제 Vladislav 덕분에 프로세서 리소스도 절약된다는 것을 알고 있습니다.
일반적으로 나는 많은 유용한 것들을 배웠습니다. :)
 

공리 중 하나는 최적화 프로세스의 결과로 결정되는 실제(즉, 고유한) 궤적의 존재입니다. 단일 궤도가 어떻게 여러 채널로 이어질 수 있습니까?


답변이 늦어 다시 한 번 죄송합니다. 궤적을 근사할 때 동일한 신뢰 구간 에 있는 경우 한 근사가 다른 것보다 얼마나 더 궤적 자체를 더 잘 설명하는지 알 수 없습니다. 따라서 신뢰 구간의 경계에 속하는 모든 근사값은 동일한 것으로 간주될 수 있습니다. 원칙적으로 그렇습니다. 가능한 것들의 집합에서 예측을 작성하려면(오류 한계가 설정되어 있기 때문에 일반적으로 둘 이상의 근사치가 선택 기준을 충족함) 말하자면 "가장" 최적의 것을 선택하는 것이 좋습니다. 알고리즘을 연구하면서 또 하나의 기능을 깨달았습니다. 근사치는 다르지만 대부분의 경우 예측은 동일합니다. 궤적 자체는 필요 없고 내가 찾는 것도 아님을 다시 한 번 상기시켜 드리겠습니다. 채널의 경우, 채널의 비고유성은 연구 중인 구조의 "세부 사항의 정도"(그것이라고 부름)와 관련이 있습니다. 따라서 추세가 있는 경우 롤백 영역을 결정하고 추세의 끝 확률, 반전 영역의 분석 등을 평가할 수 있습니다. 또는 시장에 진입하지 않는 것이 더 나을 때 불확실성 영역을 강조 표시하십시오. 또한 항상 표본 크기의 제한 사항을 알고 있어야 합니다. 그렇지 않으면 결과의 불확실성이 너무 높아집니다.

행운을 빕니다.
 
친애하는 블라디슬라프!

허스트 계수 계산에 대해 오해가 있습니다.
선형 회귀의 경우 S와 R을 계산하기 위한 2가지 옵션이 있습니다.

옵션 1.
S - 선형 회귀선의 전체 길이에 대한 편차 차이의 합으로 계산할 수 있습니다.
즉:

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

그리고 R - 전체 선형 회귀선을 따라 최대 편차와 최소 편차의 차이로 계산할 수 있습니다.
즉:

pMax=0.0; pMin=0.0;
(n=0; n<기간; n++)
{
dc=닫기[n] - (a+b*n);
if (dc > pMax) pMax = dc;
if ( dc < pMin) pMin = dc
}
R=MathAbs(pMax - pMin);

옵션 2.
표준 기술 지표 세트에서 iStdDev() 함수를 사용하여 마지막 막대에 상대적인 S를 계산할 수 있습니다. 그러나 이 경우 S는 마지막 막대를 기준으로 mov에서 계산되며 이는 선형 회귀선의 중간 값을 기준으로 계산하는 것과 같습니다.

그리고 R - 수평 투영에서 최대값과 최소값의 차이:

pMax=높음[최고(NULL,0,MODE_HIGH,기간,i)];
pMin=낮음[낮음(NULL,0,MODE_낮음,기간,i)];

완전히 정확하지는 않지만 처음에 닫기로 계산하면 MODE_CLOSE를 사용하는 것이 조금 더 정확할 것입니다.

내가 아는 한 두 번째 옵션을 적용했습니까? 아니면 내가 틀렸어?

일반적으로 질문은 다음과 같습니다. Hurst 계수를 보다 정확하게 계산하려면 어떤 옵션이 더 정확합니까?

답변에 미리 감사드립니다 - Alexander.
 
신뢰 구간의 경계에 속하는 모든 근사값은 동일한 것으로 간주될 수 있습니다.

감사합니다, Vladislav, 나는 어떻게 든이 순간을 고려하지 않았습니다. 하지만 정말입니다. 즉, 실제로 여러 채널을 얻는 것이 아니라 최대 및 최소 각도의 선으로 전체 범위가 제한됩니다.
또한 표본 크기의 한계에 대해 항상 기억해야 합니다. 그렇지 않으면 결과가 너무 높은 불확실성을 갖게 됩니다.

나는 당신이 말하는 불확실성을 잘 이해하지 못합니다. 그러나 나는 다른 것을 이해합니다. 샘플은 회귀 채널을 정의해야 하며 회귀 채널은 추세 채널입니다. 추세와 플랫을 모두 샘플에 넣으면 그러한 샘플은 최소한 유용한 것을 얻을 수 없을 것입니다. 따라서 시장을 단계적으로 구분하고, 더 중요하게는 초기, 즉 실생활에서 추세와 플랫을 식별하는 문제가 발생합니다. 제 생각에는 작업이 매우 중요하지 않습니다.
 
안녕하세요,
Kartinka mne napomnila standartnyj indikator kanalov, vot i spomnil svoju razrabotku kokda iskal filtra dlia ods4iota kokda na4inajetsia bolshyje volny Elliota - po 표준 편차 공식:



Vot kod mojevo 표시기:

//+------------------------------------------------------------------+
//|                                                   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 실제로 위의 스레드에서이 질문에 이미 답변했습니다. 나는 다시 대답 할 것이다 - 마지막 하나 - 나는 너무 게으르다 ;). 표준 편차의 계산은 얻은 실제 가격과 근사값에 대해 수행해야 합니다. 이동 평균으로 종가를 추정하는 경우 이는 클로즈와 각 막대 의 이동 평균 값 간의 차이여야 합니다. 그리고 표준 알고리즘인 iStdDev( )를 사용할 수 있습니다. 선형 회귀 채널에 의한 경우 회귀선 값과 klose 사이. 다른 경우에는 근사 함수의 값과 얻은 실제 값 사이의 차이를 취해야 합니다. 거래당 수익성과 같은 다른 것을 근사하려면 다른 변수를 선택해야 합니다. 내 계산에 iStdDev( )를 사용하지 않습니다.

완전히 정확하지는 않지만 처음에 닫기로 계산하면 MODE_CLOSE를 사용하는 것이 조금 더 정확할 것입니다.

여기서 핵심은: 처음에 닫기로 계산하는 경우

2Yurixx 불확실성과 관련하여 - 표본의 자유도가 충분하지 않아 수렴을 안정적으로 평가할 수 없으므로 수렴 표본에만 적용 가능한 발산 표본에 통계 분석 방법을 적용할 수 있습니다. 따라서 결과는 불확실합니다.

PS 여기에서 "샘플"이라는 용어는 분포를 의미했습니다. 즉, "표본의 자유도는 주어진 표본에 작용하는 분포의 수렴을 결정할 때 신뢰도에 영향을 미친다"라고 말하는 것이 더 정확할 것입니다. 따라서 수렴 분포에서 작동하는 방법은 발산 분포(또는 수렴 사실을 알 수 없는 분포)에 적용할 수 있습니다.

행운을 빕니다.
 
안녕하세요,

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

   편차=iMA(Symbol(),Period(),PriceBars,0,MODE_SMA,PRICE_MEDIAN,카운터);
   Max=High [최고(NULL,0,MODE_HIGH,PriceBars,counter)];
   Min=낮음 [최저(NULL,0,MODE_LOW,PriceBars,counter)];
   DevAvg=(최대 + 최소 + 편차) / 3;  



시계 표시기 i probuite na grafik :-D

 
친애하는 블라디슬라프!

허스트 계수 계산에 대해 오해가 있습니다.
선형 회귀의 경우 S와 R을 계산하기 위한 2가지 옵션이 있습니다.


하지만 이것은 흥미로운 질문입니다. :)
표준 편차 수렴 기준을 충족하는 선형 회귀 채널(예: 오름차순 채널)이 있다고 가정해 보겠습니다. 한편으로 채널이 오름차순이므로 채널에 포함된 막대에서 계산된 KH는 1.0이 되는 경향이 있습니다(이동이 면에 있기 때문에). 반면에 회귀선을 기준으로 CF를 계산하면(편향 제거) 표준 편차가 정규 분포에 가깝기 때문에 CF는 0.5가 되는 경향이 있습니다. 나는 모두가 그것을 스스로 확인해야 한다고 생각합니다(그렇게 하는 것이 훨씬 더 흥미롭습니다).
 
나는 저항할 수 없었고, solandr의 대본을 다시 썼다. RMS 계산을 포함하는 것은 기본 제공 iStdDevOnArray를 사용하여 수행하는 것이 더 정확합니다. (도 수-1)로 나누기가 최대 30개 요소의 샘플에 대해 정당화되기 때문입니다.
//+------------------------------------------------------------------+
//|                                                     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);
}
//+------------------------------------------------------------------+



음, 극한값 검색 은 초기 데이터를 기반으로 하며 최고점과 최저점을 기준으로 하지 않습니다.

따라서 기준이 다소 다릅니다.

2006.05.28 14:53:08 Herst EURUSD,M15: 삭제됨
2006.05.28 14:53:08 허스트 EURUSD,M15: 허스트 = 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: 표본 표준 편차(범위) = 0.00438062
2006.05.28 14:53:08 Herst EURUSD,M15: 표본 분산 = 0.00001919
2006.05.28 14:53:08 Herst EURUSD,M15: 표본 산술 평균 = 1.27924631
2006.05.28 14:53:06 Herst EURUSD,M15: 성공적으로 로드됨
2006.05.28 14:52:59 Herst-II EURUSD,M15: 제거됨
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: 표본 표준 편차(범위) = 0.00437625
2006.05.28 14:52:59 Herst-II EURUSD,M15: 표본 산술 평균 = 1.27924631
2006.05.28 14:52:59 Herst-II EURUSD,M15: 성공적으로 로드됨
2006.05.28 14:52:54 'Herst II' 편집 중

 
친애하는 블라디슬라프!
철저한 답변 감사합니다.