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

 
bercut0077:
Buenos días, hay un indicador, pero en el probador después de un cierto período de principios de año a marzo funciona y luego deja de dar señales, y tengo que probar un largo período (AuthorizedSSBODynamicBreakoutBoxFinalEdition), donde en el código puede ser esta limitación - por favor, al menos dar una pista de dónde cavar, que los operadores determinan?
A veces falla. Simplemente deja de dibujar la caja. No hay ninguna restricción en ningún sitio. Prueba el potikovo. A veces ayuda.
 
Sepulca:
¿Tiene el código fuente del indicador? Si no, busque el autor))))

Tengo el código fuente - es un desastre.
 
No, ni siquiera lo intentaré entonces. A veces te pierdes en tu propio código, y no digamos en el de otros))))
 

Como decirme por favor algún Asesor Experto probado en MQL4 y 5, y el tiempo es muy corto, a veces es necesario comprobar una idea o ayudar a alguien para finalmente crear una base para el robot y terminar de escribirlo usted mismo ...

Se lo agradecería, ¡¡¡gracias de antemano!!! =)

 
vadynik:

Estoy escribiendo una función como esta

Pero, ¿por qué OrderOpenPrice() devuelve el precio redondeado a cuatro dígitos sobre los cinco dígitos?


int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) 
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {                
       if ((OrderType()==OP_BUY)&&(OrderOpenPrice()>=Ask-350*Point)&&(OrderMagicNumber()==Magic)||(OrderType()==OP_BUY)&&(OrderOpenPrice()<=Ask+250*Point)&&(OrderMagicNumber()==Magic))
         {
           double o=OrderOpenPrice();
           Print(o);
           OrderClose(OrderTicket(),OrderLots(),Bid,50,Blue); 
         
      }
    }
  }
Prueba a hacer esto y ver lo que realmente devuelve OrderOpenPrice(), quizás el motivo es que normalizas la función con el parámetro Digits y ves en la impresora no lo que realmente es.
 
vadynik:

Estoy escribiendo una función como esta

Pero, ¿por qué OrderOpenPrice( ) devuelve el precio redondeado con cuatro decimales?

Print no devuelve un precio redondeado, en este caso, simplemente emite el número de decimales por defecto.
En realidad, Forex no trabaja con decimales inferiores a los dígitos. En general, el ejemplo de EURSD muestra sólo cuatro decimales.

Pero en su caso es mejor hacerlo así: Print(DoubleToStr(OrderOpenPrice(),Digits));

 
Ekburg:

Prueba a hacer esto y ver lo que realmente devuelve OrderOpenPrice(), quizás el motivo es que normalizas la función con el parámetro Digits y ves en la impresora no lo que realmente es.

Es lo mismo sin normalización, necesito restar puntos al precio de apertura, si es así el precio es el que necesito, pero entonces me sale un desajuste de tipo en IF(
Print(DoubleToStr(OrderOpenPrice(),Digits));
 
vadynik:

Necesito restar puntos al precio de apertura, y si es así, el precio es el que necesito, pero entonces me sale un desajuste de tipo en IF (

Haga los cálculos en cuatro dígitos. Si la precisión es importante para usted, entonces póngala con el valor del último dígito, ya que no cambia durante los cálculos debido a la naturaleza de los mismos.
 
Ekburg:

Haga los cálculos como para cuatro dígitos, y si la exactitud es importante para usted, entonces devuélvalo en su lugar, con el valor del último dígito que estaba antes, porque no cambia durante los cálculos, debido a lo específico de los cálculos.
La normalización es necesaria sólo en Ordersend, orderclose etc. Bien y todavía en la comparación de valores reales y en las impresoras especificar cualquier cantidad de signos después de un punto decimal. Pero si sólo escribes Print(whatever_double_value), normalmente imprimirá cuatro decimales. Por lo tanto, la forma correcta de hacerlo es escribir
Print(DoubleToStr(OrderOpenPrice(),Digits));

Como ya se ha mencionado, primero se convierte el doble en cadena con el número de decimales especificado y luego se imprime en el registro utilizando Print....
 
Y si se calculan los puntos, no hay que confundirlos con los puntos. Digamos que el doble SPRED=puntos Ask-Bid, o incluso que el doble SPRED=(Ask-Bid)/puntos.