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

 
Nikolai Semko:
Вопрос-просьба к разработчикам.
Очень не хватает возможности при переключении тайфреймов сохранять некоторые переменные или массивы, чтоб не происходила их переинициализация. Или это можно как-то сделать через OnDeinit определяя код причины REASON_CHARTCHANGE?
Просто у меня в теле программы происходят достаточно громоздкие вычисления, независящие от таймфрейма, не хочется их каждый раз пересчитывать. По моим ощущениям весьма не хватает особого типа глобальных переменных , которые не переинициализируются при смене таймфрейма. Я с бубнами научился это делать с простыми переменными без применения глобальных переменных терминала, но со структурами или массивами даже не представляю как это реализовать и похоже на то, что такой возможности просто не существует. Можно,  конечно, через ресурсы, но это как -то очень по кривому.
Попробуйте использовать индикатор. Там глобальные переменные не переинициализируются при смене ТФ (насколько я помню). Или через файл.
 
Konstantin:

каким образом?

Например так:

struct MyArray
{
   double buff[];
   
   MyArray()
   {
   }
   MyArray( int n )
   {
      ArrayResize( buff, n );
   }
   MyArray( const MyArray& other )
   {
      ArrayCopy( buff, other.buff );
   }
   ~MyArray()
   {
      ArrayFree( buff );
   }
   
   void operator=( const MyArray& other )
   {
      ArrayCopy( buff, other.buff );
   }
   
   void assign( int n, const double val = 0.0 )
   {
      ArrayResize( buff, n );
      ArrayInitialize( buff, val );
   }
};

MyArray func()
{
   MyArray myArray;
   
   // Заполняем массив.
   
   return myArray;
}
 
Koldun Zloy:

Например так:

Не об этом же спрашивали, но, возможно, это устроит автора вопроса, на который есть однозначный ответ - НИКАК.

В Сервисдеске нет отказа в этом

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2017.04.02 10:34

Возможно ли компенсировать отсутствие указателей на массив вводом возможности возврата массива функцией?
int[] Func()
{
  int a[] = {1, 2, 3};

  return(a);
}

Print(Func()[1]); // 2

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2017.04.01 10:20

Когда-то типу string был добавлен оператор []
string Str = "ABC";
Print(CharToString(Str[1])); // B


Возможно ли со стороны разработчиков добавить оператор = для массивов?

int a[], b[];
a = b; // ArrayCopy(a, b);


Поскольку указателей нет, то подобный оператор сделал бы язык более гибким - нашлись ситуации, когда это было бы ОЧЕНЬ удобно.

 
Alexey Kozitsyn:
Попробуйте использовать индикатор. Там глобальные переменные не переинициализируются при смене ТФ (насколько я помню). Или через файл.

Всё с точностью до наоборот:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Инициализация глобальных переменных программы и другие полезные знания.

Artyom Trishkin, 2016.12.05 20:27

Ответ получен от СД:


Думаю, можно смело использовать такую особенность глобальных переменных советников.


 
Alexey Kozitsyn:
Попробуйте использовать индикатор. Там глобальные переменные не переинициализируются при смене ТФ (насколько я помню). Или через файл.

Индикатор и использую. Переинициализируются. Файл - вообще не вариант, медленно и синхронизацию сложно качественную обеспечить. Тогда уж лучше через ResourceCreate. Но это все ведь жутко не удобно. Если у меня несколько десятков массивов, некоторые по несколько Мб, я должен писать как минимум две функции записи и считывания, создавать обработчик в OnDeinit. Да я уже с этим всем экспериментировал, столкнулся с проблеммой синхронизации, т.к. ресурсы и файлы живут своей отдельной жизнью в условиях многопоточности. Зачем лепить горбатого, когда просто не хватает возможности непереинициализации при определенном событии, в моем случае смена таймфрейма.
 
Nikolai Semko:

Индикатор и использую. Переинициализируются. Файл - вообще не вариант, медленно и синхронизацию сложно качественную обеспечить. Тогда уж лучше через ResourceCreate. Но это все ведь жутко не удобно. Если у меня несколько десятков массивов, некоторые по несколько Мб, я должен писать как минимум две функции записи и считывания, создавать обработчик в OnDeinit. Да я уже с этим всем экспериментировал, столкнулся с проблеммой синхронизации, т.к. ресурсы и файлы живут своей отдельной жизнью в условиях многопоточности. Зачем лепить горбатого, когда просто не хватает возможности непереинициализации при определенном событии, в моем случае смена таймфрейма.
Ответ тут.
 
Artyom Trishkin:

Всё с точностью до наоборот:



Спасибо, не знал про советники!
Но, блин, если мне нужна эта фишка в индикаторе!

 
Koldun Zloy:

Например так:


спасибо за пример, но создавать объект сложного типа из-за одного массива как раз и не хотелось бы, все это напоминает излишний код ))
 
fxsaber:

Не об этом же спрашивали, но, возможно, это устроит автора вопроса, на который есть однозначный ответ - НИКАК.

В Сервисдеске нет отказа в этом



будем надеяться, что введут эту возможность, хотя более привычно было бы ввести указатель для массивов
 
Artyom Trishkin:

Всё с точностью до наоборот:

А, блин... да, руководствовался как раз Вашим постом, только попутал все:)
Причина обращения: