程序库: TradeTransactions - 页 3

 
nicholi shen:

感谢您的赞赏。我是在这个论坛上学会编程的。我发表我的作品是因为它有纪律性。我用我的描述作为线索,因为我很快就会忘记我写了什么和怎么写的。

我为我的编码风格道歉,但这是为我自己准备的。发表它也是一种副作用。

遗憾的是,我们无法评估已发表作品的受欢迎程度。如果有人使用它们,那么用户圈子就会非常狭窄。

增加用户数量--没有这样的目标。

 

我无法获取数据,在这里我运行了一个脚本,据我所知,数据现在存储在终端的某个地方:

#include <fxsaber\TradeTransactions\ResourceData.mqh> //https://www.mql5.com/zh/code/22166
//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
void OnStart()
  {
   const RESOURCEDATA<int>ResourceINT("::int"); // 用于交换 ints 的资源。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/zh/code/22166
//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
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); // 从另一个程序访问数据(只读)的资源
   int ArrayINT2[];
   Resource.Get(ArrayINT2); // 从资源中读取数据。
   ArrayPrint(ArrayINT2);      // 撤回: 

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

您能纠正错误所在吗?

附加的文件:
 
Nauris Zukas:

我无法获取数据,我正在运行一个脚本,据我所知,数据现在存储在终端的某个地方。

一旦数据的所有者(编写者)停止工作,数据就会被销毁。如果不这样做,终端内存很快就会变得杂乱无章。

将数据主站作为顾问/指示器启动。只要它还活着,其他人就可以使用它的数据。

 
fxsaber:

一旦数据的所有者(写入者)停止工作,数据就会被销毁。如果不这样做,终端内存很快就会变得杂乱无章。

将数据主站作为顾问/指示器启动。只要它还活着,其他人就可以使用它的数据。

这对指标也不起作用。我认为路径出了问题。

附加的文件:
 
Nauris Zukas:

它在指示器上也不起作用。我认为路径出了问题。

你在每个 OnCalculate 中创建了一个资源,并在函数完成后将其删除。

你应该让对象静态化。这是 OOP 的基本原理。

 
fxsaber:

您可以在每个 OnCalculate 中创建一个资源,并在函数完成时将其删除。

你应该使对象静态化。这是 OOP 的基本原理。

我添加了 static,但还是不行。你能纠正其中的错误吗?

附加的文件:
 
Nauris Zukas:

我添加了静态数据,但还是不行。您能纠正一下问题所在吗?

更新 ResourceData.mqh 并尝试这些指标

// 发送数据
#property indicator_chart_window
#property indicator_plots 0

#include <fxsaber\TradeTransactions\ResourceData.mqh> //https://www.mql5.com/zh/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()); // 将资源全名(只读)写入全局变量
}

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/zh/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:

谢谢!