una estrategia de negociación basada en la teoría de las ondas de Elliott - página 28
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
En definitiva, he aprendido muchas cosas útiles. :)
Perdón de nuevo por las respuestas tardías. Cuando se aproxima una trayectoria nunca se puede saber cuánto mejor describe una aproximación la propia trayectoria, si están en el mismo intervalo de confianza. Y, en consecuencia, todas las aproximaciones que entran en el intervalo de confianza pueden suponerse equivalentes. En principio, esto es así. Para realizar una previsión a partir de un conjunto de aproximaciones posibles (normalmente ninguna satisface los criterios de selección, porque se establecen los límites de error), es mejor elegir la "más" óptima, por así decirlo. Al estudiar el algoritmo, me di cuenta de otra peculiaridad: aunque las aproximaciones son diferentes, las previsiones son las mismas en la gran mayoría de los casos. Una vez más te recuerdo que la trayectoria en sí no es necesaria y no la estoy buscando. En cuanto a los canales, la singularidad de los canales está relacionada con el "grado de detalle" (llamémoslo así) de las estructuras estudiadas. Así, si hay tendencias, podemos identificar zonas de retroceso y estimar las probabilidades de finales de tendencia, rupturas de zonas de inversión, etc. O simplemente para identificar las áreas de incertidumbre, cuando es mejor no entrar en el mercado. Además, siempre hay que tener en cuenta las limitaciones del tamaño de la muestra, ya que, de lo contrario, el resultado tendrá un índice de incertidumbre demasiado alto.
Buena suerte y buenas tendencias.
Tengo un malentendido respecto al cálculo del coeficiente de Hurst.
En el caso de la regresión lineal tenemos 2 variantes de cálculo de S y R.
Variante 1.
S - podemos calcularlo como la suma de las diferencias de desviación a lo largo de toda la longitud de la línea de regresión lineal.
Significa:
S=0.0;
for (n=0; n<Period; n++) { S+ = MathPow( Close[n] - (a+b*n) , 2); }
S=MathSqrt( S / Period );
Y podemos calcular R como la diferencia entre la desviación máxima y mínima a lo largo de toda la línea de la regresión lineal.
Es decir:
pMax=0.0; pMin=0.0;
for (n=0; n<Period; n++)
{
dc=Close[n] - (a+b*n);
if ( dc > pMax) pMax = dc;
if ( dc < pMin) pMin = dc
}
R=MathAbs( pMax - pMin);
Opción 2.
Podemos calcular S en relación con la última barra utilizando iStdDev( ) del conjunto de indicadores técnicos estándar. Pero en este caso tendremos S calculado con respecto a la última barra, lo que equivale al cálculo de S con respecto al valor en el medio de una línea de regresión lineal.
Y R - como la diferencia entre los valores máximos y mínimos en la proyección horizontal:
pMax=High[Highest(NULL,0,MODE_HIGH,Period,i)];
pMin=Low[Lowest(NULL,0,MODE_Low,Period,i)];
lo cual no es del todo correcto, sería más correcto utilizar MODE_CLOSE si inicialmente utilizamos Close.
Por lo que tengo entendido, ¿se utiliza la segunda variante en su caso? ¿O debo estar equivocado?
Así que mi pregunta es: ¿Qué variante es más correcta para un cálculo más preciso del coeficiente de Hurst?
Gracias de antemano por su respuesta - Alexander.
Gracias, Vladislav, por alguna razón no había tenido en cuenta este punto. Pero es realmente cierto. Esto significa que, de hecho, no obtenemos varios canales, sino toda una gama delimitada por líneas con el ángulo máximo y mínimo.
No sé muy bien a qué incertidumbre se refiere. Sin embargo, la otra cosa está clara para mí. La muestra debe definir un canal de regresión, y un canal de regresión es un canal de tendencia. Si agrupamos tanto la tendencia como el piso en una muestra, dicha muestra apenas nos daría nada útil. Por lo tanto, nos enfrentamos al problema de dividir el mercado en fases y, lo que es más importante, de identificar la tendencia y el piso en las primeras fases, es decir, en el mercado real. En mi opinión, se trata de una tarea nada trivial.
Los indicadores estándar son los que más se utilizan, los que más se usan y los que más se usan son los que más se usan, los que más se usan y los que más se usan son los que más se usan:
Vot kod mojevo indikatora:
//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+La clave aquí es: si inicialmente se cuenta por Close
2Yurixx En cuanto a la incertidumbre - si el número de grados de libertad de una muestra es insuficiente, no se puede estimar su convergencia de forma fiable, y por tanto se pueden aplicar a una muestra divergente métodos de análisis estadístico que sólo son aplicables a muestras convergentes. En consecuencia, el resultado es incierto.
PS Aquí el término "muestra" se utilizó para referirse a una distribución. Es decir, sería más correcto decir "el número de grados de libertad de una muestra afecta al grado de fiabilidad para determinar la convergencia de una distribución válida para esa muestra". Los métodos válidos para las distribuciones convergentes pueden aplicarse a las divergentes (o a las distribuciones sin hecho de convergencia conocido).
Buena suerte y buena suerte con las tendencias.
Vot po4emu ja dal kod svojevo indikatora - ras4ioty idut po vsem parametram:
Un buen indicador y un buen gráfico :-D
Tengo un malentendido sobre el cálculo del coeficiente de Hurst.
En el caso de la regresión lineal tenemos 2 variantes de cálculo de S y R.
Esta es una pregunta interesante :)
Supongamos que tenemos un canal de regresión lineal, por ejemplo ascendente, que satisface el criterio de convergencia RMS. Por un lado, si el canal es ascendente, entonces el RMS calculado en las barras incluidas en él tenderá a 1,0 (ya que el desplazamiento es evidente). Por otra parte, si calculamos el RMS en relación con la línea de regresión (eliminando así el desplazamiento), el RMS tenderá a 0,5, porque el RMS se aproxima a la distribución normal. Creo que todo el mundo debería comprobarlo por sí mismo (es mucho más interesante así).
//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+La búsqueda extrema se basa en los datos brutos, no en las posiciones y las rupturas.
Por lo tanto, el criterio es algo diferente:
2006.05.28 14:53:08 Herst EURUSD,M15: pMin = 1.2691 pMax = 1.2892 R = 0.0201
28 14:53:08 Herst EURUSD,M15: RMS de muestreo (spread) = 0.00438062
2006.05.28 14:53:08 Herst EURUSD,M15: Varianza de muestreo = 0.00001919
2006.05.28 14:53:08 Herst EURUSD,M15: Media de muestreo = 1.27924631
2006.05.28 14:53:06 Herst EURUSD,M15: cargado con éxito
2006.05.28 14:52:59 Herst-II EURUSD,M15: eliminado
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: RMS de la muestra (spread) = 0.00437625
2006.05.28 14:52:59 Herst-II EURUSD,M15: Media de la muestra = 1.27924631
2006.05.28 14:52:59 Herst-II EURUSD,M15: cargado con éxito
2006.05.28 14:52:54 Compilando 'Herst-II'
Gracias por su exhaustiva respuesta.