Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 224

 
Integer:


Pouvez-vous me dire comment il se fait qu'au lieu de "it" les gens écrivent "ito" ?

1. Tu ne sais pas que "ça" s'écrit avec un "e" et pas avec un "e" ?

2. vous êtes trop paresseux pour déplacer votre main vers la lettre "e", c'est plus facile d'appuyer sur "e" ?

3. il n'y a pas de touche "e" sur le clavier ? Si non, pourquoi ?

4. C'est une sorte de ponce spéciale ?

5. Une autre raison inconnue. Qu'est-ce que c'est ?


Je ne suis pas russe et il n'y a pas de lettres russes sur le clavier. J'utilise un clavier phonétique (c'est le type de logiciel que j'utilise). J'appuie sur "p", mais ça dit "p". La lettre "e" est là aussi. Je dois appuyer sur "\".

Il y a des erreurs grammaticales, car la grammaire a été oubliée depuis longtemps. Je n'ai dû écrire en russe que sur des forums, et ce après de nombreuses années.

Je m'excuse pour les erreurs. Ne me donne pas trop de coups de pied.

 
artmedia70:

Cette ligne peut être supprimée, car iFractals() renvoie zéro, et non une "valeur vide" (EMPTY_VALUE), comme absence de fractale.

Ma question est la suivante : essayez-vous de créer un indicateur qui recherchera deux fractales consécutives ? Ou bien cherchez-vous dans votre EA les deux fractales consécutives les plus proches de la barre actuelle ? Cette question n'est pas une curiosité futile car les méthodes de recherche de l'indicateur et du conseiller expert sont différentes - l'indicateur calcule de la fin au début - du passé au présent, et le conseiller expert examine les barres du présent au passé. En conséquence, les directions de recherche sont également différentes dans le conseiller expert et dans l'indicateur.

Et une dernière question : quel doit être le résultat ?



Pas intéressé (pas besoin de savoir jusqu'à présent) par ce que iFractals() renvoie. Si c'est vraiment 0 - oui, désolé j'ai menti, EMPTY_VALUE n'a pas besoin d'être vérifié.

J'ai trouvé cette formulation comme une justification agréable - nous avons considéré le cas général de EMPTY_VALUE et non le cas local avec 0 retour.

Mais j'ai honte et je m'amuse moi-même de ne pas avoir su une chose aussi élémentaire.

Je comprends que le code était pour un indicateur - artmedia70 a raison de dire que l'approche est différente pour les Expert Advisors.

Je n'ai pas le temps de le faire - je le ferai le soir en rentrant à la maison, car nous ne nous sommes pas bien compris ( après avoir trouvé la condition de deux fractales l'événement devrait être traité) mais tout est OK.

//----
   БЛОК ПРОВЕРКИ НОВОГО БАРА;                //проверить наличие нового бара 

   int   a1=0,                               //преведущий фрактал (-1 ->нижний, 1 -> верхний)
         a2,                                 //нынешний фрактал  (-1 ->нижний, 1 -> верхний)
         a3,                                 //сума преведущий + нынешний
         kilkict,                            //была введена с мыслю уменьшить перерасчет после глобального расчета (идея просто еще не реализована)
         frac,                               //frac - флаг существования фракталов,
         frac1=0,                            //frac1- счетчик фракталов (+1 или 0 за цикл)сейчас просто выполняет роль фильтра, надо найти сперва 2 фрактала чтобы приступить к их сравнению.
         i;
     
   kilkict=Bars;                            

   for (i=3; i<kilkict;i++){                 // 3
      a2=0;
      frac=0;
      if(iFractals(NULL, 0, MODE_UPPER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //не нужно для iFrctals()данной проверки условий
            a2+=1;                           //к числу фракталов добавляем 1
            frac=1;                          //флаг - фрактал есть
            frac1++;                         //счетчик увеличиваем на 1
         }
      }
      if(iFractals(NULL, 0, MODE_LOWER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //не нужно для iFrctals() данной проверки условий
            if(a2==0){              
               frac1++;                      //счетчик увеличиваем на 1 
               frac=1;                       //флаг - фрактал есть
            }
            a2+=-1;                          //к числу фракталов добавляем -1(т. е. уменшаем)
         }
      } 
      if (frac==0){continue;}                // если флага нет (фрактал не найден)
      if (frac1==1){                         //если счетчик равен 1,
         a1=a2; 
         continue;
      }          
      a3=a1+a2;
      if(a3<0)           { a1=a2; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; continue;}//Два фрактала вниз  подряд найдено// 
      if(a3>0)           { a1=a2; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; continue;}//Два фрактала вверх подряд найдено //
      if(a3==0 && a1==0) { a1=a2; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; }// Два фрактала подряд вверх и два фрактала подряд вниз найдено //
   } 

 
gince:


...

Je m'excuse pour les erreurs. Ne soyez pas trop dur avec moi.


Je me demandais juste, c'est un drôle de phénomène.
 
Integer:

Je me demandais juste, c'est un drôle de phénomène.

Merci pour la correction.
 
if(!SL==0)
   {
  dollarsPerPip = lot/SL;
   }

Qui fait ça ?

if(SL>0) dollarsPerPip = lot/SL;

Pourquoi s'embêter avec beaucoup de { } ?? et ralentir le processus...

alternativement...

if(SL) dollarsPerPip = lot/SL;
 
gince:


Les méthodes de recherche dans l'indicateur et dans le Conseiller Expert sont différentes - l'indicateur calcule de la fin au début - du passé au présent, et le Conseiller Expert regarde les barres du présent au passé .

