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

 
fxsaber:

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

Не ну главное что мне всё пока получилось и работает.

 
fxsaber:

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



Добрый день! А с .mqh передать на индикатор не получится? Или есть какая-то хитрость что-бы не сбрасывал каждый раз при компиляций индикатора? Сделал такой вариант, но сбрасывается при компиляций индикатора:

#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>m_Resource("::"+__FILE__); // Ресурс для передали данных (тики)

class CMyTicks
  {
protected:
public:
   //+------------------------------------------------------------------+
   //| Constructor.                                                     |
   //+------------------------------------------------------------------+      
   void CMyTicks()
     {
      _GlobalVariableSet("ResourceName",m_Resource.GetFullName()); // Записали в глобальную переменную полное имя ресурса (read-only)      
     }
   //+------------------------------------------------------------------+
   //| Destructor.                                                     |
   //+------------------------------------------------------------------+      
   void ~CMyTicks()
     {
      //_GlobalVariableDel("ResourceName");
     }

   //+------------------------------------------------------------------+  
   void CollectTicks()
     {
      MqlTick m_Ticks[];
      CopyTicks(_Symbol,m_Ticks,COPY_TICKS_ALL,0,5); // Сформировали данные
      m_Resource=m_Ticks; // Записали данные
     }

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

#include <Test_Keep_Info_13.mqh>
CMyTicks  Test;

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

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

int OnCalculate(const int rates_total,const int prev_calculated,const int,const double &[])
  {
   if(prev_calculated==0)
     {
      Resource.Get(Ticks); // Считали данные из ресурса.
      ArrayPrint(Ticks);   // Распечатали полученные данные

      if(ArraySize(Ticks)<1)
        {
         Test.CollectTicks();
         Print(" SAVE TICKS ");
        }

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

 А на счёт "кто-то еще объяснит", так я уже знаю ответ, будет "спрашиваете автора". За ранее, благодарю!

 
Nauris Zukas:


Добрый день! А с .mqh передать на индикатор не получится? Или есть какая-то хитрость что-бы не сбрасывал каждый раз при компиляций индикатора? Сделал такой вариант, но сбрасывается при компиляций индикатора:

 А на счёт "кто-то еще объяснит", так я уже знаю ответ, будет "спрашиваете автора". За ранее, благодарю!

К сожалению, не могу понять вопроса.

 
fxsaber:

К сожалению, не могу понять вопроса.

Объект  static, но данные уничтожаются. Что в моем примере не правильно?

 
Nauris Zukas:

Объект  static, но данные уничтожаются. Что в моем примере не правильно?

К сожалению, у Вас большие пробелы в понимании ООП, поэтому не получается, что задумали. Попросите на форуме помочь с общими вопросами по ООП.

 
fxsaber:

К сожалению, у Вас большие пробелы в понимании ООП, поэтому не получается, что задумали. Попросите на форуме помочь с общими вопросами по ООП.

Хорошо, спасибо.

 

В исходниках библиотеки присутствует Convert.mqh, который быстро конвертирует массив одного типа в массив другого.

 

Можно обмениваться чем угодно через Ресурсы.

// Пример обмена любыми данными (включая строковые массивы).

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

#define PRINT(A) Print(#A + " = " + (string)(A));

void OnStart()
{    
  // Произвольные данные для примера
  string Str[] = {"123", "Hello World!"};
  double Num = 5;
  MqlTick Tick = {0};
  Tick.bid = 1.23456;

  const RESOURCEDATA<uint> Resource; // Ресурс для обмена данными
  CONTAINER<uint> Container;         // Создаем контейнер - все будет храниться в массиве простого типа (в примере выбран uint)
  
  // Заполняем контейнер разными данными
  Container[0] = Str;
  Container[1] = Num;
  Container[2] = Tick;
    
  // Распечатаем типы хранимых в контейнере данных
  for (int i = 0; i < Container.GetAmount(); i++)
    PRINT(Container[i].GetType())

  Resource = Container.Data;  // Отправили данные на обмен
  
  CONTAINER<uint> Container2; // Сюда будем получать данные
  
  Resource.Get(Container2.Data); // Получили данные
      
  // Получим данные в исходном виде
  string Str2[];
  Container[0].Get(Str2);                // Получили массив
  ArrayPrint(Str2);

  PRINT(Container[1].Get<double>())      // Получили число
  PRINT(Container[2].Get<MqlTick>().bid) // Получили структуру  
}
 
fxsaber:

В исходниках библиотеки присутствует Convert.mqh, который быстро конвертирует массив одного типа в массив другого.

// Быстрый кастинг массивов.
#include <fxsaber\TradeTransactions\Convert.mqh> // https://www.mql5.com/ru/code/22166

void OnStart()
{
  MqlTick Ticks[];

  MqlRates Rates[];  
  CopyRates(_Symbol, PERIOD_CURRENT, 0, 10, Rates); // Получили котировки.
  CONVERT::ArrayToArray(Rates, Ticks);              // Кастинг MqlRates[] -> MqlTick[].

  MqlRates Rates2[];    
  CONVERT::ArrayToArray(Ticks, Rates2);             // Кастинг MqlTick[] -> MqlRates[].
  ArrayPrint(Rates2);                               // Убедились, что все корректно.
}
 
fxsaber :

Можно обмениваться чем угодно через Ресурсы.


Вы заявляете о загрузке Container2, но не используете его. По логике должно быть:

  // Получим данные в исходном виде
  string Str2[];
  Container2[0].Get(Str2);                // Получили массив
  ArrayPrint(Str2);

  PRINT(Container2[1].Get<double>())      // Получили число
  PRINT(Container2[2].Get<MqlTick>().bid) // Получили структуру   
Конечно, в вашем примере результат тот же.

Что еще более важно, используя приведенный выше код в качестве скрипта с библиотеками скачать с

Я получил :

2019.03.26 18:11:51.624    R-277866Original (EURUSD,M1)    Container[i].GetType() = string[2]
2019.03.26 18:11:51.624    R-277866Original (EURUSD,M1)    Container[i].GetType() = double
2019.03.26 18:11:51.624    R-277866Original (EURUSD,M1)    Container[i].GetType() = MqlTick
2019.03.26 18:11:51.656    R-277866Original (EURUSD,M1)    Stack overflow in '...\MQL5\Scripts\forum\R-277866Original.ex5'

?