Bibliotecas: TradeTransactions - página 4

 

De acordo com os primeiros testes, presumo que, para double e datetime, devemos criar recursos e nomes de variáveis globais separados. Isso está correto?

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:

De acordo com os primeiros testes, presumo que, para double e datetime, devemos criar recursos e nomes de variáveis globais separados. Isso está correto?

Infelizmente, é muito difícil atingir seu nível de proficiência em linguagem de programação. Talvez outra pessoa possa lhe explicar.

 
fxsaber:

Infelizmente, é muito difícil atingir seu nível de proficiência em linguagem de programação. Talvez outra pessoa possa lhe explicar isso.

Bem, o principal é que tudo funciona para mim até agora.

Arquivos anexados:
 
fxsaber:

Atualize o ResourceData.mqh e tente estes indicadores



Boa tarde! Não é possível transferir do .mqh para o indicador? Ou há algum truque para não reiniciar sempre que compilar o indicador? Criei essa variante, mas ela é redefinida ao compilar o indicador:

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

const RESOURCEDATA<MqlTick>m_Resource("::"+__FILE__); // Recurso para transferência de dados (ticks)

class CMyTicks
  {
protected:
public:
   //+------------------------------------------------------------------+
   //| Construtor.|
   //+------------------------------------------------------------------+ 
   void CMyTicks()
     {
      _GlobalVariableSet("ResourceName",m_Resource.GetFullName()); // Escreva o nome completo do recurso (somente leitura) na variável global 
     }
   //+------------------------------------------------------------------+
   //| Destruidor.|
   //+------------------------------------------------------------------+ 
   void ~CMyTicks()
     {
      //_GlobalVariableDel("ResourceName");
     }

   //+------------------------------------------------------------------+ 
   void CollectTicks()
     {
      MqlTick m_Ticks[];
      CopyTicks(_Symbol,m_Ticks,COPY_TICKS_ALL,0,5); // Dados gerados
      m_Resource=m_Ticks; // Registrou os dados
     }

  };
//+------------------------------------------------------------------+
// Recuperação de dados
#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/pt/code/22166
#include <GlobalVariables.mqh> // https://www.mql5.com/ru/forum/189649#comment_4854618

static const RESOURCEDATA<MqlTick>Resource(_GlobalVariableGet<string>("ResourceName")); // Criou um recurso com base no nome completo passado na variável global 
MqlTick Ticks[];

int OnCalculate(const int rates_total,const int prev_calculated,const int,const double &[])
  {
   if(prev_calculated==0)
     {
      Resource.Get(Ticks); // Ler dados do recurso.
      ArrayPrint(Ticks);   // Imprimir os dados obtidos

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

      Resource.Get(Ticks); // Ler dados do recurso.
      ArrayPrint(Ticks);   // Imprimir os dados obtidos
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

E por conta de "outra pessoa explicará", então eu já sei a resposta, será "pergunte ao autor". Muito obrigado!

 
Nauris Zukas:


Boa tarde! Não é possível transferir do .mqh para o indicador? Ou há algum truque para não reiniciar toda vez que o indicador for compilado? Eu criei essa variante, mas ela é redefinida ao compilar o indicador:

E por conta de "outra pessoa explicará", então já sei a resposta, será "pergunte ao autor". Obrigado!

Infelizmente, não consigo entender a pergunta.

 
fxsaber:

Infelizmente, não consigo entender a pergunta.

O objeto é estático, mas os dados são destruídos. O que está errado em meu exemplo?

 
Nauris Zukas:

O objeto é estático, mas os dados são destruídos. O que está errado em meu exemplo?

Infelizmente, você tem grandes lacunas no seu entendimento de OOP, portanto, não está obtendo o que pretendia. Peça ajuda no fórum com perguntas gerais sobre OOP.

 
fxsaber:

Infelizmente, você tem grandes lacunas em seu entendimento de OOP, portanto, não funciona como pretendido. Peça ajuda ao fórum com perguntas gerais sobre OOP.

Certo, obrigado.

 

Os códigos-fonte da biblioteca contêm o Convert.mqh, que converte rapidamente uma matriz de um tipo em uma matriz de outro tipo.

 

Você pode trocar qualquer coisa por meio do Resources.

// Exemplo de troca de quaisquer dados (incluindo matrizes de strings).

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

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

void OnStart()
{    
  // Dados arbitrários para o exemplo
  string Str[] = {"123", "Hello World!"};
  double Num = 5;
  MqlTick Tick = {0};
  Tick.bid = 1.23456;

  const RESOURCEDATA<uint> Resource; // Recurso para compartilhamento de dados
  CONTAINER<uint> Container;         // Crie um contêiner - tudo será armazenado em uma matriz de um tipo simples (no exemplo, foi escolhido uint)
  
  // Preencher o contêiner com dados diferentes
  Container[0] = Str;
  Container[1] = Num;
  Container[2] = Tick;
    
  // Imprimir os tipos de dados armazenados no contêiner
  for (int i = 0; i < Container.GetAmount(); i++)
    PRINT(Container[i].GetType())

  Resource = Container.Data;  // Enviou os dados para troca
  
  CONTAINER<uint> Container2; // É aqui que obteremos os dados
  
  Resource.Get(Container2.Data); // Obteve os dados
      
  // Obter os dados em sua forma original
  string Str2[];
  Container[0].Get(Str2);                // Obteve a matriz
  ArrayPrint(Str2);

  PRINT(Container[1].Get<double>())      // Temos um número
  PRINT(Container[2].Get<MqlTick>().bid) // Temos a estrutura  
}