une stratégie commerciale basée sur la théorie des vagues d'Elliott - page 40

 
Je vais préciser une fois de plus comment utiliser le script pour que tout soit exact.
Faites glisser le script sur le graphique avec la souris. A l'endroit où la souris est relâchée, un canal de régression linéaire RCH doit apparaître et une courbe colorée doit être dessinée autour. Dans l'ensemble des données initiales, j'ai fixé la période à 24 heures et le degré du polynôme m=2, c'est-à-dire une parabole. Ensuite, nous sélectionnons la ligne moyenne du canal de régression linéaire, et la déplaçons. La façon dont vous le déplacez n'a pas d'importance. Vous pouvez déplacer un seul des points les plus extérieurs apparus après la sélection et le canal sera étiré dans le temps ; vous pouvez déplacer le point central et le canal entier sera déplacé, la longueur de la période précédente restant inchangée jusqu'à ce que la période soit déplacée. La courbe de régression polynomiale doit être redessinée pendant le déplacement du canal de régression linéaire.
Pour les quotidiens, la période doit être supérieure à 24 heures, bien entendu.
Je pense que tout le monde sait comment désinstaller le script.
 
Cependant, comment ce script bloque l'ordinateur ! Et il m'a fallu beaucoup de temps pour trouver où vont les ressources dans le terminal, j'ai dû passer par toutes les fenêtres.


Je n'ai pas utilisé de délais de type Sleep dans la boucle, donc le script tourne en boucle et consomme naturellement des ressources.
Si vous voulez utiliser ce script et que vos ressources sont importantes, vous pouvez inclure à la fin de la boucle while la fonction Sleep( ) 50 - 500, la charge sur le CPU sera alors réduite.
Bien sûr, tous ces problèmes viennent du fait que les développeurs de MT4 ont lié l'exécution de la partie indicateur uniquement à la fonction start ( ), qui provient des cotations entrantes. Si nous disposions d'une fonction supplémentaire pour travailler hors ligne, à des fins de recherche, nous n'aurions pas ces problèmes.
Au fait, si les développeurs lisent ce fil, je les invite à y réfléchir. Le logiciel ne sera pas toujours dans un état aussi primitif que maintenant (bien que tout soit relatif, bien sûr).
 
2 Solandr
Merci beaucoup, je vais m'en occuper.

ps : je suppose que je ne suis pas aussi bon que toi en VM :))
Je pense que tout le problème est que lorsque les gens apprennent quelque chose parce que C'EST LA VOIE dans un institut, l'effet de l'apprentissage est bien moindre que lorsqu'on apprend quelque chose par soi-même parce que C'EST LA VOIE.

Je suis d'accord, je dirais même que c'est le PLUS GRAND problème.
 
Faites glisser et déposez le script sur le graphique avec la souris. Lorsque la souris est relâchée, un canal de régression linéaire RCH devrait apparaître et une courbe colorée devrait être dessinée autour de lui

HOORAY ! !! Il s'avère que c'était la façon dont le script était exécuté ! J'ai juste sélectionné "Exécuter sur le graphique" et c'est pourquoi l'erreur s'est produite. Et quand on tire le script avec la souris, tout fonctionne ! :o) Merci pour cette précision !
 
<br / translate="no">Y a-t-il une erreur dans ce raisonnement ?

À première vue, il n'y a pas d'erreur.


La comparaison qui en résulte peut-elle être appliquée pour résoudre le problème que vous avez posé ? Pourquoi ?
Merci d'avance.

Il n'est probablement pas possible de donner une réponse exacte (du moins pour moi). La tâche consistait à obtenir au moins deux estimations : le prix (ou la zone cible) et le temps pour l'atteindre (ou le temps pour annuler le scénario). Par niveaux, j'obtiens les niveaux de prix, et par canaux, j'obtiens les variables liées : prix et temps. Si l'un d'eux est plus ou moins précis, l'autre est également obtenu avec une précision acceptable. Il s'agit de résumer l'approche de la solution.
Je ne sais pas s'il est possible de la formuler en utilisant l'approche que vous suggérez - je n'ai pas essayé. Vous le pouvez probablement - je suis sûr que l'approche que j'ai utilisée n'est pas la seule et n'est peut-être pas la meilleure.
Je ne peux pas répondre plus précisément, et je n'ai pas encore beaucoup de temps à perdre - j'essaie encore de mettre en œuvre plusieurs approches de l'élaboration de stratégies.

