LO SCAMBIO DI IDEE - pagina 9

 
FION:
Gli esperti possono lavorare simultaneamente - ognuno con la propria procedura guidata, e il riconoscimento delle condizioni di mercato e il reset dovrebbero essere in ogni esperto. Se questa condizione non è soddisfatta, quando la situazione del mercato cambia, le perdite sono inevitabili, perché i target e gli stop dovrebbero essere diversi in condizioni di flat e di trend. Inoltre, dovremmo considerare le condizioni intermedie - il piano basso, o lo "slittamento" con bassa attività. Fondamentalmente, l'insieme degli Expert Advisor redditizi dovrebbe mostrare i migliori risultati grazie al blocco delle posizioni Expert Advisor perdenti.

Quasi tutti hanno la propria realizzazione. Ma molti EA non hanno la correzione degli errori. Io certamente no, cerco solo di evitarli. Se facciamo qualcosa di standard, dovremmo permetterlo. Aggiungerei un simbolo() a mago, anche se potrebbe non essere necessario. Teoricamente, un ordine con un biglietto non può essere ripetuto, anche se potrebbe esserlo.
 

Sì, certo. Questo è esattamente quello che ho fatto nel codice. Nei parametri esterni impostiamo anche Magic _n, e ogni versione con il proprio mago lavorerà secondo il proprio algoritmo.

 

Sul rilevamento delle tendenze. Il ProtoType-IV Expert Advisor fornisce un esempio per un Expert Advisor multivaluta che identifica un trend da quattro ultimi estremi. Mi sono addentrato scrupolosamente in esso e ho allocato "a metà" questo pezzo di codice e ora può essere inserito in qualsiasi Expert Advisor. Se necessario. Se lo impostate nei parametri esterni

extern int     PeriodWPR=8;
extern double  CriteriaWPR=25;
extern int     ATRPeriod=40;// период ATR для индикатора 
extern double  kATR=0.5;
//-------------------------------------
int  LastUpArray[13,7];
int  PreLastUpArray[13,7];
int  LastDownArray[13,7];
int  PreLastDownArray[13,7];

Ecco il "qualificatore" stesso:

/-------------------------------------------------------------------+
//| определение тренда по четырем последним экстремумам              |
//+------------------------------------------------------------------+
int TrendByWPR()
  {
//----
   int res=0;
   int curPos,LastUpPos,PreLastUpPos,LastDownPos,PreLastDownPos,LastPeak,newPos;
   bool FindUp=true,FindDown=true,SearchCompleted=false;
   double CurWPR=iWPR(NULL,0,PeriodWPR,0);
//----
   //=======  определим - где мы находимся в данный момент
   if (CurWPR<=CriteriaWPR-100)
      {
      FindDown=false;
      LastPeak=0;
      }   
   if (CurWPR>=-CriteriaWPR)
      {
      FindUp=false;
      LastPeak=0;
      }   
   // ================   начианем поиск пичков-донышков
   while(!SearchCompleted && curPos<Bars)
      {
      if (iWPR(NULL,0,PeriodWPR,curPos)>=-CriteriaWPR && LastPeak<0)
         {
         FindUp=false;
         LastPeak=curPos;
         curPos++;
         continue;
         }
         
      if (iWPR(NULL,0,PeriodWPR,curPos)<=CriteriaWPR-100 && LastPeak<0)
         {
         FindDown=false;
         LastPeak=curPos;
         curPos++;
         continue;
         }
         
      if (iWPR(NULL,0,PeriodWPR,curPos)>=-CriteriaWPR && FindUp)
         {//искали верхушку и нашли
         newPos=curPos; 
         while(iWPR(NULL,0,PeriodWPR,curPos)>CriteriaWPR-100 && curPos<Bars)
            {// теперь нужно найти донышко, чтобы между ними найти точный пичок
            curPos++;
            }
         if (LastUpPos==0) 
            {
            LastUpPos=Highest(NULL,0,MODE_HIGH,curPos-LastPeak,LastPeak);   
            LastPeak=LastUpPos;
            }
         else 
            {
            PreLastUpPos=Highest(NULL,0,MODE_HIGH,curPos-LastPeak,LastPeak);
            LastPeak=PreLastUpPos;
            }
         curPos=newPos;
         FindUp=false;
         FindDown=true;
         curPos++;
         continue;
         }//==============
 
      if (iWPR(NULL,0,PeriodWPR,curPos)<=CriteriaWPR-100 && FindDown)
         {
         newPos=curPos; 
         while(iWPR(NULL,0,PeriodWPR,curPos)<-CriteriaWPR && curPos<Bars)
            {
            curPos++;
            }
         if (LastDownPos==0) 
            {
            LastDownPos=Lowest(NULL,0,MODE_LOW,curPos-LastPeak,LastPeak);
            LastPeak=LastDownPos;
            }   
         else 
            {
            PreLastDownPos=Lowest(NULL,0,MODE_LOW,curPos-LastPeak,LastPeak);
            LastPeak=PreLastDownPos;
            }
         curPos=newPos;
         FindDown=false;
         FindUp=true;
         curPos++;
         continue;
         }
      if (PreLastDownPos!=0 && PreLastUpPos!=0) SearchCompleted=true;
      curPos++;
      }
  /* if (Symbol()==StringSymbol && Period()==PeiodMinute)
      {
      Comment("LastUpPos=",LastUpPos,"  PreLastUpPos",PreLastUpPos,"  
 LastDownPos=",LastDownPos,"  PreLastDownPos=",PreLastDownPos,
" Время ",TimeToStr(CurTime()));
      SetUpArrows(LastUpPos,PreLastUpPos,LastDownPos,PreLastDownPos);*/
   LastUpArray[NULL,0] =LastUpPos;   
   PreLastUpArray[NULL,0]=PreLastUpPos;   
   LastDownArray[NULL,0]=LastDownPos;   
   PreLastDownArray[NULL,0]=PreLastDownPos;   
  if (High[LastUpPos]-High[PreLastUpPos]>=kATR*iATR(NULL,0,ATRPeriod,LastUpPos)
&&Low[LastDownPos]>Low[PreLastDownPos]) res=1;     
  if (Low[PreLastDownPos]-Low[LastDownPos]>=kATR*iATR(NULL,0,ATRPeriod,LastDownPos)
&&High[PreLastUpPos]>High[LastUpPos]) res=-1;    
   
   return(res);
  }

