CopyBuffer() на выходных с чужого ТФ - страница 2

 
Renat Akhtyamov #:

кстати, а где нулевой буфер в индикаторе?

Нету. Это разве обязательное условие?
 

вот

Файлы:
 
Vasiliy Pushkaryov #:
Нету. Это разве обязательное условие?

вроде бы нужен ;)

но вынести расчет индикатора за пределы он калькуляте мне понравилась

сейчас переделаю один свой индик, тоже в выходные нужен

 
Renat Akhtyamov #:

вроде бы нужен ;)

Я хочу получить значения ATR. И передаю в CopyBuffer() хендл и указываю, что мне нужны значения 0-го буфера ATR.

Мой индикатор, который я делал, канальный - предназначался для работы с трендовыми линиями. Мне буферы не нужны.

 
Renat Akhtyamov #:

вот

Да, 10 минут назад, тоже перезагрузку сделал, заметил такое, что выдал copied = 2 .

Уменьшил цикл до 100 итераций. Добавил в OnCalculate() счетчик тиков и Print

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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[])
{
  static int count = 0;
  ++count;
  Print(__FUNCTION__, " count=", count, " prev_calculated=", prev_calculated, " rates_total=", rates_total);

  checkBuffer();

  return rates_total;
}

и вот что выдает


Т.е. при перезагрузке дает два дополнительных тика, на которых получаются значения из CopyBuffer(). Хотя prev_calculated все время нулевой.

Странно.

 

Vasiliy Pushkaryov #:

Т.е. при перезагрузке дает два дополнительных тика, на которых получаются значения из CopyBuffer(). Хотя prev_calculated все время нулевой.

Странно.

Теперь бы понять, как такой фокус сделать, но без выключения терминала.

 
Renat Akhtyamov #:

вроде бы нужен ;)

но вынести расчет индикатора за пределы он калькуляте мне понравилась

сейчас переделаю один свой индик, тоже в выходные нужен

попробовал

не проходит, т.к. размер буфера как то считается сам

хоть и задается на моем программном уровне верно:

НО! В документации такое и все портит ;)

//---

ArrayResize

Устанавливает новый размер в первом измерении массива

int  ArrayResize(
   void&  array[],              // массив, переданный по ссылке
   int    new_size,             // новый размер массива
   int    reserve_size=0        // резервное значение размера (избыточное)
   );

Параметры

array[]

[out]  Массив для изменения размеров.

new_size

[in]  Новый размер для первого измерения.

reserve_size=0

[in]  Размер для дополнительного резерва.

Возвращаемое значение

При успешном выполнении функция возвращает количество всех элементов, содержащихся в массиве после изменения размера; в противном случае возвращает -1 и массив не меняет размеры.

Если ArrayResize() применена к статическому массиву, таймсерии или индикаторному буферу, то размер массива остается прежним – такие массивы не могут быть перераспределены. В этом случае если new_size<=ArraySize(array), то функция просто вернет new_size; в противном случае будет возвращено -1.

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Объект динамического массива - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vasiliy Pushkaryov #:

Теперь бы понять, как такой фокус сделать, но без выключения терминала.

ну вот и все чо

с учетом вышесказанного...

1. то есть во внешнюю функцию расчеты буферов выносить не нужно

2. происходит загрузка онКалькуляте

3. нужно увеличить количество тиков

/---

итог!

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

типа Sleep(3000) в цикле и там же внутри расчет

опять костыли, ahahaha
 
Renat Akhtyamov #:

итог!

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

типа Sleep(3000) в цикле и там же внутри расчет

опять костыли, ahahaha

Спасибо. Вызов функции с CopyBuffer(), из OnTimer() помог.

 
Vasiliy Pushkaryov #:

Спасибо. Вызов функции с CopyBuffer(), из OnTimer() помог.

да, тоже использовал  такие приемы!

OnTimer рулит