Bonne chance et lancez-vous dans les tendances.
 
Vladislav, je pense que c'est une erreur de calcul (pas assez de barres). Je calculais sur le H1 et vous sur le M30. Je suis passé au M30 et j'ai maintenant un rapport >0,5 dans le dernier canal<br / translate="no">Voici l'image. En conséquence, je dois passer à M30 pour des calculs plus précis (plus de barres - 30 barres ne donnent pas une qualité suffisante pour le calcul de Hearst).



Il faut autant de temps pour convertir un gif en png que pour le mettre dans une archive :)

Il convient de noter que la combinaison Up+Down sur les dessins est toujours égale à 1.0. C'est compréhensible en principe. Maintenant, je dois comprendre comment on a obtenu trois canaux au lieu d'un seul. Et comment la moyenne est-elle calculée ? Mais cette question est posée par pure curiosité :)
 
Notez le Up+Down dans les images - toujours égal à 1.0. C'est compréhensible en principe. J'ai juste besoin de comprendre comment on obtient trois canaux au lieu d'un seul. Et comment la moyenne est-elle calculée ? Mais cette question est posée par pure curiosité :)

Pour le calcul de Up+Down, j'ai appliqué le calcul de probabilité par la formule de Chebyshev (de Bulashev).
La moyenne est calculée en proportion de la longueur des canaux - j'ai choisi le nombre de barres de chaque canal comme poids (je l'ai écrit dans l'algorithme).
On obtient tout de même trois chaînes au lieu d'une selon les principes de la stratégie. Le plus souvent, vous disposez de plusieurs domaines dans lesquels vous pouvez construire des chaînes qui répondent aux critères. C'est dans ces zones que je sélectionne le canal qui a la valeur RMS la plus basse. J'ai également introduit une coupure pour que chaque canal suivant sélectionné pour être tracé sur le graphique soit au moins 2 fois plus long que le précédent. S'ils ne sont pas coupés, il peut y avoir jusqu'à 7 canaux très rapprochés qui brouilleraient grossièrement le graphique avec des lignes. Mais avec cette troncature, on obtient généralement 2 ou 3 canaux, ce qui permet de montrer l'image assez clairement sans la brouiller par des lignes.
 
On dirait que le champ s'élargit. Nous devrons ajouter des options d'optimisation de la recherche des canaux et des options de calcul des indicateurs pour parler le même langage.

 
Rosh!
Vous avez un si bel indicateur Murray, avec des lettres. Si vous le pouvez, veuillez me donner le lien d'où il provient.


Merci d'avance - Alexander
 
Rosh ! <br / translate="no">Vous avez un si bel indicateur Murray, avec le lettrage. Si ça ne vous dérange pas, donnez-moi un lien vers l'endroit où il se trouve.
Ou encore plus facile, envoyez-le moi par courriel à ANG3110@latchess.com.


Il s'agit en fait d'un indicateur Vladislava tiré de www.mql4.com.
Seule la légende a été ajoutée. Vous pouvez l'obtenir ici.

//+------------------------------------------------------------------+
//|                                                   MMLevls_VG.mq4 |
//|                       Copyright © 2006, Vladislav Goshkov (VG).  |
//|                                           4vg@mail.ru            |
//|                                       Many thanks to Tim Kruzel  |
//+------------------------------------------------------------------+
#property copyright "Vladislav Goshkov (VG)."
#property link      "4vg@mail.ru"

#property indicator_chart_window

