Ошибки, баги, вопросы - страница 2997

 
Alexey Viktorov:

Ну так если открыт график и создаётся индикатор по текущему ТФ, то данные уже должны быть готовы при открытии графика. Разве нет?

О, сколько нам открытий чудных готовит ... дальшесампродолж

 
Alexey Viktorov:

Ну так если открыт график и создаётся индикатор по текущему ТФ, то данные уже должны быть готовы при открытии графика. Разве нет?

не совсем правильно выразился. Бары да - скорей всего готовы. Но нет гарантии, что индикатор пересчитался для всех этих баров в первый заход в OnCalculate, когда prev_calculated == 0.
Можно запустить такой индикатор, чтобы в этом убедиться. 
Только нужно это делать, когда идут котировки. Если рынок закрыт, то рассогласования не увидите.
Поэтому сейчас на выходных это лучше пробовать на криптовалюте, которая в движухе.
Если Size of Buffer array = -1, то значит буфер индикатора еще не пересчитан и значение BS будет не верным.

   datetime a = D'2021.04.08 10:00:00';
   int      handle;
   double   Buffer[];
   

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{

   handle = iCustom(_Symbol, PERIOD_CURRENT, "Examples\\ATR.ex5", 14);
   ::Print(__FUNCTION__ + "| PERIOD_CURRENT = ", EnumToString(_Period));

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{

   if(handle != INVALID_HANDLE)
   {
      ::CopyBuffer(handle, 0, a, 1, Buffer);
      
      double BS = ::NormalizeDouble(Buffer[0], _Digits);
      
      ::Print(__FUNCTION__ + "| a = ", a);
      ::Print(__FUNCTION__ + "| BS ", BS);
      int total_bars = iBars(NULL,PERIOD_CURRENT);
      int size = CopyBuffer(handle, 0, 0, total_bars, Buffer);
      Print("Total Bars = " + string(total_bars) + ", Size of Buffer array = " + string(size));
      
      handle = INVALID_HANDLE;
   }
   
   // return value of prev_calculated for next call
   return(rates_total);
}


если это делать на следующем заходе в OnCalculate (когда prev_calculated>0) то такой проблемы уже не будет. 

ЗЫ в коде была ошибка - исправил

 
Artyom Trishkin:

О, сколько нам открытий чудных готовит ... дальшесампродолж

Я имел ввиду данные для расчёта индикатора. Не ёрничай))))

 
Alexey Viktorov:

Я имел ввиду данные для расчёта индикатора. Не ёрничай))))

Открываешь новый график символа. Свечи на нём видишь. Запускаешь индикатор, а он данных не видит и выходит из обработчика до следующего тика. На следующем тике видит данные и рассчитывается.
Так бывает...

 
Artyom Trishkin:

Так бывает...

Обманываешь.

 
Alexey Viktorov:

Обманываешь.

Всех собак дворовых на этом съел
 
Print("sec = ",(int)TimeCurrent());

Это работает.  Был еще совет, но я не нахожу сейчас этот пост.  Тоже действует.   Спасибо.

Полагаю, что разработчики должны были бы отразить подобное изменение в документации.  Иначе простое действие может вызывать некоторое недоумение - определяю время между двумя событиями и получаю:

 Print(iTime(0,0,0)-iTime(0,0,3));  // Результат: 1970.01.04 00:00:00
                                    // Разобраться можно, но выглядит странно.


 
Правильно ли, что в режиме скрытия графика цены
ChartSetInteger(0, CHART_SHOW, false)

скрывается и комментарий чарта?

Думал, что если он кому-то мешает, то его можно затереть самому.

 
Что значит ошибка в тестере "occupied by another terminal" ? нигде нет ответа. Каким другим терминалом занято? Облако отключено у меня, идет одна оптимизация.
 

Добрый вечер!

Кто-нибудь в курсе, что означают два разных объема ордера через слеш в одной сделке?

И второй вопрос: счет подписан на сигнал, и у провайдера эти две сделки еще открыты. Почему же они были закрыты у меня? Прикладываю, что выдавал журнал во время открытия сделок.

Что это может быть за чертовщина?

1

2