Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 950

 
И ваще, ничего страшного, разберусь, просто влом было. Скорей всего код, прошу прощения, отчасти идиотский.
 
Подскажите пожалуйста кто может. Как закрыть сделку через  n (число например 5) свечей после ее открытия? Заранее время открытия сделки неизвестно.
 
kokos4:
Подскажите пожалуйста кто может. Как закрыть сделку через  n (число например 5) свечей после ее открытия? Заранее время открытия сделки неизвестно.

Пересчитать n свечей в секунды, прибавить к времени открытия и сравнивать с текущим временем. Как только текущее время станет больше - приказ на закрытие.


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

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


 
kokos4:
Подскажите пожалуйста кто может. Как закрыть сделку через  n (число например 5) свечей после ее открытия? Заранее время открытия сделки неизвестно.

Количество свечей, прошедших с момента открытия ордера (не забываем его предварительно выделить):

iBarShift (_Symbol, _Period, OrderOpenTime());

дальше проще "пареной репы". ;)

 

Коллеги, у меня не работает (иначе не могу объяснить) функция NormalizeDouble. Выводит 16 цифр, хотя во втором параметре написал 5. Подскажите, пожалуйста, что не так в коде:

double i = 0.123456789112345;
void OnStart()
  {
         NormalizeDouble(i, 5);  
         Alert (i);
  }
 
JoinDoe: Коллеги, у меня не работает (иначе не могу объяснить) функция NormalizeDouble. 
double i = 0.123456789112345;
void OnStart()
  {
         Alert (NormalizeDouble (i, 5));
  }
 
TarasBY:
Спасибо! А теперь выдает 0.12346
 
JoinDoe:
Спасибо! А теперь выдает 0.12346
Правильно, с округлением до ближайшей!
 
Как бы сделать так, чтобы без округления?
 
JoinDoe:
Как бы сделать так, чтобы без округления?

Тогда она будет не нормализована и может вызвать ошибку! А почему Вас не устраивает более точная нормализованная цена?

Если Вам почему-то нужно, можно исходное число умножить на 100000, превратив в целое число, а потом умножить на _Point или на 0.00001:

double i = 0.123456789112345;
void OnStart()
  {
         Alert (NormalizeDouble (i*100000, 0)*_Point);
  }
Причина обращения: