expert basé sur la théorie des vagues d'Elliott - page 12

 
Yurixx:
Entier:
Yurixx:


Imaginez un simple TS basé sur un oscillateur normalisé. Aux sommets, nous vendons, et aux creux, nous achetons. Il suffit donc d'identifier l'extremum au bon moment pour réussir ses transactions. C'est simple, n'est-ce pas ? Et certainement assez. Pouvez-vous le faire rapidement (pas très rapidement) ? Ou au moins le faire ?


Can et très et rapide.


Super ! Ensuite, lancez un indicateur RSI(14,Close) sur EURUSD, M1 et résolvez le problème de l'identification sans retard des extremums RSI.

L'amplitude de la variation du RSI entre les extrêmes adjacents doit être d'au moins 25.


Formulez le problème de manière précise et complète. Si elle est théoriquement soluble, elle l'est aussi pratiquement. Une fois le problème correctement formulé, ils peuvent tous être résolus (et vous pouvez le faire vous-même). Dans ce problème, le critère d'identification d'un extremum est le recul d'une valeur de 25 unités, c'est-à-dire que l'identification par un tel critère sans décalage ne peut être résolue théoriquement. Si vous définissez un critère - plus de 25 à gauche et plus de 5 mais moins de 10 à droite - le décalage sera moindre mais les faux signaux seront plus nombreux.

 
//+------------------------------------------------------------------+
//|                                                     toYurixx.mq4 |
//|                                                                * |
//|                                                                * |
//+------------------------------------------------------------------+
#property copyright "*"
#property link      "*"
 
#property indicator_separate_window
#property indicator_maximum 100
#property indicator_minimum 0
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 DeepSkyBlue
#property indicator_color3 Red
//---- input parameters
extern int       RightMore=5;
extern int       RightLess=10;
extern int       LeftMore=25;
 
 
//---- buffers
double rsi[];
double u[];
double l[];
 
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,rsi);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,159);
   SetIndexBuffer(1,u);
   SetIndexEmptyValue(1,0.0);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,159);
   SetIndexBuffer(2,l);
   SetIndexEmptyValue(2,0.0);
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    limit=Bars-IndicatorCounted();
      for(int i=0;i<limit;i++){
         rsi[i]=iRSI(NULL,0,14,0,i);
      }
      ArrayInitialize(u,EMPTY_VALUE);
      ArrayInitialize(l,EMPTY_VALUE);      
      for(i=Bars-1;i>=0;i--){
         double max=rsi[i];
         int maxb;
         for(int j=i;j<Bars;j++){
               if(rsi[j]>max){
                  max=rsi[j];
                  maxb=j;
               }
               if(max-rsi[i]>RightLess){
                  break;//не состоялся
               }
               if(max-rsi[j]>LeftMore){
                     if(max-rsi[i]>RightMore){//нашли
                        u[maxb]=rsi[maxb];
                     }
                  break;
               }
         }
         
         max=rsi[i];
         for(j=i;j<Bars;j++){
               if(rsi[j]<max){
                  max=rsi[j];
                  maxb=j;
               }
               if(rsi[i]-max>RightLess){
                  break;//не состоялся
               }
               if(rsi[j]-max>LeftMore){
                     if(rsi[i]-max>RightMore){//нашли
                        l[maxb]=rsi[maxb];
                     }
                  break;
               }
         }         
         
      }
      
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Total 23.06.2007 01:45 - 23.06.2007 01:08 = 37 minutes il m'a fallu pour résoudre le problème, mais j'ai aussi pris du café pendant ce temps. Je dois également introduire le critère du nombre de barres à gauche de l'extremum et à droite.

 
Integer:
Yurixx:


Super ! Lançons alors l'indicateur RSI(14,Close) sur EURUSD, M1 et résolvons le problème de l'identification sans décalage des extrema RSI.

L'amplitude de la variation de l'indice RSI entre deux extrema adjacents doit être d'au moins 25.


Formulez le problème de manière précise et complète. Si elle est théoriquement soluble, elle l'est aussi pratiquement. Une fois le problème correctement formulé, ils peuvent tous être résolus (et vous pouvez le faire vous-même). Dans ce problème, le critère d'identification d'un extremum est un recul de 25 unités, c'est-à-dire que l'identification par un tel critère sans décalage ne peut être résolue théoriquement. Si vous définissez un critère - plus de 25 à gauche et plus de 5 mais moins de 10 à droite - le décalage sera moindre mais les faux signaux seront plus nombreux.


Merci, bien sûr, pour le code, mais il n'est, comme vous le comprenez vous-même, ni la solution ni le problème.

Je l'ai peut-être formulé trop succinctement, mais c'est en fait une déclaration tout à fait correcte. Elle peut être plus longue. Ce qu'il faut, c'est une procédure d'identification d'un extremum local qui fonctionne en temps réel plutôt que sur l'historique. L'identification consiste à déterminer, à la fin d'une barre, si le point approprié du graphique indicateur est un point d'extremum local. Un extremum local est un extremum dont la variation de la valeur de l'indicateur à droite et à gauche est d'au moins 25,0 %.

