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

 
PapaYozh:

PrecioDelta = Punto * 30;

Comparación de números reales


Muchas gracias de nuevo

ps aunque sigo sin entender por qué no se pueden comparar los dobles

 

¡Buenos días! Esto es lo que no entiendo. Encendido del probador. Han pasado unos cuarenta y cinco minutos y en realidad ha pasado más de una hora, he apagado internet, tormenta eléctrica.

No puedo ver si algo está pasando o es un fallo???? Algo parece estar mal, no me atrevo a apagarlo.

 
sdm:


Muchas gracias de nuevo

ps aunque sigo sin entender por qué no se pueden comparar números dobles

Todavía puedes comparar constantes, pero no puedes comparar números después de calcularlos. Por ejemplo, después del cálculo, puede obtener dos números idénticos con valores diferentes. Esto no es una paradoja si se tiene en cuenta la precisión establecida en EPSILON.
 
¡sdm ! La cuestión es que el número puede ser fácilmente 1000,00001 y 1000,000001, y son números diferentes. En el programa podría ser fácilmente, pero no se ve a primera vista. Por supuesto, puedes comparar los números de antemano, pero es mejor ser precavido.
 
¿Y qué pasa con el probador, por favor? ¿Que no hay ningún número encima de la barra, el habitual 3\64668 o lo que sea?
 
Dimka-novitsek:
¿Qué pasa con el probador, por favor? ¿Que no hay ningún número encima de la barra, el habitual 3\64668 o lo que sea?

