程序库: TradeTransactions - 页 4

 

根据第一次测试,我认为应该为 double 和 datetime 分别创建资源和全局变量名称。这样做对吗?

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:

根据第一次测试,我认为应该为 double 和 datetime 分别创建资源和全局变量名称。这样做对吗?

很遗憾,您的编程语言水平很难达到您的要求。也许其他人会向你解释。

 
fxsaber:

不幸的是,要达到您的编程语言水平非常困难。也许别人会向你解释。

好吧,最重要的是,到目前为止,一切对我来说都是可行的。

附加的文件:
 
fxsaber:

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



下午好!不能从 .mqh 转到指标吗?或者有什么技巧可以在编译指标时不会每次都重置?我做了这样一个变体,但在编译指标时会重置:

#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>m_Resource("::"+__FILE__); // 用于数据传输的资源(滴答声)

class CMyTicks
  {
protected:
public:
   //+------------------------------------------------------------------+
   //| 构造函数。|
   //+------------------------------------------------------------------+ 
   void CMyTicks()
     {
      _GlobalVariableSet("ResourceName",m_Resource.GetFullName()); // 将资源全名(只读)写入全局变量 
     }
   //+------------------------------------------------------------------+
   //| 销毁器。|
   //+------------------------------------------------------------------+ 
   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/zh/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:

很遗憾,我无法理解这个问题。

对象是静态的,但数据被销毁了。我的示例中有什么问题?

 
Nauris Zukas:

对象是静态的,但数据被销毁了。我的例子有什么问题?

不幸的是,你对 OOP 的理解存在很大的差距,所以你没有得到你想要的东西。请在论坛上就一般的 OOP 问题寻求帮助。

 
fxsaber:

不幸的是,你对 OOP 的理解还存在很大的差距,因此不能如愿以偿。请在论坛上咨询有关 OOP 的一般问题。

好的,谢谢。

 

程序库源码包含Convert.mqh,它可以快速将 一种类型的数组转换成另一种类型的数组。

 

您可以通过资源交换任何东西。

// 交换任何数据(包括字符串数组)的示例。

#include <fxsaber\TradeTransactions\ResourceData.mqh> //https://www.mql5.com/zh/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) // 我们得到了结构  
}