Dans la mesure où le changement à venir de l'indicateur à droite du point extrême attendu est inconnu au moment de la fin de la barre, il s'agit d'une prédiction optimale du comportement de l'indicateur. Cette prédiction n'est pas une extrapolation car les valeurs de l'indicateur à droite du point extrême ne sont pas intéressantes. La seule condition est la condition d'extremum, c'est-à-dire que les valeurs de l'indicateur changeront par la valeur conditionnée. La prédiction optimale est comprise au sens statistique, c'est-à-dire que la prévision doit avoir une fiabilité suffisamment élevée.

Formellement, tout semble différent, mais je n'ai rien dit de nouveau pour vous. Tout cela est déjà là en trois mots : "identification sans décalage".

Je voudrais attirer votre attention sur le fait qu'un script élémentaire de recherche d'extrema avec des propriétés données sur une histoire co-cadrée aurait pu être écrit de manière plus concise et plus simple. Les boucles imbriquées sont une surcharge coûteuse et deviendront un goulot d'étranglement pour les grands tableaux. Tout cela peut être fait en une seule fois, c'est-à-dire qu'une seule nouvelle valeur peut être calculée pour chaque nouvelle barre, sans aucune boucle. Et puisque vous avez conçu votre script comme un indicateur, vous bouclerez sur chaque nouvelle barre à travers tout l'historique précédent - le temps de calcul augmente de Bars*Bars/2 fois. Et, si vous utilisez la boucle dans la boucle, cela n'a aucun sens de commencer la boucle sur j à partir de j=i.

Je n'ai pas parcouru votre code en détail et je ne l'ai pas regardé sur le graphique, mais il me semble qu'il contient une erreur importante - il modifie son propre résultat. Si, par exemple, ce point est un point extrême pour un certain i, il peut ne plus être un point extrême lorsqu'on passe à (i+1) ou plus loin. Cela résulte toutefois de la condition que vous avez imposée : plus de 5, moins de 10.

Pour la majeure partie de l'histoire, cela n'a pas d'importance. Cependant, il le fait pour le bon bord, et cela compte beaucoup. Cet extremum identifié par votre script à gauche de la barre zéro peut disparaître à la barre suivante, ce qui n'est pas bon. :-))

 
Yurixx:


1. Merci, bien sûr, pour le code, mais cela, comme vous le comprenez vous-même, n'est ni la solution ni le problème.

Je l'ai peut-être formulé trop succinctement, mais c'est en fait une déclaration assez juste. Il pourrait être plus long. Ce qu'il faut, c'est une procédure d'identification d'un extremum local, qui fonctionne en mode temps réel, et non sur l'historique. L'identification consiste à déterminer, à la fin d'une barre, si le point approprié du graphique indicateur est un point d'extremum local. Un extremum local est un extremum dont la variation de la valeur de l'indicateur à droite et à gauche est d'au moins 25,0 %.

Dans la mesure où le changement à venir de l'indicateur à droite du point extrême attendu n'est pas connu au moment de la fin de la barre, il s'agit d'une prédiction optimale du comportement de l'indicateur. Cette prédiction n'est pas une extrapolation car les valeurs de l'indicateur à droite du point extrême ne sont pas intéressantes. La seule condition est la condition d'extremum, c'est-à-dire que les valeurs de l'indicateur changeront par la valeur conditionnée. La prédiction optimale est comprise au sens statistique, c'est-à-dire que la prévision doit avoir une fiabilité suffisamment élevée.

Formellement, tout semble différent, mais je n'ai rien dit de nouveau pour vous. Tout cela est déjà là en trois mots : "identification sans décalage".

2. j'attire votre attention sur le fait qu'un script élémentaire de recherche d'extrema avec des propriétés données sur une histoire encadrée aurait pu être écrit plus succinctement et plus simplement. Les boucles imbriquées sont une surcharge coûteuse et deviendront un goulot d'étranglement pour les grands tableaux. Tout cela peut être fait en une seule fois, c'est-à-dire qu'une seule nouvelle valeur peut être calculée pour chaque nouvelle barre, sans aucune boucle. Et puisque vous avez conçu votre script comme un indicateur, vous bouclerez sur chaque nouvelle barre à travers tout l'historique précédent - le temps de calcul augmente de Bars*Bars/2 fois. Et si vous utilisez une boucle dans une boucle, cela n'a aucun sens de commencer la boucle sur j à partir de j=i.

3. je n'ai pas traité votre code en détail et je ne l'ai pas regardé sur le graphique, mais il me semble qu'il contient une erreur significative - il change son propre résultat. Par exemple, si le point est un point extrême pour un certain i, il peut ne plus être un point extrême lorsqu'on passe à (i+1) ou plus loin. Cela résulte toutefois de la condition que vous avez imposée : plus de 5, moins de 10.

Pour la majeure partie de l'histoire, cela n'a pas d'importance. Cependant, il le fait pour le bon bord, et cela compte beaucoup. Cet extremum identifié par votre script à gauche de la barre zéro peut disparaître à la barre suivante, ce qui n'est pas bon. :-))

1. La tâche consistait à identifier les extrema, et non à PRÉVENIR leur apparition. En bref, un ponzi bon marché .... ...ne pouvait pas prévoir. ... C'est la même chose que de dire : donnez-moi un graal pour qu'il n'y ait pas d'élan du tout et 1000%. C'est exactement ce que j'étais en train d'écrire - la tâche doit d'abord avoir une solution théorique unique, puis elle est mise en œuvre dans le code. Mais la prédiction n'a pas de solution à valeur unique.

Par identification, nous entendons définir si le point correspondant du graphique indicateur est un point d'extremum local après la fin de la barre - Ne confondez pas la bénédiction de Dieu avec un œuf - identification et prédiction.

"identification sans décalage" - encore une fois également. L'identification sans décalage signifie l'identification au tout premier moment, celui où la situation est identifiée sans ambiguïté.

2. Faites une démonstration et nous verrons.

Bars*Bars/2 fois - de toute évidence, vous ne comprenez même pas comment cela fonctionne, ou vous ne connaissez pas la signification de l'opérateur break ;

cela n'a pas desens de commencer la boucle sur j à partir de la valeur j=i - mais laquelle alors ? C'est une question très intéressante pour vous !!!!.

Je n'ai pas traité votre code en détail et ne l'ai pas regardé graphiquement, mais il me semble qu'il contient une erreur importante - il modifie son propre résultat.

3. notez qu'il ne change ses lectures qu'en fonction de la barre de zéro, non encore formée. Et tous les indicateurs changent leur dernière valeur en fonction de la valeur de la barre de zéro. Avez-vous déjà vu l'indicateur Fractals (intégré dans MT (Menu principal - Indicateurs - Bill Williams - Fractals)). - Jetez-y un coup d'œil, c'est très intéressant et fascinant, et cela pourrait même vous être utile un jour. Le calcul des variations de la barre de zéro lors de la programmation des indicateurs est au moins la règle de savoir-vivre, sinon une règle intangible de leur programmation. La première barre est généralement réservée aux personnes très inexpérimentées, qui ne sont pas très au fait de l'essence de l'indicateur.

Je n'ai jamais dit que l'algorithme est parfait, il y a une grande réserve pour son accélération, on peut limiter le calcul d'un indicateur à une nouvelle barre seulement. Mais initialement, la tâche consistait uniquement à identifier un extremum par le critère de changement de la valeur de l'indicateur par une valeur spécifiée et elle a été résolue, si nous ignorons vos blagues faciles, en substituant les notions d'identification et de prédiction.

 
Integer:

... ponce bon marché ....


Comme vous voulez. :-)

Entier:

Quand on sait ce que l'on veut, on le fait très vite.

Apparemment, il y a eu une substitution entre "on sait ce qu'on veut" et "une solution théorique". Vos concepts, d'ailleurs.

 
C'est un bon sujet, c'est dommage qu'il se soit essoufflé.
Pour les programmeurs professionnels, je recommande d'extraire la DLL des produits Elliottician. Ils écrivent leurs créations en VisualBasic, mais les bibliothèques comportent une description des ondes et des paternes avec les notions habituelles de haut, de bas, etc. De plus, les dernières versions de RET contiennent un plugin pour le Forex. Et démonter le DLL avec la base des vagues des 15 dernières années est très tentant !
 
Bookkeeper:

Question : Est-il possible d'ajuster la stratégie à un pipsetting risqué, agressif et non sur le réel,

mais seulement sur la démo? La question n'est pas seulement une question. C'est possible avec une entrée poussive ou avec tout le courage nécessaire.

Je pense que c'est possible, jetez un coup d'œil à l'application.

J'ai augmenté mon dépôt de 900% en une semaine.

Mes salutations,

Alex Niroba.

Dossiers :
statement.zip  9 kb
 
NYROBA >> :

Je pense que c'est possible, regardez l'application.

J'ai augmenté mon depo de 900% en une semaine.

Regards,

Alex Niroba.

ouais... longue histoire, cependant.

;)

 
divenetz >>:
Хорошая тема, жаль выдохлась.
Для профпрограммистов я бы порекомендовал поковырять DLL от продуктов Elliottician. Они пишут свои творения на ВижуалВасике, но в библиотеках есть описание волн и патернов обычными понятиями high, close и пр. Тем более что последние версии RET содержат плагин для Forex. А разобрать DLL с базой волн за последние 15 лет - очень заманчиво!

La RET, c'est de la merde. Mieux vaut modern75.nls pour désassembler depuis ElWave (d'autant plus que c'est un fichier ouvert). RET est presque identique au trivial winwaves32.