Librerías: TradeTransactions - página 3

 
nicholi shen:

Gracias por su aprecio. Aprendí a programar en este foro. Publico mi trabajo porque disciplina. Uso mis descripciones como pistas, porque olvido muy rápidamente qué y cómo escribí.

Pido disculpas por mi estilo de codificación, pero fue pensado para mí mismo. Y se publicó como efecto secundario.

Por desgracia, es imposible evaluar la popularidad de las obras publicadas. Si alguien los usa, entonces un círculo muy estrecho de usuarios.

Aumentar el número de usuarios - no existe tal objetivo.

 

no consigo obtener los datos, aquí ejecuto un script y según tengo entendido los datos se guardan ahora en algún lugar del terminal:

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/es/code/22166
//+------------------------------------------------------------------+
//| Función de inicio del programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
   const RESOURCEDATA<int>ResourceINT("::int"); // Recurso para intercambiar ints. const - como prueba de que no se escribe nada en el objeto de clase 
   int ArrayINT[]={1,2,3};
   ResourceINT=ArrayINT;  // El recurso almacena un array. 
   int ArrayINT2[];
   ResourceINT.Get(ArrayINT2); // Leer datos del recurso.
   ArrayPrint(ArrayINT2);      // Retirada: 1 2 3 5 1 2 3 
  }
//+------------------------------------------------------------------+

aquí ejecuto otro script para obtener los datos que se guardaron al ejecutar el primer script, pero los datos no se muestran:

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/es/code/22166
//+------------------------------------------------------------------+
//| Función de inicio del programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
// Este es el nombre completo del recurso al que se va a acceder desde otro 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); // Imprime el nombre completo del recurso.
   const RESOURCEDATA<int>Resource(NameOut); // Recurso para acceder a datos (sólo lectura) de otro programa
   int ArrayINT2[];
   Resource.Get(ArrayINT2); // Leer datos del recurso.
   ArrayPrint(ArrayINT2);      // Retirada: 

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

¿Pueden corregirme dónde está el error?

Archivos adjuntos:
 
Nauris Zukas:

No puedo obtener los datos, aquí estoy ejecutando un script y como yo lo entiendo, los datos se almacenan ahora en algún lugar de la terminal

Los datos se destruyen tan pronto como su propietario (quien los escribió) deja de trabajar. Si esto no se hace, la memoria del Terminal se saturará rápidamente.

Inicie el maestro de datos como un asesor/indicador. Mientras viva, sus datos estarán disponibles para los demás.

 
fxsaber:

Los datos se destruyen en cuanto su propietario (quien los escribió) deja de trabajar. Si no se hace así, la memoria del Terminal se saturará rápidamente.

Inicie el maestro de datos como un consejero/indicador. Mientras viva, sus datos estarán disponibles para los demás.

Tampoco funcionó con los indicadores. Creo que algo falla en la ruta.

Archivos adjuntos:
 
Nauris Zukas:

Tampoco funcionó con los indicadores. Creo que algo falla en la ruta.

Creas un recurso en cada OnCalculate y lo matas cuando termina la función.

Deberías hacer el objeto estático. Esto es lo básico de la programación orientada a objetos.

 
fxsaber:

Se crea un recurso en cada OnCalculate y se mata cuando la función finaliza.

Debes hacer que el objeto sea estático. Esto es lo básico de la programación orientada a objetos.

He añadido static, pero sigue sin funcionar. ¿Puede corregir lo que está mal allí?

Archivos adjuntos:
 
Nauris Zukas:

He añadido estática, pero sigue sin funcionar. ¿Puede corregir lo que está mal allí?

Actualiza ResourceData.mqh y prueba estos indicadores

// Envío de datos
#property indicator_chart_window
#property indicator_plots 0

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

const RESOURCEDATA<MqlTick> Resource("::" + __FILE__); // Recurso para la transferencia de datos (ticks)

void OnInit()
{
  _GlobalVariableSet("ResourceName", Resource.GetFullName()); // Escribe el nombre completo del recurso (sólo lectura) en la variable 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); // Datos generados
  
  Resource = Ticks; // Grabación de los datos
    
  return(0);
}


// Recuperación de datos
#property indicator_chart_window
#property indicator_plots 0

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/es/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")); // Creado un recurso basado en el nombre completo pasado en la variable global
  
  MqlTick Ticks[];

  Resource.Get(Ticks); // Leer datos del recurso.
  
  ArrayPrint(Ticks);   // Imprimir los datos obtenidos
  
  return(0);
}
 
fxsaber:

Actualiza ResourceData.mqh y prueba estos indicadores


Gracias, ya tengo algo, ahora lo desmontaré para ver como funciona.
¿Puedes por favor corregir las advertencias en GlobalVariables.mqh? Mis conocimientos terminaban en Res=-1, pero luego daba error ahí. Y tampoco se como quitar la advertencia de OnStart().


Archivos adjuntos:
 
Nauris Zukas:

¿Puede corregir las advertencias de GlobalVariables.mqh?

Archivos adjuntos:
 
fxsaber:

Gracias.