Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 950

 
De qualquer forma, tudo bem, eu vou descobrir, eu só estava entediado. O código é provavelmente, peço desculpas, parcialmente idiota.
 
Você pode me dizer como fechar um negócio? Como fechar um comércio após n (número por exemplo, 5) velas após sua abertura? O horário de abertura do comércio não é conhecido de antemão.
 
kokos4:
Favor informar quem pode. Como fechar uma posição após n (número eg 5) velas após sua abertura? Você não sabe o horário de abertura com antecedência.

Conte n velas em segundos, acrescente ao tempo de abertura e compare com o tempo atual. Assim que o tempo atual for maior - uma ordem para fechar.


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

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


 
kokos4:
Favor informar quem pode. Como fechar o negócio após n (número eg 5) velas após sua abertura? Antecipadamente o tempo de abertura da posição é desconhecido.

O número de velas que passaram desde que a ordem foi aberta (lembre-se de destacá-la com antecedência):

iBarShift (_Symbol, _Period, OrderOpenTime());

Além disso, é mais fácil como "um pedaço de bolo". ;)

 

Colegas, minha função NormalizeDouble não funciona (não posso explicar o contrário). Ela produz 16 dígitos, embora eu tenha escrito 5 no segundo parâmetro. Por favor, diga-me o que há de errado no código:

double i = 0.123456789112345;
void OnStart()
  {
         NormalizeDouble(i, 5);  
         Alert (i);
  }
 
JoinDoe: Colegas, minha função NormalizeDouble não está funcionando (não posso explicar o contrário).
double i = 0.123456789112345;
void OnStart()
  {
         Alert (NormalizeDouble (i, 5));
  }
 
TarasBY:
Obrigado! E agora está mostrando 0,12346
 
JoinDoe:
Obrigado! E agora é 0,12346.
Correto, arredondado para baixo para o mais próximo!
 
Como você faria para que não houvesse arredondamento?
 
JoinDoe:
Como você faria isso sem arredondamento?

Então não será normalizada e pode causar um erro! Por que você não está satisfeito com um preço normalizado mais preciso?

Se você precisar dele por algum motivo, você pode multiplicar o número original por 100000, transformando-o em um inteiro, e depois multiplicá-lo por _Point ou 0,00001:

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