L'ÉCHANGE D'IDÉES - page 9

 
FION:
Les experts peuvent travailler simultanément - chacun avec son propre assistant, et la reconnaissance des conditions du marché et la réinitialisation devraient être dans chaque expert. Si cette condition n'est pas remplie, lorsque la situation du marché change, les pertes sont inévitables, parce que les objectifs et les arrêts devraient être différents dans les conditions de plat et de tendance. En outre, nous devrions considérer les conditions intermédiaires - le faible plat, ou le "glissement" avec une faible activité. Fondamentalement, l'ensemble des conseillers experts rentables devrait afficher les meilleurs résultats grâce au verrouillage des positions perdantes des conseillers experts.

Presque tout le monde a sa propre réalisation. Mais de nombreux EA ne disposent pas de la correction d'erreurs. Certainement pas. J'essaie juste de les éviter. Si nous faisons quelque chose de standard, nous devrions le permettre. J'ajouterais un symbole() à magicien, bien que cela puisse être inutile. Théoriquement, une commande avec un seul ticket ne peut pas être répétée, bien que cela puisse être le cas.
 

Oui, bien sûr. C'est exactement ce que j'ai fait dans le code. Dans les paramètres externes, nous avons également défini Magic _n, et chaque version avec son propre magicien fonctionnera selon son propre algorithme.

 

Sur la détection des tendances. Le ProtoType-IV Expert Advisor fournit un exemple d'un Expert Advisor multi-devises qui identifie une tendance par quatre derniers extrema. J'y ai scrupuleusement pénétré et alloué "à moitié" ce bout de code et maintenant il peut être inséré dans n'importe quel Conseiller Expert. Si nécessaire. Si vous le définissez dans les paramètres externes

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

Voici le "qualificatif" lui-même :

/-------------------------------------------------------------------+
//| определение тренда по четырем последним экстремумам              |
//+------------------------------------------------------------------+
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);
  }

Le graphique dans le coin montre la fonction=0,, ou =1, ou=-1

 
Je pense qu'il est plus pratique de définir la tendance avec l'aide de la régression linéaire, le script de régression linéaire de MT-4 standard set est très bon, je voudrais faire un indicateur basé sur lui, peut-être quelqu'un sait où obtenir le code source ? Toutes les implémentations connues fonctionnent mal dans la dynamique des changements de prix.J'ai besoin d'un canal de longueur fixe de 1 à N barres avec recalcul quand une nouvelle barre apparaît et la possibilité de sortir sa largeur en pips et sa pente en pips à la longueur.Nous pourrions commencer à creuser à partir de zéro, mais si quelqu'un a une source de MT, ce serait beaucoup plus facile.
 

Je n'ai pas seulement posté le code pour la détection des tendances, cependant. Une autre idée m'est venue...(je l'expliquerai plus tard)

Peut-être que cet indicateur fonctionnera pour commencer :

Sur le graphique iPeriod=20, MASoot=20

Je ne suis pas entré dans son travail. Mais en mode visuel, il est facile de voir comment cela fonctionne...

Dossiers :
 
Merci Leonid, mais il ne fonctionne pas correctement pour les retournements, je l'ai essayé il y a longtemps. Voici un bon indicateur, mais il fonctionne par How-low, l'idée est la même mais basée sur la régression linéaire.
Dossiers :
 
FION:
A mon avis, il est plus pratique de définir la tendance en utilisant la régression linéaire, le script de régression linéaire du jeu standard MT-4 est très bon, j'aimerais faire un indicateur basé sur celui-ci, peut-être que quelqu'un sait où obtenir le code source ? Toutes les implémentations connues ne fonctionnent pas bien avec la tendance des prix. J'ai besoin d'un canal de longueur fixe de 1 à N barres avec recalcul quand une nouvelle barre apparaît et la possibilité de sortir sa largeur en pips et sa pente en pips à la longueur. Il serait bien d'avoir le même canal d'écart type avec l'écart donné. Nous pourrions partir de zéro, mais si quelqu'un a une source de MT, ce serait beaucoup plus facile.


Je l'ai déjà posté quelque part. Je peux poster la nouvelle version. Une erreur a été corrigée.

Et voici l'indicateur.

Le nombre de barres est affiché à l'écran. 3 sigmas sont affichés. Si le prix se situe dans la limite d'un SCO, le nouveau calcul n'est pas effectué, car tout est dans les limites autorisées. Lorsque le prix le franchira, il sera recalculé.

Dossiers :
 

Vinin , votre chaîne est très décente et s'ajuste correctement. Merci. Je vais partager une idée sur le filtre pour le plat. Nous nous souvenons tous du Rév. Reshetov et ses perceptrons. En principe, un perceptron est un filtre linéaire. Je veux essayer de filtrer la fllet avec un perceptron. Je veux saisir la largeur et la pente de 2 canaux de régression linéaire de longueur différente, la largeur de Bolinger et le taux de changement de prix. Je pense à ce qu'il faut utiliser comme critère d'optimisation. Peut-être un rebond des limites de Bollinger vers l'intérieur - avec l'objectif de 75% de la largeur.

 
FION:

Vinin , votre chaîne est très décente et s'ajuste correctement. Merci, je vais partager une idée sur le filtre pour le plat. Nous nous souvenons tous du Rév. Reshetov et ses perceptrons. En principe, un perceptron est un filtre linéaire. Je veux essayer de filtrer les vols par perceptron. Je veux entrer la largeur et la pente de 2 canaux de régression linéaire de longueur différente, la largeur de Bolinger et la vitesse de changement de prix. Je pense à ce qu'il faut utiliser comme critère d'optimisation. Peut-être un rebond des limites de Bollinger vers l'intérieur - avec l'objectif de 75% de la largeur.


Le perceptron de Reshetov ne fera pas l'affaire. Nous devrions faire une couche Kohonen d'au moins 4-5 non-Roynes. Mais il y aura un seul problème : toutes les valeurs doivent être du même ordre.
 
Je veux créer un nouveau sujet, Analyse neuronale des chandeliers. Je vais poster tout mon travail, je ne peux pas le faire seul. Je pourrai le faire tout seul.