pour (i=kilkict;i>0;i--)

Il en résulte deux hausses -> vente (flèche vers le bas), deux baisses -> achat (flèche vers le haut). Le signal apparaîtra à +2 barres à droite de la fractale. C'est ce que j'aimerais voir visuellement sur l'historique au début. Et nous aurons probablement besoin d'un filtre.

La question qui se pose alors est la suivante : pourquoi voulez-vous vous fatiguer à écrire cet indicateur, si vous voulez simplement regarder l'historique ? On vous a donné un lien vers l'indicateur d'Articulus. Il fait exactement ce que vous voulez :

//+------------------------------------------------------------------+
//|                                                    iFractals.mq4 |
//|                             Copyright © 2010, EGEN Software LTD. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright   "Copyright © 2010, EGEN Software LTD."
#property link        "http://www.metaquotes.net"

#property indicator_chart_window

#property indicator_buffers   2
#property indicator_color1    Lime
#property indicator_color2    Red
#property indicator_width1    2
#property indicator_width2    2

datetime TIME; double F,F1,F2;

double WAVE.0[];
double WAVE.1[];

bool EQ(int value1, int value2)
{
   return(value1==value2);
}

bool ZERO(int value)
{
   return(EQ(value,0));
}

int MathSign(double value1, double value2)
{
   if(value1<0)
      if(value2<0) return(-1);
   if(value1>0)
      if(value2>0) return(1);
   return(0);
}

bool TOTAL(int index)
{
   return(index<Bars);
}

double FRACTALS(int mode, int shift)
{
  return(iFractals(NULL,0,mode,shift));
}

double UPPER(int shift)
{
   return(FRACTALS(MODE_UPPER,shift));
}

double LOWER(int shift)
{
   return(FRACTALS(MODE_LOWER,shift));   
}

int PEAK(int shift)
{
   int peak=0;
   double F1=UPPER(shift); 
   if(F1>0) peak++;
   double F2=LOWER(shift); 
   if(F2>0) peak--;
   F=F1+F2; 
   return(peak);
}

void init()
{
   IndicatorBuffers(2);
   SetIndexBuffer(0,WAVE.0);
   SetIndexStyle(0,DRAW_ARROW,EMPTY);  
   SetIndexArrow(0,236);    
   SetIndexBuffer(1,WAVE.1);
   SetIndexStyle(1,DRAW_ARROW,EMPTY);      
   SetIndexArrow(1,238);
   IndicatorDigits(Digits);
   IndicatorShortName("iFractals");  
}

bool F1(int shift)
{
   int peak=PEAK(shift);
   if(ZERO(peak)) return(false); 
   F1=F*peak;
   return(true);
}

int WAVE.1(int shift)
{   
   for(int i=shift; TOTAL(i); i++) 
      if(F1(i)) break; 
   return(i);
}

bool F2(int shift)
{
   int peak=PEAK(shift);
   if(ZERO(peak)) return(false); 
   F2=F*peak;
   return(true);
}

int WAVE.2(int shift)
{   
   for(int i=shift; TOTAL(i); i++) 
      if(F2(i)) break; 
   return(i);
}

void WAVE(int shift)
{
   WAVE.0[shift]=EMPTY_VALUE;
   WAVE.1[shift]=EMPTY_VALUE;
   shift=WAVE.1(shift); 
   int index=shift; shift++;
   shift=WAVE.2(shift);
   int wave=MathSign(F1,F2);
   F1=MathAbs(F1);
   F2=MathAbs(F2);
   if(wave<0) 
      if(F1<F2) WAVE.1[index]=F1; else WAVE.0[index]=F1;                  
   if(wave>0) 
      if(F1>F2) WAVE.0[index]=F1; else WAVE.1[index]=F1;       
}   

void CheckWave()
{
   for(int i=3; TOTAL(i); i++) WAVE(i);
}   

void start()
{
   CheckWave();
}

Compilez et regardez les histoires. Ensuite, tirez des conclusions.

Ou est-ce que "se tenir debout dans un hamac" est plus confortable ?

 
artmedia70:

La question qui se pose alors est la suivante : pourquoi vous torturer en écrivant cet indicateur si vous voulez simplement regarder les histoires ? On vous a donné un lien vers l'indicateur d'Articulus. Il fait exactement ce que vous voulez qu'il fasse :

Compilez-le et regardez l'historique. Et ensuite tirer des conclusions.

Ou est-ce que "se tenir debout dans un hamac" est plus confortable ?



et vous tracez la logique de la dinde ;))

Vous n'avez pas besoin de 20 fonctions pour le comprendre, n'est-ce pas ?

 
VOLDEMAR:

Qui fait ça ?

Pourquoi s'embêter avec beaucoup de { } ? et ralentir le processus...

alternativement...


C'est drôle, je ne savais pas ça, je vais devoir vérifier.
 
ALXIMIKS:


et vous tracez la logique de la dinde ;))

vous ne vous ennuyez pas avec 20 fonctions ???

Chaque fonction renvoie un résultat compréhensible d'un seul coup d'œil. Je ne m'embarrasse pas d'un coup d'œil. C'est clair comme le jour. D'ailleurs, de quoi a-t-il besoin ? Il doit regarder les histoires, pas le code.
 
VOLDEMAR:

Qui fait ça ?

Pourquoi s'embêter avec beaucoup de { } ?? et ralentir le processus...

c'est une façon de faire.

Merci pour la correction.

J'ai cette stupide habitude

lors de l'écriture d'une déclaration conditionnelle

pour mettre des parenthèses tout de suite.