// ============================================================================================
// * Линии 8/8 и 0/8 (Окончательное сопротивление).
// * Эти линии самые сильные и оказывают сильнейшие сопротивления и поддержку.
// ============================================================================================
//* Линия 7/8  (Слабая, место для остановки и разворота). Weak, Stall and Reverse
//* Эта линия слаба. Если цена зашла слишком далеко и слишком быстро и если она остановилась около этой линии, 
//* значит она развернется быстро вниз. Если цена не остановилась около этой линии, она продолжит движение вверх к 8/8.
// ============================================================================================
//* Линия 1/8  (Слабая, место для остановки и разворота). Weak, Stall and Reverse
//* Эта линия слаба. Если цена зашла слишком далеко и слишком быстро и если она остановилась около этой линии, 
//* значит она развернется быстро вверх. Если цена не остановилась около этой линии, она продолжит движение вниз к 0/8.
// ============================================================================================
//* Линии 6/8 и 2/8 (Вращение, разворот). Pivot, Reverse
//* Эти две линии уступают в своей силе только 4/8 в своей способности полностью развернуть ценовое движение.
// ============================================================================================
//* Линия 5/8 (Верх торгового диапазона). Top of Trading Range
//* Цены всех рынков тратят 40% времени, на движение между 5/8 и 3/8 линиями. 
//* Если цена двигается около линии 5/8 и остается около нее в течении 10-12 дней, рынок сказал что следует 
//* продавать в этой «премиальной зоне», что и делают некоторые люди, но если цена сохраняет тенденцию оставаться 
//* выше 5/8, то она и останется выше нее. Если, однако, цена падает ниже 5/8, то она скорее всего продолжит 
//* падать далее до следующего уровня сопротивления.
// ============================================================================================
//* Линия 3/8 (Дно торгового диапазона). Bottom of Trading Range
//* Если цены ниже этой лини и двигаются вверх, то цене будет сложно пробить этот уровень. 
//* Если пробивают вверх эту линию и остаются выше нее в течении 10-12 дней, значит цены останутся выше этой линии 
//* и потратят 40% времени двигаясь между этой линией и 5/8 линией.
// ============================================================================================
//* Линия 4/8 (Главная линия сопротивления/поддержки). Major Support/Resistance
//* Эта линия обеспечивает наибольшее сопротивление/поддержку. Этот уровень является лучшим для новой покупки или продажи. 
//* Если цена находится выше 4/8, то это сильный уровень поддержки. Если цена находится ниже 4/8, то это прекрасный уровень 
//* сопротивления.
// ============================================================================================
extern int P = 90;
extern int MMPeriod = 60;
extern int StepBack = 0;

extern color  mml_clr_m_2_8 = White;       // [-2]/8
extern color  mml_clr_m_1_8 = White;       // [-1]/8
extern color  mml_clr_0_8   = Aqua;        //  [0]/8
extern color  mml_clr_1_8   = Yellow;      //  [1]/8
extern color  mml_clr_2_8   = Red;         //  [2]/8
extern color  mml_clr_3_8   = Green;       //  [3]/8
extern color  mml_clr_4_8   = Blue;        //  [4]/8
extern color  mml_clr_5_8   = Green;       //  [5]/8
extern color  mml_clr_6_8   = Red;         //  [6]/8
extern color  mml_clr_7_8   = Yellow;      //  [7]/8
extern color  mml_clr_8_8   = Aqua;        //  [8]/8
extern color  mml_clr_p_1_8 = White;       // [+1]/8
extern color  mml_clr_p_2_8 = White;       // [+2]/8

extern int    mml_wdth_m_2_8 = 2;        // [-2]/8
extern int    mml_wdth_m_1_8 = 1;        // [-1]/8
extern int    mml_wdth_0_8   = 2;        //  [0]/8
extern int    mml_wdth_1_8   = 1;        //  [1]/8
extern int    mml_wdth_2_8   = 1;        //  [2]/8
extern int    mml_wdth_3_8   = 1;        //  [3]/8
extern int    mml_wdth_4_8   = 2;        //  [4]/8
extern int    mml_wdth_5_8   = 1;        //  [5]/8
extern int    mml_wdth_6_8   = 1;        //  [6]/8
extern int    mml_wdth_7_8   = 1;        //  [7]/8
extern int    mml_wdth_8_8   = 2;        //  [8]/8
extern int    mml_wdth_p_1_8 = 1;        // [+1]/8
extern int    mml_wdth_p_2_8 = 2;        // [+2]/8

extern color  MarkColor   = Blue;
extern int    MarkNumber  = 217;


double  dmml = 0,
        dvtl = 0,
        sum  = 0,
        v1 = 0,
        v2 = 0,
        mn = 0,
        mx = 0,
        x1 = 0,
        x2 = 0,
        x3 = 0,
        x4 = 0,
        x5 = 0,
        x6 = 0,
        y1 = 0,
        y2 = 0,
        y3 = 0,
        y4 = 0,
        y5 = 0,
        y6 = 0,
        octave = 0,
        fractal = 0,
        range   = 0,
        finalH  = 0,
        finalL  = 0,
        mml[13];

string  ln_txt[13],        
        buff_str = "";
        
int     
        bn_v1   = 0,
        bn_v2   = 0,
        OctLinesCnt = 13,
        mml_thk = 8,
        mml_clr[13],
        mml_wdth[13],
        mml_shft = 35,
        nTime = 0,
        CurPeriod = 0,
        nDigits = 0,
        i = 0;
int NewPeriod=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
//---- indicators
   if(MMPeriod>0)
      NewPeriod   = P*MathCeil(MMPeriod/Period());
   else NewPeriod = P;

   ln_txt[0]  = "[-2/8]P extremely overshoot [-2/8]";// "extremely overshoot [-2/8]";// [-2/8]
   ln_txt[1]  = "[-1/8]P";// "overshoot [-1/8]";// [-1/8]
   ln_txt[2]  = "[0/8]P Окончательное сопротивление";// "Ultimate Support - extremely oversold [0/8]";// [0/8]
   ln_txt[3]  = "[1/8]P Слабая, место для остановки и разворота";// "Weak, Stall and Reverse - [1/8]";// [1/8]
   ln_txt[4]  = "[2/8]P Вращение, разворот";// "Pivot, Reverse - major [2/8]";// [2/8]
   ln_txt[5]  = "[3/8]P Дно торгового диапазона";// "Bottom of Trading Range - [3/8], if 10-12 bars then 40% Time. BUY Premium Zone";//[3/8]
   ln_txt[6]  = "[4/8]P Главная линия сопротивления/поддержки";// "Major Support/Resistance Pivotal Point [4/8]- Best New BUY or SELL level";// [4/8]
   ln_txt[7]  = "[5/8]P Верх торгового диапазона";// "Top of Trading Range - [5/8], if 10-12 bars then 40% Time. SELL Premium Zone";//[5/8]
   ln_txt[8]  = "[6/8]P Вращение, разворот";// "Pivot, Reverse - major [6/8]";// [6/8]
   ln_txt[9]  = "[7/8]P Слабая, место для остановки и разворота";// "Weak, Stall and Reverse - [7/8]";// [7/8]
   ln_txt[10] = "[8/8]P Окончательное сопротивление";// "Ultimate Resistance - extremely overbought [8/8]";// [8/8]
   ln_txt[11] = "[+1/8]P";// "overshoot [+1/8]";// [+1/8]
   ln_txt[12] = "[+2/8]P";// "extremely overshoot [+2/8]";// [+2/8]
  
  /* 
   ln_txt[0]  = "[-2/8]P";// "extremely overshoot [-2/8]";// [-2/8]
   ln_txt[1]  = "[-1/8]P";// "overshoot [-1/8]";// [-1/8]
   ln_txt[2]  = "[0/8]P";// "Ultimate Support - extremely oversold [0/8]";// [0/8]
   ln_txt[3]  = "[1/8]P";// "Weak, Stall and Reverse - [1/8]";// [1/8]
   ln_txt[4]  = "[2/8]P";// "Pivot, Reverse - major [2/8]";// [2/8]
   ln_txt[5]  = "[3/8]P";// "Bottom of Trading Range - [3/8], if 10-12 bars then 40% Time. BUY Premium Zone";//[3/8]
   ln_txt[6]  = "[4/8]P";// "Major Support/Resistance Pivotal Point [4/8]- Best New BUY or SELL level";// [4/8]
   ln_txt[7]  = "[5/8]P";// "Top of Trading Range - [5/8], if 10-12 bars then 40% Time. SELL Premium Zone";//[5/8]
   ln_txt[8]  = "[6/8]P";// "Pivot, Reverse - major [6/8]";// [6/8]
   ln_txt[9]  = "[7/8]P";// "Weak, Stall and Reverse - [7/8]";// [7/8]
   ln_txt[10] = "[8/8]P";// "Ultimate Resistance - extremely overbought [8/8]";// [8/8]
   ln_txt[11] = "[+1/8]P";// "overshoot [+1/8]";// [+1/8]
   ln_txt[12] = "[+2/8]P";// "extremely overshoot [+2/8]";// [+2/8]
*/
   //mml_shft = 3;
   mml_thk  = 3;

   // Начальная установка цветов уровней октав и толщины линий
   mml_clr[0]  = mml_clr_m_2_8;   mml_wdth[0] = mml_wdth_m_2_8; // [-2]/8
   mml_clr[1]  = mml_clr_m_1_8;   mml_wdth[1] = mml_wdth_m_1_8; // [-1]/8
   mml_clr[2]  = mml_clr_0_8;     mml_wdth[2] = mml_wdth_0_8;   //  [0]/8
   mml_clr[3]  = mml_clr_1_8;     mml_wdth[3] = mml_wdth_1_8;   //  [1]/8
   mml_clr[4]  = mml_clr_2_8;     mml_wdth[4] = mml_wdth_2_8;   //  [2]/8
   mml_clr[5]  = mml_clr_3_8;     mml_wdth[5] = mml_wdth_3_8;   //  [3]/8
   mml_clr[6]  = mml_clr_4_8;     mml_wdth[6] = mml_wdth_4_8;   //  [4]/8
   mml_clr[7]  = mml_clr_5_8;     mml_wdth[7] = mml_wdth_5_8;   //  [5]/8
   mml_clr[8]  = mml_clr_6_8;     mml_wdth[8] = mml_wdth_6_8;   //  [6]/8
   mml_clr[9]  = mml_clr_7_8;     mml_wdth[9] = mml_wdth_7_8;   //  [7]/8
   mml_clr[10] = mml_clr_8_8;     mml_wdth[10]= mml_wdth_8_8;   //  [8]/8
   mml_clr[11] = mml_clr_p_1_8;   mml_wdth[11]= mml_wdth_p_1_8; // [+1]/8
   mml_clr[12] = mml_clr_p_2_8;   mml_wdth[12]= mml_wdth_p_2_8; // [+2]/8
   
   
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
//---- TODO: add your code here
Comment(" ");   
for(i=0;i<OctLinesCnt;i++) {
    buff_str = "mml"+i;
    ObjectDelete(buff_str);
    buff_str = "mml_txt"+i;
    ObjectDelete(buff_str);
    }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {

//---- TODO: add your code here

if( (nTime != Time[0]) || (CurPeriod != Period()) ) {
   
  //price
 //  Print("MMLevls : NewPeriod = ",NewPeriod);

   bn_v1 = Lowest(NULL,0,MODE_LOW,NewPeriod,StepBack);
   bn_v2 = Highest(NULL,0,MODE_HIGH,NewPeriod,StepBack);

   v1 = Low[bn_v1];
   v2 = High[bn_v2];

//determine fractal.....
   if( v2<=250000 && v2>25000 )
   fractal=100000;
   else
     if( v2<=25000 && v2>2500 )
     fractal=10000;
     else
       if( v2<=2500 && v2>250 )
       fractal=1000;
       else
         if( v2<=250 && v2>25 )
         fractal=100;
         else
           if( v2<=25 && v2>12.5 )
           fractal=12.5;
           else
             if( v2<=12.5 && v2>6.25)
             fractal=12.5;
             else
               if( v2<=6.25 && v2>3.125 )
               fractal=6.25;
               else
                 if( v2<=3.125 && v2>1.5625 )
                 fractal=3.125;
                 else
                   if( v2<=1.5625 && v2>0.390625 )
                   fractal=1.5625;
                   else
                     if( v2<=0.390625 && v2>0)
                     fractal=0.1953125;
      
   range=(v2-v1);
   sum=MathFloor(MathLog(fractal/range)/MathLog(2));
   octave=fractal*(MathPow(0.5,sum));
   mn=MathFloor(v1/octave)*octave;
   if( (mn+octave)>v2 )
   mx=mn+octave; 
   else
     mx=mn+(2*octave);


// calculating xx
//x2
    if( (v1>=(3*(mx-mn)/16+mn)) && (v2<=(9*(mx-mn)/16+mn)) )
    x2=mn+(mx-mn)/2; 
    else x2=0;
//x1
    if( (v1>=(mn-(mx-mn)/8))&& (v2<=(5*(mx-mn)/8+mn)) && (x2==0) )
    x1=mn+(mx-mn)/2; 
    else x1=0;

//x4
    if( (v1>=(mn+7*(mx-mn)/16))&& (v2<=(13*(mx-mn)/16+mn)) )
    x4=mn+3*(mx-mn)/4; 
    else x4=0;

//x5
    if( (v1>=(mn+3*(mx-mn)/8))&& (v2<=(9*(mx-mn)/8+mn))&& (x4==0) )
    x5=mx; 
    else  x5=0;

//x3
    if( (v1>=(mn+(mx-mn)/8))&& (v2<=(7*(mx-mn)/8+mn))&& (x1==0) && (x2==0) && (x4==0) && (x5==0) )
    x3=mn+3*(mx-mn)/4; 
    else x3=0;

//x6
    if( (x1+x2+x3+x4+x5) ==0 )
    x6=mx; 
    else x6=0;

     finalH = x1+x2+x3+x4+x5+x6;
// calculating yy
//y1
    if( x1>0 )
    y1=mn; 
    else y1=0;

//y2
    if( x2>0 )
    y2=mn+(mx-mn)/4; 
    else y2=0;

//y3
    if( x3>0 )
    y3=mn+(mx-mn)/4; 
    else y3=0;

//y4
    if( x4>0 )
    y4=mn+(mx-mn)/2; 
    else y4=0;

//y5
    if( x5>0 )
    y5=mn+(mx-mn)/2; 
    else y5=0;

//y6
    if( (finalH>0) && ((y1+y2+y3+y4+y5)==0) )
    y6=mn; 
    else y6=0;

    finalL = y1+y2+y3+y4+y5+y6;

    for( i=0; i<OctLinesCnt; i++) {
         mml[i] = 0;
         }
         
   dmml = (finalH-finalL)/8;
  // Print("MMLevls : NewPeriod = ",NewPeriod," dmml = ",dmml," finalL = ",finalL);
   mml[0] =(finalL-dmml*2); //-2/8
   for( i=1; i<OctLinesCnt; i++) {
        mml[i] = mml[i-1] + dmml;
        }
   for( i=0; i<OctLinesCnt; i++ ){
        buff_str = "mml"+i;
        if(ObjectFind(buff_str) == -1) {
           ObjectCreate(buff_str, OBJ_HLINE, 0, Time[0], mml[i]);
           ObjectSet(buff_str, OBJPROP_STYLE, STYLE_SOLID);
           ObjectSet(buff_str, OBJPROP_COLOR, mml_clr[i]);
           ObjectSet(buff_str, OBJPROP_WIDTH, mml_wdth[i]);
           ObjectMove(buff_str, 0, Time[0],  mml[i]);
           }
        else {
           ObjectMove(buff_str, 0, Time[0],  mml[i]);
           }
             
        buff_str = "mml_txt"+i;
        if(ObjectFind(buff_str) == -1) {
           ObjectCreate(buff_str, OBJ_TEXT, 0, Time[mml_shft], mml_shft);
           ObjectSetText(buff_str, ln_txt[i], 8, "Arial", mml_clr[i]);
           ObjectMove(buff_str, 0, Time[mml_shft],  mml[i]);
           }
        else {
           ObjectMove(buff_str, 0, Time[mml_shft],  mml[i]);
           }
        } // for( i=1; i<=OctLinesCnt; i++ ){

   nTime    = Time[0];
   CurPeriod= Period();
   
   string buff_str = "LR_LatestCulcBar";
   if(ObjectFind(buff_str) == -1) {
      ObjectCreate(buff_str, OBJ_ARROW,0, Time[StepBack], Low[StepBack]-2*Point );
      ObjectSet(buff_str, OBJPROP_ARROWCODE, MarkNumber);
      ObjectSet(buff_str, OBJPROP_COLOR, MarkColor);
      }
   else {
      ObjectMove(buff_str, 0, Time[StepBack], Low[StepBack]-2*Point );
      }

   }
 
//---- End Of Program
  return(0);
  }
//+------------------------------------------------------------------+