Hasta que no se complete la primera pasada, no habrá números. :(

Será mejor que escribas en el CD.

 

¡¡¡Gracias!!! Lo tengo.

¿Qué es SD?

 
Dimka-novitsek:

¡¡¡Gracias!!! Lo tengo.

¿Qué es SD?

"Servicio de atención al cliente"
 

¡Buenas tardes colegas!

Por favor, indique si la lógica del código es correcta.

La esencia del código es la fórmula:

TRIN = (Pares que crecen/pares que disminuyen)/ (Volumen de pares que crecen/pares que disminuyen)

double Index[];
double instr_up, instr_dn, vol_dn, vol_up;
//+------------------------------------------------------------------+
int init()
{
   SetIndexBuffer(0,Index);
   SetIndexStyle(0,DRAW_LINE);   
   string Tf;
   if(Period()==1) Tf="M1";
   if(Period()==5) Tf="M5";
   if(Period()==15) Tf="M15";
   if(Period()==30) Tf="M30";
   if(Period()==60) Tf="H1";
   if(Period()==240) Tf="H4";
   if(Period()==1440) Tf="D1";
   if(Period()==10080) Tf="W1";
   if(Period()==43200) Tf="MN";         
        string short_name="TRIN("+Depth+","+Tf+")";
        IndicatorShortName(short_name);
   IndicatorDigits(0);
   return(0);
}

//---- функция проверки цены закрытия на максимум Доллара США за период Depth
int newh(string symbol,int i)
      {
         datetime time_bar = Time[i];
         int bar_no = iBarShift(symbol, Period(), time_bar, false);
                
         if(symbol=="EURUSD" || symbol=="GBPUSD" || symbol=="AUDUSD" || symbol=="NZDUSD")
            {

               int j=iLowest(symbol,Period(),MODE_CLOSE,Depth,bar_no);
               if (iClose(symbol,Period(),bar_no)==iClose(symbol,Period(),j))                    
                  {
                     int nh=1;                                                 
                  }
               else                                                                 
                  {
                     nh=0;                                              
                  }       
            }
         else
            {
               j=iHighest(symbol,Period(),MODE_CLOSE,Depth,bar_no);
               if (iClose(symbol,Period(),bar_no)==iClose(symbol,Period(),j))                    
                  {
                     nh=1;                                                 
                  }
               else                                                                 
                  {
                     nh=0;                                              
                  }             
            }
         return(nh);      
      }

//---- функция проверки цены закрытия на минимум Доллара США за период Depth
int newl(string symbol,int i)
      {
         datetime time_bar = Time[i];
         int bar_no = iBarShift(symbol, Period(), time_bar, false);      
      
         if(symbol=="EURUSD" || symbol=="GBPUSD" || symbol=="AUDUSD" || symbol=="NZDUSD")
            {
               int j=iHighest(symbol,Period(),MODE_CLOSE,Depth,bar_no);
               if (iClose(symbol,Period(),bar_no)==iClose(symbol,Period(),j))                    
                  {
                     int nl=1;                                                 
                  }
               else                                                                 
                  {
                     nl=0;                                              
                  }       
            }
         else
            {
               j=iLowest(symbol,Period(),MODE_CLOSE,Depth,bar_no);
               if (iClose(symbol,Period(),bar_no)==iClose(symbol,Period(),j))                    
                  {
                     nl=1;                                                 
                  }
               else                                                                 
                  {
                     nl=0;                                              
                  }             
            }
         return(nl);      
      }
//+------------------------------------------------------------------+
int start()
{
   int limit=Bars-IndicatorCounted();
   for(int i=1; i<limit; i++)
          {       
            if (newh("EURUSD",i) > 0                              //-- Если пара росла, то
             {instr_up=instr_up+1;vol_up+=iVolume("EURUSD",0,i);}   //-- instr_up - увеличиваем на 1 и vol_up - увеличиваем на Volume по этой паре   
           else //if (newl("EURUSD",i) > 0)                         //-- иначе
              {instr_dn=instr_dn+1;vol_dn+=iVolume("EURUSD",0,i);}  //-- instr_dn - увеличиваем на 1 и vol_dn - увеличиваем на Volume по этой паре
              
            if (newh("GBPUSD",i) > 0)
             {instr_up=instr_up+1;vol_up+=iVolume("GBPUSD",0,i);}
           else //if (newl("GBPUSD",i) > 0)
              {instr_dn=instr_dn+1;vol_dn+=iVolume("GBPUSD",0,i);}
            
            if (newh("USDCHF",i) > 0)
             {instr_up=instr_up+1;vol_up+=iVolume("USDCHF",0,i);}
           else //if (newl("USDCHF",i) > 0)
              {instr_dn=instr_dn+1;vol_dn+=iVolume("USDCHF",0,i);}
            
            if (newh("USDJPY",i) > 0)
             {instr_up=instr_up+1;vol_up+=iVolume("USDJPY",0,i);}
           else if (newl("USDJPY",i) > 0)
              {instr_dn=instr_dn+1;vol_dn+=iVolume("USDJPY",0,i);}
            
            if (newh("AUDUSD",i) > 0)
             {instr_up=instr_up+1;vol_up+=iVolume("AUDUSD",0,i);}
           else //if (newl("AUDUSD",i) > 0)
              {instr_dn=instr_dn+1;vol_dn+=iVolume("AUDUSD",0,i);}
            
            if (newh("USDCAD",i) > 0)
             {instr_up=instr_up+1;vol_up+=iVolume("USDCAD",0,i);}
           else //if (newl("USDCAD",i) > 0)
              {instr_dn=instr_dn+1;vol_dn+=iVolume("USDCAD",0,i);}
            
            if (newh("NZDUSD",i) > 0)
             {instr_up=instr_up+1;vol_up+=iVolume("NZDUSD",0,i);}
           else //if (newl("NZDUSD",i) > 0)
              {instr_dn=instr_dn+1;vol_dn+=iVolume("NZDUSD",0,i);}   
     
     if (instr_dn == 0)instr_dn=EMPTY;  // -- Если 
     if (vol_dn == 0)vol_dn=EMPTY;      // -- значения
     if (instr_up == 0)instr_up=EMPTY;  // -- нулевые
     if (vol_up == 0)vol_up=EMPTY;
     
     Index[i]=(instr_up/instr_dn)/(vol_up/vol_dn);  // -- TRIN
     
     instr_up=0;instr_dn=0;vol_up=0;vol_dn=0;  // -- Обнуление
     }
     
        return(0);
}

Esto es lo que salió:

TRIN

Gracias.

 

¿Es posible determinar a partir del código en qué ventana/subventana se creó el objeto?

Razón de la queja: