Bibliotecas: TradeTransactions - página 3

 
nicholi shen:

Obrigado por sua apreciação. Aprendi a programar neste fórum. Publico meu trabalho porque ele é disciplinador. Uso minhas descrições como dicas, pois esqueço muito rapidamente o que e como escrevi.

Peço desculpas por meu estilo de codificação, mas ele foi feito para mim mesmo. E foi publicado como um efeito colateral.

Infelizmente, é impossível avaliar a popularidade dos trabalhos publicados. Se alguém os usa, então há um círculo muito restrito de usuários.

Aumentar o número de usuários - esse objetivo não existe.

 

Não consigo obter os dados. Aqui, executo um script e, pelo que entendi, os dados agora estão armazenados em algum lugar no terminal:

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/pt/code/22166
//+------------------------------------------------------------------+
//| Função de início do programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
   const RESOURCEDATA<int>ResourceINT("::int"); // Recurso para troca de ints. const - como uma prova de que nada é gravado no objeto de classe 
   int ArrayINT[]={1,2,3};
   ResourceINT=ArrayINT;  // O recurso armazena uma matriz. 
   int ArrayINT2[];
   ResourceINT.Get(ArrayINT2); // Ler dados do recurso.
   ArrayPrint(ArrayINT2);      // Retirado: 1 2 3 5 1 2 3 
  }
//+------------------------------------------------------------------+

aqui eu executo outro script para obter os dados que foram salvos quando executei o primeiro script, mas os dados não são exibidos:

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/pt/code/22166
//+------------------------------------------------------------------+
//| Função de início do programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
// Esse é o nome completo do recurso a ser acessado de outro programa
   //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); // Imprima o nome completo do recurso.
   const RESOURCEDATA<int>Resource(NameOut); // Recurso para acessar dados (somente leitura) de outro programa
   int ArrayINT2[];
   Resource.Get(ArrayINT2); // Ler dados do recurso.
   ArrayPrint(ArrayINT2);      // Retirado: 

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

Você pode corrigir onde está o erro?

Arquivos anexados:
 
Nauris Zukas:

Não consigo obter os dados. Aqui estou executando um script e, pelo que entendi, os dados agora estão armazenados em algum lugar no terminal

Os dados são destruídos assim que seu proprietário (que os escreveu) para de trabalhar. Se isso não for feito, a memória do Terminal ficará rapidamente desordenada.

Inicie o data master como um consultor/indicador. Enquanto ele estiver ativo, seus dados estarão disponíveis para outros.

 
fxsaber:

Os dados são destruídos assim que seu proprietário (que os escreveu) para de trabalhar. Se isso não for feito, a memória do Terminal ficará rapidamente desordenada.

Inicie o data master como um consultor/indicador. Enquanto ele estiver ativo, seus dados estarão disponíveis para outros.

Isso também não funcionou com os indicadores. Acho que há algo errado com o caminho.

Arquivos anexados:
 
Nauris Zukas:

Também não funcionou nos indicadores. Acho que há algo errado com o caminho.

Você cria um recurso em cada OnCalculate e o elimina quando a função é concluída.

Você deve tornar o objeto estático. Isso é o básico da OOP.

 
fxsaber:

Você cria um recurso em cada OnCalculate e o elimina quando a função é concluída.

Você deve tornar o objeto estático. Esse é o básico da OOP.

Eu adicionei static, mas ainda não funciona. Você pode corrigir o que está errado?

Arquivos anexados:
 
Nauris Zukas:

Adicionei estática, mas ainda não funciona. Você pode corrigir o que está errado?

Atualize o ResourceData.mqh e tente estes indicadores

// Envio de dados
#property indicator_chart_window
#property indicator_plots 0

#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> Resource("::" + __FILE__); // Recurso para transferência de dados (ticks)

void OnInit()
{
  _GlobalVariableSet("ResourceName", Resource.GetFullName()); // Escreva o nome completo do recurso (somente leitura) na variável global
}

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); // Dados gerados
  
  Resource = Ticks; // Registrou os dados
    
  return(0);
}


// Recuperação de dados
#property indicator_chart_window
#property indicator_plots 0

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/pt/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")); // Criou um recurso com base no nome completo passado na variável global
  
  MqlTick Ticks[];

  Resource.Get(Ticks); // Ler dados do recurso.
  
  ArrayPrint(Ticks);   // Imprimir os dados obtidos
  
  return(0);
}
 
fxsaber:

Atualize o ResourceData.mqh e tente estes indicadores


Obrigado, consegui alguma coisa, agora vou desmontá-lo para ver como funciona.
Você pode corrigir os avisos no GlobalVariables.mqh? Meu conhecimento terminou em Res=-1, mas ele mostrou um erro lá. E também não sei como remover o aviso OnStart().


Arquivos anexados:
 
Nauris Zukas:

Você pode corrigir os avisos no GlobalVariables.mqh?

Arquivos anexados:
 
fxsaber:

Obrigado!