Centrífuga algorítmica - página 13

 
Aleksei Stepanenko:

BIEN, ...

- tal vez algo más...

Tenemos que utilizar el AG para encontrar IT (puntos ideales) de alguna manera. Estoy pensando en ello.
 
Igor Makanu:

Puntos de entrada ideales en la historia - ZigZag, has rechazado

No quiero usar ZigZag porque profana la idea. Si ZZ es un indicador de puntos perfectos, entonces es el indicador más IDEAL de todos, porque acierta con los puntos perfectos con más precisión que otros. Resulta que - ZigZag debe estar en cada construcción de señales de comercio en TODA estrategia. Y esto es una tontería.

Creo que las áreas de las operaciones en el historial deben ser determinadas por los criterios: tiempo/ganancia/riesgo y uso GA.

 
Реter Konow:

No quiero usar ZigZag porque profana la idea. Si ZZ es un indicador de puntos perfectos, entonces es el indicador más IDEAL de todos, porque acierta con los puntos perfectos con más precisión que otros. Resulta que - ZigZag debe estar en cada construcción de la señal de comercio en TODA estrategia. Y esto es una tontería.

Creo que las áreas de operaciones en el historial deben ser determinadas por los criterios: tiempo/ganancia/riesgo y uso GA.

no tengo nada en contra de

No veo qué discutir, me voy por ahora.

 
Реter Konow:
Tenemos que involucrar de alguna manera a la AG en la búsqueda de TI (puntos ideales). Me lo estoy pensando.

No lo entiendo, los puntos perfectos ya se conocen en la historia, son extremos y se pueden ver con los ojos. No requiere algoritmos complejos para encontrar los extremos. Sólo tenemos que identificar las condiciones para identificarlos (por ejemplo, superar un determinado número de puntos entre dos extremos adyacentes opuestos). Entonces podemos crear un array de esos extremos (precio, fecha) y comprobar el valor de cualquier indicador en el punto de cada extremo (o en su aproximación) utilizando el mismo historial. ¿Verdad?

He aquí un código "ficticio" para buscar y almacenar los extremos de la historia (sin garantía de rendimiento):

input double Distance=100;

//каждый элемент массива будет содержать три поля: дата, цена и положение экстремума (верх, низ) 
struct sextr{datetime time; double price; int position;} Extremes[];

void OnStart()
   {
   int Total=iBars(Symbol(),0);
   for(int i=Total-1; i>=0; i--)
      {
      WriteExtremum(Extremes,Distance,Symbol(),0,i);
      }
   }   

//здесь записываем экстремумы в массив
void WriteExtremum(sextr &eExtremes[], double eDistance, string eSymbol, int eTimeFrame, int eShift)
   {
   int eFinish=ArraySize(eExtremes)-1;
   double eHigh=iHigh(eSymbol,eTimeFrame,eShift);
   double eLow=iLow(eSymbol,eTimeFrame,eShift);
   datetime eTime=iTime(eSymbol,eTimeFrame,eShift);
   //если массив пустой
   if(eFinish<0)
      {
      ArrayResize(eExtremes,++eFinish+1);
      eExtremes[eFinish].time=eTime;
      //пока мы не знаем какой из экстремумов будет в первом элементе, поэтому берём цену по середине
      //можно сделать более грамотнее, но лень. Поэтому первый экстремум у нас будет бракованный 
      //и мы его потом затрём 
      eExtremes[eFinish].price=(eHigh+eLow)/2;
      eExtremes[eFinish].position=0;
      }
   //если в массиве есть элементы
   else
      {
      //текущий элемент - максимум
      if(eExtremes[eFinish].position==1)
         {
         //произошло обновление текущего экстремума
         if(eHigh-eExtremes[eFinish].price>0)
            {
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eHigh;
            }         
         //произошло превышение расстояния между противоположными экстремумами
         if(eExtremes[eFinish].price-eLow>eDistance)
            {
            ArrayResize(eExtremes,++eFinish+1);
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eLow;
            eExtremes[eFinish].position=-1;
            }
         }
      //текущий элемент - минимум
      if(eExtremes[eFinish].position==-1)
         {
         //произошло обновление текущего экстремума
         if(eExtremes[eFinish].price-eLow>0)
            {
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eLow;
            }         
         //произошло превышение расстояния между противоположными экстремумами
         if(eHigh-eExtremes[eFinish].price>eDistance)
            {
            ArrayResize(eExtremes,++eFinish+1);
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eHigh;
            eExtremes[eFinish].position=1;
            }
         }
      //эта ситуация, когда первый элемент не закрылся, и не понятно максимум это будет или минимум
      //если произошло превышение в любую сторону, тогда затираем значения первого элемента
      if(extremes[eFinish].position==0)
         {
         //произошло превышение расстояния между противоположными экстремумами
         if(eHigh-eExtremes[eFinish].price>eDistance)
            {
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eHigh;
            eExtremes[eFinish].position=1;
            }            
         if(eExtremes[eFinish].price-eLow>eDistance)
            {
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eLow;
            eExtremes[eFinish].position=-1;
            }
         }
      }   
   }

Además, este código debe capturar y procesar los tachones, es decir, cuando una vela se superpone al máximo y al mínimo al mismo tiempo, así como el tiempo mínimo entre extremos.

Ahora que la matriz con los extremos está llena, usted sabe dónde y cuándo mirar sus indicadores. Pero las dudas sobre su utilidad persisten:)

 
Реter Konow:

No quiero usar ZigZag porque profana la idea. Si ZZ es un indicador de puntos perfectos, entonces es el indicador más IDEAL de todos, porque acierta con los puntos perfectos con más precisión que cualquier otro. Resulta que - ZigZag debe estar en cada construcción de señales de comercio en TODA estrategia. Y esto es una tontería.

Creo que las áreas de las operaciones en el historial deben ser determinadas por los criterios: tiempo/ganancia/riesgo y uso GA.

No entiendes el BIT del indicador Zig-Zag...

El indicador ZZ es, efectivamente, un indicador IDEAL, pero sólo como ajuste de otros indicadores...

 
Serqey Nikitin:

No entiendes el sentido del indicador Zig-Zag...

El indicador ZZ es, efectivamente, un indicador IDEAL, pero sólo como configuración de otros indicadores...

El problema de ZZ es que no tiene en cuenta la relación tiempo/ganancia/riesgo de las operaciones.
Los puntos de entrada ZZ producirán operaciones desproporcionadas. No tendrán en cuenta la tendencia/flotación. Los pasillos se colocarán dentro de las secciones de oficios, junto con los picos.
ZZ se adapta a todas las dinámicas, y parece que no tiene sentido elegir otros indicadores utilizándolo. Al menos no es inteligente.

Necesitamos otro enfoque. No sólo los puntos ideales de entrada/salida, sino también el cumplimiento de las proporciones internas de las operaciones: el tiempo de duración de la posición, su beneficio y el riesgo.

Por riesgo, en este contexto, no me refiero a la relación entre el lote, el stop y el depósito, sino a la estabilidad de la variación del precio en una posición abierta. Cuanto menos estable sea el cambio (martilleo), mayor será el riesgo de perder beneficios.

Por lo tanto, los puntos de entrada/salida ideales no deben buscarse según el principio de "cuanto mayor sea el beneficio, mejor", sino según el principio de "la operación ideal es la que presenta la mejor relación entre tiempo, beneficio y riesgo".

Esta es mi opinión.
 
Aleksei Stepanenko:

No lo entiendo, los puntos ideales ya se conocen en la historia, son extremos y se pueden ver con los ojos. No requiere algoritmos complejos para encontrar los extremos. Sólo tenemos que identificar las condiciones para identificarlos (por ejemplo, superar un determinado número de puntos entre dos extremos adyacentes opuestos). Entonces podemos crear un array de esos extremos (precio, fecha) y comprobar el valor de cualquier indicador en el punto de cada extremo (o en su aproximación) utilizando el mismo historial. ¿Verdad?

A continuación, un código de búsqueda y almacenamiento de extremos de la historia (sin garantía de rendimiento) como ejemplo:

Además, este código debe capturar y procesar los picos - cuando una vela cubre el máximo y el mínimo al mismo tiempo, así como el tiempo mínimo entre los extremos.

Ahora que la matriz con los extremos está llena, usted sabe dónde y cuándo mirar sus indicadores. Pero sigue habiendo dudas sobre su utilidad:)

Gracias por el código. Sin embargo, no estoy seguro de que sea fácil encontrarlo.
 

Peter, ¿puedes dibujar un ejemplo de unas cuantas operaciones dibujadas a mano en un gráfico? Entrada y salida. Preferiblemente, tome un trozo del gráfico con una variedad de movimientos de precios. Y explicar por qué en estos puntos. ¿Cuál es la relación tiempo/beneficio/riesgo de las operaciones?

Porque no entiendo bien tu idea de un punto ideal.

 
Aleksei Stepanenko:

Peter, ¿puedes dibujar un ejemplo de unas cuantas operaciones dibujadas a mano en un gráfico? Entrada y salida. Preferiblemente, tome un trozo del gráfico con una variedad de movimientos de precios. Y explicar por qué en estos puntos. ¿Cuál es la relación tiempo/beneficio/riesgo de las operaciones?

Porque no entiendo muy bien tu idea de un punto ideal.

Sí, lo haré más tarde. Todavía no lo he entendido del todo. Puede que cambie mi punto de vista. Así que, en todo caso, lo siento. ))
 

No hay problema.

El hecho de que la tomes con Zig-Zag, tiene sentido. Zig-Zag no sabe nada de la tendencia. Simplemente hace tictac como un reloj, tanto en tendencia como en plano. Sus ondas (rodillas) no son ondas de tendencia. Las ondas de tendencia se construyen según la siguiente regla: se considera que una tendencia continúa si conquista nuevos picos. Esto significa que la siguiente onda de tendencia siempre sobrepasa la anterior, y si no lo hace, entonces no es una onda.

Razón de la queja: