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

 
En fin, no pasa nada, ya lo resolveré, sólo estaba aburrido. El código es probablemente, me disculpo, parcialmente idiota.
 
¿Pueden decirme cómo se cierra una operación? ¿Cómo cerrar una operación después de n (número, por ejemplo, 5) velas después de su apertura? La hora de apertura del comercio no se conoce de antemano.
 
kokos4:
Por favor, avise a quien pueda. ¿Cómo cerrar una posición después de n (número por ejemplo 5) velas después de su apertura? No se sabe la hora de apertura de antemano.

Cuenta n velas en segundos, las añade a la hora de apertura y las compara con la hora actual. Tan pronto como el tiempo actual es mayor - una orden de cierre.


////где-то в цикле перебора ордеров:
////
timer = OrderOpenTime()+PeriodSeconds()*n;

if(TimeCurrent()>timer) close(OrderTicket());
////////////////


 
kokos4:
Por favor, avise a quien pueda. ¿Cómo cerrar la operación después de n (número, por ejemplo, 5) velas tras su apertura? De antemano se desconoce la hora de apertura del puesto.

El número de velas que han pasado desde que se abrió la orden (recuerda resaltarlo previamente):

iBarShift (_Symbol, _Period, OrderOpenTime());

Además, es más fácil como "un pedazo de pastel". ;)

 

Colegas, mi función NormalizeDouble no funciona (no puedo explicarlo de otra manera). Sale 16 dígitos, aunque escribí 5 en el segundo parámetro. Por favor, dígame qué es lo que está mal en el código:

double i = 0.123456789112345;
void OnStart()
  {
         NormalizeDouble(i, 5);  
         Alert (i);
  }
 
JoinDoe: Colegas, mi función NormalizeDouble no funciona (no puedo explicarlo de otra manera).
double i = 0.123456789112345;
void OnStart()
  {
         Alert (NormalizeDouble (i, 5));
  }
 
TarasBY:
Gracias. Y ahora muestra 0.12346
 
JoinDoe:
Gracias. Y ahora es 0,12346.
Correcto, redondeado a la unidad más cercana.
 
¿Cómo se hace para que no haya redondeo?
 
JoinDoe:
¿Cómo lo harías sin redondear?

Entonces no se normalizará y puede provocar un error. ¿Por qué no te conformas con un precio normalizado más preciso?

Si lo necesitas por alguna razón, puedes multiplicar el número original por 100000, convirtiéndolo en un entero, y luego multiplicarlo por _Point o 0,00001:

double i = 0.123456789112345;
void OnStart()
  {
         Alert (NormalizeDouble (i*100000, 0)*_Point);
  }