una estrategia de negociación basada en la teoría de las ondas de Elliott - página 125

 
la dispersión de la variable aleatoria (precio) del modelo de aproximación (función deseada) no puede ser menor que la dispersión de la propia variable aleatoria (suma de los cuadrados de Close[i]-Close[i+1])

"no puede ser menos", ¿es ya el propio criterio? ¿O es sólo un enunciado del teorema?

La cuestión es que, hasta donde yo entiendo, no es aplicable en este caso. El criterio puede utilizarse para encontrar un orden de polinomio que sea suficiente para la curva de aproximación. Pero esta curva se aproximará a la trayectoria. ¿Puede imaginarse un orden de polinomio que reproduzca de forma suavizada el comportamiento de la trayectoria?
 
En términos sencillos, ¿llamaste a una prueba?
 
¿Pediste una simple adaptación?

:-)
 
Un libro que se ajusta plenamente al tema de la rama (búsqueda de soluciones). Además de los problemas de estadística, hay ejemplos de cálculos en Excel, Mathcad y Statistica.
No he encontrado ninguno en la mega lista.

 
Sí, también lo encontré en Amazon - http://www.ozon.ru/context/detail/id/1908057/
 
Sí, también lo encontré en Amazon - http://www.ozon.ru/context/detail/id/1908057/

Rosh, ¿podrías escanear el índice? Me encantaría verlo. Tardarían mucho tiempo en enviarlo a través de Ozone. Pero tal vez podría hacer una reseña del libro en un futuro próximo. Es decir, ¿qué crees que sería útil?
 
Hice un archivo de 10 fotos sin procesar, pero era demasiado grande (más de 6 MB), así que probablemente lo publicaré más tarde. Sin embargo, procesé una página sobre este tema:

 
Imágenes guardadas (9 páginas de contenido) en 2 archivos, total 1100 kB

https://c.mql5.com/mql4/forum/2006/08/soderz.zip
de 1 a 5

https://c.mql5.com/mql4/forum/2006/08/soderz2.zip
de 6 a 9
 
Encontré un EA que opera con canales de regresión (eso es lo que dice) desde el 20.04.05
Yo estoy usando MQL-II, pero tal vez alguien pueda necesitarlo. El autor no aparece, no recuerdo de dónde lo saqué.

/*[[
VC-1hr
Lots := 0.1
Notes := Use in H1 timeframe.
Update on every tick := Yes
Enable Alerts := Yes
Disable alert once hit := No
Lots := 1
Stop Loss := 999
Take Profit := 200
Trailing Stop := 999
]]*/


// ====================================================================================================
// DECLARATION AND ASSIGNMENT
// ====================================================================================================

defines: Risk(1),mm(1),maxTradesPerPair(1);
Inputs : NumberName(1), iPeriod(21), MAShoot(50), DrawVertical(0), DrawText(0), ShowMA(0), LineWeight(1), BarsCount(0);
vars: spread(0),
Slippage(5),
sl(0),tp(0),
mode(0),
lastHigh(0),lastLow(0),lastOpen(0),lastClose(0),
target(0),
entryTS(0),
cnt(0),
first(0),
lotMM(0),
tHour(0),
CurrentTrades(0),
AccountIsMini(False);  // See comments near assignment statement below.

Var : shift(0), n_begin(0), n_end(0), n(0), a_(0), b_(0), a1(0), a2(0), a3(0), b1(0);
var : y1(0), y2(0), price(0), BarBegin(100), BarEnd(1);
var : tmp_div_high(0), tmp_div_low(0), stddiv_low(0),  stddiv_high(0), tmp_div(0);
var : x_n_up(0), x_n_down(0), x_1_up(0), x_1_down(0);
var : check_upper_chanel(false), color_1(0), color_2(0), name(""), angle(0), ratio(0), ratio_currency(0);
Var : MA(0), value(0), Bars_(170), check_low(false), check_high(false);
Var : save_low(0), save_high(0), save_shift_low(0), save_shift_high(0), save_shift(0);
Var : MAType(0), MAPrice(0);

//================================================================================================================
SetLoopCount(0);
comment("Auto Regression channel");

if BarsCount < 1 then Bars_ = Bars
else Bars_ = BarsCount;

save_low = -1;
save_high = -1;
save_shift_low = -1;
save_shift_high = -1;

check_low = false;	
check_high = false;	

MAType = MODE_SMA;
MAPrice = PRICE_CLOSE;

if Close[1] > 80 then ratio_currency = 100
else ratio_currency = 10000;

For shift = Bars_-1 Downto 0 Begin
	MA = iMAEx(iPeriod, MAType, 0, MAPrice, shift);
	
	if ShowMA then SetIndexValue(shift, MA);
	
	if MA - MAShoot/ratio_currency > Close[shift] then
	{
			
		if Close[Shift] < save_low or save_low = -1  then
		{
			check_low = true;
					
			save_low = close[Shift];
			save_shift_low = shift;
		};		
	};
	
	if MA  +  MAShoot/ratio_currency< Close[shift] then
	{
		if save_high < Close[Shift] or save_high = -1 then
		{
			check_high = true;	
			
			save_high = close[Shift];
			save_shift_high = shift;
		};
	};

	if check_low then
	{	
		if MA + MAShoot/ratio_currency < Close[shift] then 
		{
			check_low = false;	
			save_low = -1;
		};
	};
	
	if check_high then
	{
		if MA - MAShoot/ratio_currency > Close[shift] then 
		{						
			check_high = false;	
			save_high = -1;
		};
	};
	
End;

if save_shift_low > save_shift_high then
{
	n_begin = save_shift_low;
	n_end = save_shift_high;
}
else
{
	n_begin = save_shift_high;
	n_end = save_shift_low;
};

if n_end = 0 then n_end = 1; 
n = (n_begin - n_end + 1); 

a1 = 0;
a2 = 0;
a3 = 0;
b1 = 0;
a_ = 0;
b_ = 0;
y1 = 0;
y2 = 0;
tmp_div_high = 0;
tmp_div_low = 0;
tmp_div = 0;

if close[n_begin] < close[n_end] then check_upper_chanel = true
else check_upper_chanel = false;

For shift = n_begin Downto n_end Begin
	if check_upper_chanel then price = low[shift]
	else price = high[shift];
	
	a1 = a1 + shift*price;
	a2 = a2 + shift;
	a3 = a3 + price;
	b1 = b1 + shift*shift;
End;

b_ = (n*a1 - a2*a3)/(n*b1 - a2*a2);
a_ = (a3 - b_*a2)/n;
y1 = a_ + b_*n_begin;
y2 = a_ + b_*n_end;

MoveObject(	"Regression_middle" + NumberName, OBJ_TRENDLINE, Time[n_begin], y1, Time[n_end], y2, yellow, LineWeight, STYLE_SOLID);	

For shift = n_begin Downto n_end Begin
	if check_upper_chanel then price = low[shift]
	else price = high[shift];
	
	tmp_div = tmp_div + (price - (a_ + b_*shift))*(price - (a_ + b_*shift));	
End;	

stddiv_low = sqrt(tmp_div/n);
stddiv_high = sqrt(tmp_div/n);

x_n_up = y1 + 2*stddiv_high;
x_1_up = y2 + 2*stddiv_high;

x_n_down = y1 - 2*stddiv_low;
x_1_down = y2 - 2*stddiv_low;

if check_upper_chanel then  {
	color_1 = blue;
	color_2 = red;
}else{
	color_1 = red;
	color_2 = blue;
};
	
//upper
MoveObject(	"Regression_upper" + NumberName, OBJ_TRENDLINE, Time[n_begin], x_n_up, Time[n_end], x_1_up, color_1, LineWeight, STYLE_SOLID);	
//lower
MoveObject(	"Regression_lower" + NumberName, OBJ_TRENDLINE, Time[n_begin], x_n_down, Time[n_end], x_1_down, color_2, LineWeight, STYLE_SOLID);	

if  DrawText then
{	
	name = "Regression_bars_begin" + NumberName;
	MoveObject(name, OBJ_TEXT, Time[n_begin], x_n_down, Time[n_begin], x_n_down, red, 1, STYLE_SOLID);			
	SetObjectText(name, NumberToStr(n_begin,0), "System", 10, White);	
		
	name = "Regression_bars_end" + NumberName;
	MoveObject(name, OBJ_TEXT, Time[n_end], x_1_up, Time[n_end], x_1_up, red, 1, STYLE_SOLID);			
	SetObjectText(name, NumberToStr(n_end,0), "System", 10, White);	
}else{
	DelObject("Regression_bars_end" + NumberName, 0, 0, 0, 0);
	DelObject("Regression_bars_begin" + NumberName, 0, 0, 0, 0);
}

if DrawVertical then
{
	MoveObject(	"Regressin_begin" + NumberName, OBJ_VLINE, 	Time[n_begin], y1, Time[n_begin], y2, 	silver, 1, STYLE_DOT);	
	MoveObject(	"Regressin_end" + NumberName, OBJ_VLINE, 	Time[n_end], y1, Time[n_end], y2, 	silver, 1, STYLE_DOT);	
}else{
	DelObject("Regressin_begin" + NumberName, 0, 0, 0, 0);
	DelObject("Regressin_end" + NumberName, 0, 0, 0, 0);
}

//================================================================================================================


entryTS   = 4 * Point;          // Entry trailing stop - points
target    = TakeProfit * Point; // Profit target - points
lastHigh  = High[1];            // Last bar high
lastLow   = Low[1];             // Last bar low
lastOpen  = Open[1];            // Last bar open
lastClose = Close[1];           // Last bar close
spread    = Ask - Bid;          // Spread



// ====================================================================================================
// VALIDATION
// ====================================================================================================

if CurTime - LastTradeTime < 300 Then Exit;
if Bars < 100 or TakeProfit < 10 then Exit;
if IsIndirect(Symbol) = True then Exit;

if TrailingStop < 5 then
{
  print("invalid Trailing Stop");
  Exit;
};

// ====================================================================================================
// DATE CHOKE - For testing purposes
// ====================================================================================================
if TimeYear(time[0]) < 2004 then Exit;

// ====================================================================================================
// PYRAMIDING - LINEAR
// Money management risk exposure compounding
// ====================================================================================================

AccountIsMini = False; // Change to False for real trading w/ 100k/regular account
                       //        or for all backtesting, since backtests allow
                       //        fractional lots.
                       // Change to True for real trading w/ mini account

if mm <> 0 then 
{
  lotMM = Ceil(Balance * risk / 10000) / 10;

  if lotMM < 0.1 then lotMM = lots;

  if lotMM > 1 then lotMM = Ceil(lotMM);

  if AccountIsMini then lotMM = lotMM * 10;

  if lotMM > 100 then lotMM = 100;
}
else {
  lotMM = Lots; // Change mm to 0 if you want the Lots parameter to be in effect
};

// ====================================================================================================
// OPEN ORDER CHECK -
// Each instance of a script is attached to one currency pair.
// When this check executes, it sets CurrentTrades to 1 so that
// only one trade for this symbol will be open, which is enforced
// by "if CurrentTrades = 0".
// ====================================================================================================

CurrentTrades = 0;

for cnt = 1 to TotalTrades
{ 
  if OrderValue(cnt,VAL_SYMBOL) = Symbol then
  {
    CurrentTrades = CurrentTrades + 1; 
  };
};

// ====================================================================================================
// TRADE ENTRY
// ====================================================================================================

if CurrentTrades < maxTradesPerPair then
{
  //LONG TRADES ENTRY CRITERIA

  if //lastOpen < lastClose        and  // Last bar bullish, open less than close;
     check_upper_chanel = true   and  // Ask above lastHigh, and SAR less than Ask,
     y2 > Close     and  // then request order.
     tHour != TimeHour(time[0])  then
  {
    tHour=TimeMinute(time[0]);

    // Set stoploss to last bar low so that Bid must hit lastLow to exit.

    sl = x_1_down - (2 * point);
    tp = Ask + target;
  
    SetOrder(OP_BUY,
             lotMM,
             Bid,
             Slippage,
             sl,
             tp,
             LIME);
    Exit;
  };

  //SHORT TRADES ENTRY CRITERIA

  if //lastOpen > lastClose       and  // Last bar bearish, open greater than close;
     check_upper_chanel = False and  // if Bid below lastLow, and SAR greater than Bid,
     y2  < Close  and // then request order.
     tHour != TimeHour(time[0]) then
  {
    tHour=TimeMinute(time[0]);

    // Set stoploss to last bar high so that Ask must hit lastHigh to exit.

    sl = x_1_up + (2 * point);
    tp = Bid - target;

    SetOrder(OP_SELL,
             lotMM,
             Ask,
             Slippage,
             sl,
             tp,
             RED);
    Exit;
  }; 
}; // end of if CurrentTrades < maxTradesPerPair

// ====================================================================================================
// TRAILING STOP UPDATE
// ====================================================================================================

