Centrifuga algoritmica - pagina 13

 
Aleksei Stepanenko:

OK, ...

- forse qualcos'altro...

Dobbiamo usare la GA per trovare IT (punti ideali) in qualche modo. Ci sto pensando.
 
Igor Makanu:

Punti di ingresso ideali sulla storia - ZigZag, hai rifiutato

Non voglio usare ZigZag perché profana l'idea. Se ZZ è un indicatore di punti perfetti, allora è l'indicatore più IDEALE di tutti, perché colpisce i punti perfetti più accuratamente di altri. Si scopre - ZigZag dovrebbe essere in ogni build di Trade Signal in OGNI strategia. E questa è una sciocchezza.

Credo che le aree dei trade sulla storia dovrebbero essere determinate dai criteri: tempo/profitto/rischio e uso GA.

 
Реter Konow:

Non voglio usare ZigZag perché profana l'idea. Se ZZ è un indicatore di punti perfetti, allora è l'indicatore più IDEALE di tutti, perché colpisce i punti perfetti più accuratamente di altri. Si scopre - ZigZag dovrebbe essere in ogni build di Trade Signal in OGNI strategia. E questa è una sciocchezza.

Credo che le aree di trade sulla storia dovrebbero essere determinate dai criteri: tempo/profitto/rischio e uso GA.

Non ho niente contro

Non vedo cosa discutere, sono fuori per ora.

 
Реter Konow:
Dobbiamo in qualche modo coinvolgere il GA nella ricerca di IT (punti ideali). Ci sto pensando.

Non capisco, i punti perfetti sono già conosciuti nella storia, sono estremi e si vedono con gli occhi. Non richiede algoritmi complessi per trovare gli estremi. Dobbiamo solo identificare le condizioni per identificarli (per esempio, il superamento di un certo numero di punti tra due estremi adiacenti opposti). Poi possiamo creare un array di questi estremi (prezzo, data) e controllare il valore di qualsiasi indicatore nel punto di ogni estremo (o nel suo avvicinamento) usando la stessa storia. Giusto?

Ecco un codice "make-it-or-break-it" per cercare e memorizzare gli estremi della storia (senza garanzia di prestazioni):

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;
            }
         }
      }   
   }

Inoltre, questo codice dovrebbe catturare ed elaborare gli studs - cioè quando una candela si sovrappone sia al massimo che al minimo allo stesso tempo, così come il tempo minimo tra gli estremi.

Ora che la matrice con gli estremi è riempita, sai dove e quando guardare i tuoi indicatori. Ma i dubbi sulla loro utilità rimangono:)

 
Реter Konow:

Non voglio usare ZigZag perché profana l'idea. Se ZZ è un indicatore di punti perfetti, allora è l'indicatore più IDEALE di tutti, perché colpisce i punti perfetti più accuratamente di qualsiasi altro. Si scopre - ZigZag dovrebbe essere in ogni costruzione di Trade Signal in OGNI strategia. E questa è una sciocchezza.

Credo che le aree di trade sulla storia dovrebbero essere determinate dai criteri: tempo/profitto/rischio e uso GA.

Non capisci il BIT dell'indicatore Zig-Zag...

L'indicatore ZZ è effettivamente un indicatore IDEALE, ma solo come impostazione per altri indicatori...

 
Serqey Nikitin:

Non capisci il senso dell'indicatore Zig-Zag...

L'indicatore ZZ è davvero un indicatore IDEALE, ma solo come setup per altri indicatori...

Il problema di ZZ è che non tiene conto del rapporto tempo/profitto/rischio dei trade.
I punti di entrata ZZ produrranno scambi sproporzionati. Non terranno conto del trend/float. I corridoi saranno collocati all'interno delle sezioni di mestieri, insieme ai picchi.
La ZZ accoglie tutte le dinamiche, e sembra insensato scegliere altri indicatori che la utilizzano. Almeno non è intelligente.

Abbiamo bisogno di un altro approccio. Non solo punti di entrata/uscita ideali, ma anche l'osservanza delle proporzioni interne delle operazioni - il tempo di durata della posizione, il suo profitto e il rischio.

Per rischio, in questo contesto, non intendo il rapporto tra lotto, stop e deposito, ma la stabilità del cambiamento del prezzo in una posizione aperta. Meno stabile è il cambiamento (martellamento), maggiore è il rischio di perdere profitto.

Quindi, i punti di entrata/uscita ideali non dovrebbero essere cercati secondo il principio "più alto è il profitto, meglio è", ma secondo il principio "l'affare ideale è l'affare con il miglior rapporto di tempo, profitto e rischio".

Questa è la mia opinione.
 
Aleksei Stepanenko:

Non capisco, i punti ideali sono già noti nella storia, sono estremi e si vedono con gli occhi. Non richiede algoritmi complessi per trovare gli estremi. Dobbiamo solo identificare le condizioni per identificarli (per esempio, il superamento di un certo numero di punti tra due estremi adiacenti opposti). Poi possiamo creare un array di questi estremi (prezzo, data) e controllare il valore di qualsiasi indicatore nel punto di ogni estremo (o nel suo avvicinamento) usando la stessa storia. Giusto?

Ecco un codice a gomito per cercare e memorizzare gli estremi della storia (senza garanzia di prestazioni) come esempio:

Inoltre, questo codice dovrebbe catturare ed elaborare i picchi - quando una candela copre sia il massimo che il minimo allo stesso tempo, così come il tempo minimo tra gli estremi.

Ora che l'array con gli estremi è compilato, sai dove e quando guardare i tuoi indicatori. Ma rimangono dubbi sulla loro utilità:)

Grazie per il codice. Non sono sicuro di quanto sia facile trovarlo, però.
 

Peter, puoi fare un esempio di alcuni trade disegnati a mano su un grafico? Entrata e uscita. Preferibilmente prendete un pezzo del grafico con una varietà di movimenti di prezzo. E spiegare perché in questi punti. Qual è il rapporto tempo/profitto/rischio degli affari?

Perché non capisco bene la tua idea di punto ideale.

 
Aleksei Stepanenko:

Peter, puoi fare un esempio di alcuni trade disegnati a mano su un grafico? Entrata e uscita. Preferibilmente prendete un pezzo del grafico con una varietà di movimenti di prezzo. E spiegare perché in questi punti. Qual è il rapporto tempo/profitto/rischio degli affari?

Perché non capisco bene la tua idea di punto ideale.

Sì, lo farò più tardi. Io stesso non l'ho ancora capito. Potrei cambiare il mio punto di vista. Quindi, semmai, scusate. ))
 

Nessun problema.

Il fatto che tu te la prenda con Zig-Zag ha senso. Zig-Zag non sa nulla della tendenza. Sta ticchettando come un orologio sia in tendenza che piatto. Le sue onde non sono onde di tendenza. Le onde di tendenza sono costruite secondo la seguente regola: una tendenza è considerata continua se conquista nuovi picchi. Questo significa che la prossima onda di tendenza supera sempre la precedente, e se non lo fa, allora non è un'onda.

Motivazione: