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

 
nicholi shen:

Спасибо за вашу признательность. Я научился программировать на этом форуме. Публикую свои работы, потому что это дисциплинирует. Описания я использую как подсказки, потому что очень быстро забываю, что и как я писал.

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

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

Увеличить количество пользователей - такой цели нет.

 

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

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   const RESOURCEDATA<int>ResourceINT("::int"); // Ресурс для обмена int-ами. const - как доказательство, что ничего не пишется в объект класса  
   int ArrayINT[]={1,2,3};
   ResourceINT=ArrayINT;  // Ресурс хранит массив. 
   int ArrayINT2[];
   ResourceINT.Get(ArrayINT2); // Считали данные из ресурса.
   ArrayPrint(ArrayINT2);      // Вывели: 1 2 3 5 1 2 3   
  }
//+------------------------------------------------------------------+

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

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
// Это полное имя ресурса для обращения из другой программы
   //const string NameOut=StringSubstr(MQLInfoString(MQL_PROGRAM_PATH),StringLen(TerminalInfoString(TERMINAL_PATH))+5)+"::Ticks";   
   const string NameOut=StringSubstr(MQLInfoString(MQL_PROGRAM_PATH),StringLen(TerminalInfoString(TERMINAL_PATH))+5,9)+"Test_Keep_Info.ex5::Ticks";   
   Print(NameOut); // Вывели полное имя ресурса.
   const RESOURCEDATA<int>Resource(NameOut); // Ресурс для доступа к данным (read-only) из другой программы
   int ArrayINT2[];
   Resource.Get(ArrayINT2); // Считали данные из ресурса.
   ArrayPrint(ArrayINT2);      // Вывели: 

  }
//+------------------------------------------------------------------+

Можете поправить где там ошибка?

Файлы:
 
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:

Спасибо!