Il grafico nell'angolo mostra la funzione=0,, o =1, o=-1

 
Penso che sia più conveniente definire la tendenza con l'aiuto della regressione lineare, lo script di regressione lineare da MT-4 standard set è molto buono, mi piacerebbe fare un indicatore basato su di esso, forse qualcuno sa dove ottenere il codice sorgente? Tutte le implementazioni conosciute operano male nella dinamica delle variazioni di prezzo.Ho bisogno di un canale di lunghezza impostata da 1 a N barre con ricalcolo quando appare una nuova barra e la possibilità di emettere la sua larghezza in pip e la sua pendenza in pip alla lunghezza.E lo stesso canale di deviazione standard con una data deviazione sarebbe bello da fare. Potremmo iniziare a scavare da zero, ma se qualcuno ha una fonte da MT sarebbe molto più facile.
 

Non ho solo postato il codice per il rilevamento delle tendenze, però. Un'altra idea è venuta fuori...(la spiegherò più tardi)

Forse questo indicatore funzionerà per cominciare:

Sul grafico iPeriod=20, MASoot=20

Non sono entrato nel suo lavoro. Ma in modalità visiva è facile vedere come funziona...

 
Grazie Leonid, ma non funziona correttamente per le inversioni, ho provato molto tempo fa. Ecco un buon indicatore, ma funziona da How-low, l'idea è la stessa ma basata sulla regressione lineare.
File:
 
FION:
A mio parere, è più conveniente definire la tendenza utilizzando la regressione lineare, lo script di regressione lineare da MT-4 standard set è molto buono, mi piacerebbe fare un indicatore basato su di esso, forse qualcuno sa dove ottenere il codice sorgente? Tutte le implementazioni conosciute non funzionano bene con l'andamento dei prezzi. Ho bisogno di un canale di lunghezza impostata da 1 a N barre con ricalcolo quando appare una nuova barra e la possibilità di emettere la sua larghezza in pip e la sua pendenza in pip alla lunghezza. Sarebbe bello avere lo stesso canale di deviazione standard con la deviazione data. Potremmo iniziare da zero, ma se qualcuno ha una fonte di MT sarebbe molto più facile.


L'ho già postato da qualche parte. Posso postare la nuova versione. Un errore è stato corretto.

Ed ecco l'indicatore.

Il numero di barre viene visualizzato sullo schermo. Vengono visualizzati 3 sigma. Se il prezzo è entro uno SCO, il ricalcolo non viene eseguito, poiché tutto è nei limiti consentiti. Quando il prezzo lo sfonda, viene ricalcolato.

File:
 

Vinin, il tuo canale è molto decente e si regola correttamente. Grazie. Condivido un'idea sul filtro per l'appartamento. Tutti noi ricordiamo il rev. Reshetov e i suoi percettori. In linea di principio un perceptron è un filtro lineare. Voglio provare a filtrare fllet con un perceptron. Voglio inserire la larghezza e la pendenza di 2 canali di regressione lineare di diversa lunghezza, larghezza di Bolinger e tasso di variazione del prezzo. Penso a cosa usare come criterio di ottimizzazione. Forse un rimbalzo dai Bollinger Boundaries verso l'interno - con l'obiettivo del 75% della larghezza.

 
FION:

Vinin, il tuo canale è molto decente e si regola correttamente. Grazie, condividerò un'idea sul filtro per l'appartamento. Tutti noi ricordiamo il rev. Reshetov e i suoi percettori. In linea di principio un perceptron è un filtro lineare. Voglio provare a filtrare il volo con il perceptron. Voglio inserire la larghezza e la pendenza di 2 canali di regressione lineare di lunghezza diversa, la larghezza di Bolinger e la velocità di cambiamento del prezzo. Penso a cosa usare come criterio di ottimizzazione. Forse un rimbalzo dai Bollinger Boundaries verso l'interno - con l'obiettivo del 75% della larghezza.


Il perceptron di Reshetov non va bene. Dovremmo fare uno strato Kohonen di almeno 4-5 non-Roynes. Ma ci sarà solo un problema: tutti i valori devono essere dello stesso ordine.
 
Voglio creare un nuovo argomento, Analisi neurale dei candelieri. Posterò tutto il mio lavoro, non posso farlo da solo. Sarò in grado di fare tutto da solo.