Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 224

 
Integer:


¿Puede decirme cómo es que en lugar de "eso" la gente escribe "ito"?

1. ¿No sabes que "eso" se escribe con "e" y no con "e"?

2. ¿te da pereza mover la mano hacia la letra "e", es más fácil pulsar la "e"?

3. ¿no hay una tecla "e" en el teclado? Si no, ¿por qué no?

4. ¿Es algún tipo de ponqué especial?

5. Alguna otra razón desconocida. ¿Qué es?


No soy ruso y no hay letras rusas en el teclado. Además, utilizo un teclado fonético (es un programa informático). Presiono "p", pero dice "p". La letra "e" también está ahí. Tengo que teclear "\N -".

Hay errores gramaticales, porque la gramática se ha olvidado hace tiempo. Tuve que escribir en ruso sólo en los foros y eso después de muchos años.

Pido disculpas por los errores. No me des demasiadas patadas.

 
artmedia70:

Esta línea se puede eliminar, porque iFractals() devuelve cero, no "valor vacío" (EMPTY_VALUE), como ausencia de fractal.

Mi pregunta es la siguiente: ¿intentas hacer un indicador que busque dos fractales consecutivos? ¿O está buscando en su EA dos fractales consecutivos más cercanos a la barra actual? Esta pregunta no es una curiosidad ociosa porque los métodos de búsqueda en el indicador y en el Asesor Experto son diferentes - el indicador calcula desde el final hasta el principio - desde el pasado hasta el presente, y el Asesor Experto mira a través de las barras desde el presente hasta el pasado. En consecuencia, las direcciones de búsqueda también son diferentes en el Asesor Experto y en el indicador.

Y una última pregunta: ¿cuál debería ser la salida?



No me interesa (no necesito saberlo hasta ahora) lo que devuelve iFractals(). Si es realmente 0 - sí, perdón por mentir, EMPTY_VALUE no necesita ser comprobado.

Se me ocurrió esta formulación como una buena justificación - consideramos el caso general de EMPTY_VALUE y no el local con retorno 0.

Pero me avergüenzo y me divierte no saber una cosa tan elemental.

Entiendo que el código era para un indicador - artmedia70 tiene razón en que el enfoque es diferente para los Asesores Expertos.

No tengo tiempo para ello - lo haré por la noche cuando llegue a casa, porque no nos hemos entendido bien ( después de encontrar la condición de dos fractales el evento debe ser procesado) pero todo está bien.

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

   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:


...

Pido disculpas por los errores. No seas tan duro conmigo.


Sólo me preguntaba, es un fenómeno curioso.
 
Integer:

Sólo me preguntaba, es un fenómeno curioso.

Gracias por la corrección.
 
if(!SL==0)
   {
  dollarsPerPip = lot/SL;
   }

¿Quién hace eso?

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

¿Por qué molestarse con un montón de { }? y ralentizar el proceso...

o bien...

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


Los métodos de búsqueda en el indicador y en el Asesor Experto son diferentes - el indicador calcula desde el final hasta el principio - desde el pasado hasta el presente, y el Asesor Experto mira a través de las barras desde el presente hasta el pasado .

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

El resultado es dos arriba -> vender (flecha abajo), dos abajo -> comprar (flecha arriba). La señal aparecerá +2 barras a la derecha del fractal. Eso es lo que me gustaría ver visualmente en la historia al principio. Y probablemente necesitaremos un filtro.

Entonces la pregunta es: ¿por qué quieres cansarte de escribir este indicador, si sólo quieres mirar la historia? Te han dado un enlace al indicador Articulus. Hace exactamente lo que quieres:

//+------------------------------------------------------------------+
//|                                                    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();
}

Recopila y mira las historias. A continuación, saque conclusiones.

¿O es más cómodo "estar de pie en una hamaca"?

 
artmedia70:

Entonces la pregunta es: ¿por qué te torturas escribiendo este indicador si sólo quieres ver las historias? Te han dado un enlace al indicador Articulus. Hace exactamente lo que quieres que haga:

Compáralo y mira el historial. Y luego sacar conclusiones.

¿O es más cómodo "estar de pie en una hamaca"?



y tú trazas la lógica del pavo ))

No necesitas 20 funciones para entenderlo, ¿verdad?

 
VOLDEMAR:

¿Quién hace eso?

¿Por qué molestarse con un montón de { }? y ralentizar el proceso...

o bien...


Es curioso, no lo sabía, tendré que comprobarlo.
 
ALXIMIKS:


y tú trazas la lógica del pavo ))

¿no te aburres con 20 funciones?

Cada función devuelve un resultado comprensible a simple vista. No me empantana de un vistazo. Está más claro que el agua. Además, ¿qué necesita? Tiene que mirar las historias, no el código.
 
VOLDEMAR:

¿Quién hace eso?

¿Por qué molestarse con un montón de { }? y ralentizar el proceso...

esa es una forma de hacerlo.

Gracias por la corrección.

Tengo esta estúpida costumbre

al escribir una declaración condicional

para poner paréntesis de inmediato.