if CurrentTrades = 0 then exit;

for cnt = 1 to TotalTrades
{ 
  if OrderValue(cnt,VAL_SYMBOL) = Symbol then 
  {
    if OrderValue(cnt,VAL_TYPE) = OP_BUY then 
    {
      // If Bid - Open is now higher than entryTS pips profit,
      // and the stop loss order is lower than
      // entryTS pips below the Bid, then adjust the stop loss part of
      // the order to the Bid - entryTS pips

      if (Bid - OrderValue(cnt,VAL_OPENPRICE)) > (entryTS) then
      {
        if OrderValue(cnt,VAL_STOPLOSS) < x_1_down then
        {
          ModifyOrder(OrderValue(cnt,VAL_TICKET),
                      OrderValue(cnt,VAL_OPENPRICE),
                      x_1_down - (2 * point),
                      OrderValue(cnt,VAL_TAKEPROFIT),
                      BLUE);
          Exit;
        }; 
      };
      
      // if Stop Loss > Open Price then Set Takeprofit 

      if OrderValue(cnt,VAL_STOPLOSS) >= OrderValue(cnt,VAL_OPENPRICE) then
      {
        ModifyOrder(OrderValue(cnt,VAL_TICKET),
                    OrderValue(cnt,VAL_OPENPRICE),
                    OrderValue(cnt,VAL_STOPLOSS),
                    Ask + TakeProfit * Point,
                    BLUE);
        Exit;
      };
    }; // end OP_BUY check

    if OrderValue(cnt,VAL_TYPE) = OP_SELL then
    {
      // If Open - Ask is now higher than entryTS pips profit,
      // and the stop loss order is higher than
      // entryTS pips above the Ask, then adjust the stop loss part of
      // the order to Ask + entryTS pips

      if (OrderValue(cnt,VAL_OPENPRICE) - Ask) > (entryTS) then
      {
        if OrderValue(cnt,VAL_STOPLOSS) > x_1_up then
        {
          ModifyOrder(OrderValue(cnt,VAL_TICKET),
                      OrderValue(cnt,VAL_OPENPRICE),
                      x_1_up + (2 * point),
                      OrderValue(cnt,VAL_TAKEPROFIT),
                      BLUE);
          Exit;
        };
      };

      // if Stop Loss < Open Price then Set Takeprofit 

      if OrderValue(cnt,VAL_STOPLOSS) <= OrderValue(cnt,VAL_OPENPRICE) then
      {
        ModifyOrder(OrderValue(cnt,VAL_TICKET),
                    OrderValue(cnt,VAL_OPENPRICE),
                    OrderValue(cnt,VAL_STOPLOSS),
                    Bid - TakeProfit * Point,
                    BLUE);
        Exit;
      };
    };  // end OP_SELL check
  }; // end Symbol check
}; // end for cnt=1 to TotalTrades


 
Hice un archivo de 10 fotos sin procesar, pero era demasiado grande (más de 6MB), así que probablemente lo publicaré más tarde. Sin embargo, he editado una página sobre este tema:<br / translate="no">


Hay una inexactitud bastante grave en los postulados expuestos en el libro (por lo que veo en la página publicada) (IMHO: incomprensión de la esencia del proceso). La cuestión es que el precio no es una función del tiempo. En cualquier caso, es imposible demostrarlo de forma concluyente.
En esa afirmación que he descrito, el enfoque se basa en la suposición de que es imposible definir de forma fiable una función de qué parámetro es el precio. Otro supuesto es que el precio es una función de una superposición de factores externos. Estamos tratando de aproximar los cambios en el precio y relacionarlos con los cambios en el tiempo, que no es lo mismo. En otras palabras, el tiempo no es una variable independiente, sino que depende de varios factores. Se trata de un tiempo interno del sistema en el momento en que se produce el evento. Un observador externo que observe todo esto desde fuera en su sistema de coordenadas puede sacar conclusiones absolutamente incorrectas. Por ejemplo: nos situamos en una carretera y contamos el número de coches que han pasado en cualquier dirección. Por supuesto, basándonos en algunos datos, podemos decir que el número de coches que pasan por la vía es una función del tiempo, pero ¿es así? He puesto especialmente un ejemplo cuyo absurdo es evidente. Aquí todo es más complicado ;).

Saludos, Vladislav.
Buena suerte y felices tendencias.