Библиотеки: TradeTransactions - страница 3

 
Nauris Zukas:

Мне не как не получается получить данные, здесь я запускаю скрипт и, как я понимаю, данные сейчас сохранились в где-то в терминале

Данные уничтожаются, как только их хозяин (кто записал) прекращает работать. Если этого не делать, то память Терминала быстро захламится.

Запустите хозяина данных в виде советника/индикатора. Пока он будет жить, его данные будут доступны другим.

 
fxsaber:

Данные уничтожаются, как только их хозяин (кто записал) прекращает работать. Если этого не делать, то память Терминала быстро захламится.

Запустите хозяина данных в виде советника/индикатора. Пока он будет жить, его данные будут доступны другим.

На индикаторах тоже не получилось. Думаю, что с путём что-то не правильна.

 
Nauris Zukas:

На индикаторах тоже не получилось. Думаю, что с путём что-то не правильна.

Вы в каждом OnCalculate создаете ресурс и убиваете его по завершении функции.

Объект нужно делать static. Это основы ООП.

 
fxsaber:

Вы в каждом OnCalculate создаете ресурс и убиваете его по завершении функции.

Объект нужно делать static. Это основы ООП.

Добавил static, но всё ровно не работает. Можете поправить что там не так?

 
Nauris Zukas:

Добавил static, но всё ровно не работает. Можете поправить что там не так?

Обновите ResourceData.mqh и попробуйте эти индикаторы

// Отправка данных
#property indicator_chart_window
#property indicator_plots 0

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166
#include <GlobalVariables.mqh> // https://www.mql5.com/ru/forum/189649#comment_4854618

const RESOURCEDATA<MqlTick> Resource("::" + __FILE__); // Ресурс для передали данных (тики)

void OnInit()
{
  _GlobalVariableSet("ResourceName", Resource.GetFullName()); // Записали в глобальную переменную полное имя ресурса (read-only)
}

void OnDeinit( const int )
{
  _GlobalVariableDel("ResourceName");
}

int OnCalculate( const int, const int, const int, const double &[] )
{
  MqlTick Ticks[];
  
  CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, 0, 5); // Сформировали данные
  
  Resource = Ticks; // Записали данные
    
  return(0);
}


// Получение данных
#property indicator_chart_window
#property indicator_plots 0

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166
#include <GlobalVariables.mqh> // https://www.mql5.com/ru/forum/189649#comment_4854618

int OnCalculate( const int, const int, const int, const double &[] )
{
  static const RESOURCEDATA<MqlTick> Resource(_GlobalVariableGet<string>("ResourceName")); // Создали ресурс на основе переданного в глобальной переменной полного имени
  
  MqlTick Ticks[];

  Resource.Get(Ticks); // Считали данные из ресурса.
  
  ArrayPrint(Ticks);   // Распечатали полученные данные
  
  return(0);
}
 
fxsaber:

Обновите ResourceData.mqh и попробуйте эти индикаторы


Спасибо, что-то получилось, сейчас буду разбирать, чтобы понять как работает.
Можете, пожалуйста, поправить предупреждения в GlobalVariables.mqh? Мои знание закончелис у Res=-1, но там тогда вообще ошибку показала. И с OnStart() предупреждение я тоже не знаю как убрать.


Файлы:
 
Nauris Zukas:

Можете, пожалуйста, поправить предупреждения в GlobalVariables.mqh?

Файлы:
 
fxsaber:

Спасибо!

 

По первым тестам, я так полагаю что для double и datetime надо делать отдельные ресурсы и имя глобальных переменных. Правильно?

const RESOURCEDATA<double>ResourceDouble("::Double_"+__FILE__); 
const RESOURCEDATA<datetime>ResourceTime("::Time_"+__FILE__); 

int OnInit()
  {
   _GlobalVariableSet("ResourceName",ResourceDouble.GetFullName()); 
   Print(" ResourceDouble.GetFullName(): ",ResourceDouble.GetFullName());

   _GlobalVariableSet("ResourceName1",ResourceTime.GetFullName());  
   Print(" ResourceTime.GetFullName(): ",ResourceTime.GetFullName());   
   
//---
   return(INIT_SUCCEEDED);
  }
 
Nauris Zukas:

По первым тестам, я так полагаю что для double и datetime надо делать отдельные ресурсы и имя глобальных переменных. Правильно?

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

Причина обращения: