当转移到另一个时间框架时,我如何改变指标中的全局变量结构? - 页 5

 
fxsaber:

如果你写一份绩效评估,比较一下会很有意思。

好的。请讲。只要自己实施你的部分。
这是我的部分。
我建议从球的以下测试指标(标记为黄色的是负责保存和恢复TF之间的数组结构):
当第一次调用时,窗口内的随机节点数组(默认为100个)被生成并通过贝塞尔曲线连接。
当TF被改变时,与时间和价格相关的节点被保存,不被改变。
为了更好的计量,最好使节点的数量为1000。

#property indicator_chart_window
#include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164
#include <CVar\StructArr.mqh>
#define  SIZE 100

struct Node {
   datetime time;
   double price;
};
Node line[];

ulong t0 = GetMicrosecondCount();
CStructArr<Node> Var("Bezier",line);
ulong t1=GetMicrosecondCount()-t0;

int OnInit() {
   if (ArraySize(line) == 0) GenerateLine();
   else {
      Print("Востановление данных - " + string(t1)+ " микросекунд");
      Print("Время uint[] -> T[] - " + string(Var.uint_to_t)+ " микросекунд");
   }
   DrawBezier(line);
   return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[]) {
   return(rates_total);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void GenerateLine() {
   ArrayResize(line,SIZE);
   for (int i = 0; i<SIZE; i++) {
      line[i].time = Canvas.TimePos(double(rand() % W.Width));
      line[i].price = Canvas.Price(rand() % W.Height);
   }
   t0 = GetMicrosecondCount();
   Var.Set(line);
   t0 = GetMicrosecondCount()-t0;
   Print("Сохранение данных - " + string(t0)+ " микросекунд");
   Print("Время T[] -> uint[] - " + string(Var.t_to_uint)+ " микросекунд");
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DrawBezier(Node &arr[]) {
   int size = ArraySize(arr);
   if (size>1) {
      Canvas.Erase(0x00FFFFFF);
      int X[],Y[];
      ArrayResize(Y,size);
      ArrayResize(X,size);
      for(int i=0; i<size; i++) {
         X[i] = (int)Canvas.X(line[i].time);
         Y[i] = (int)Canvas.Y(line[i].price);
      }
      Canvas.PolylineSmooth(X,Y,0xFFFF00FF,3);
      Canvas.Update();
   }
}
//+------------------------------------------------------------------+

2021.07.11 04:41:02.705 TestVar (EURUSD,M6)     Сохранение данных - 15 микросекунд
2021.07.11 04:41:02.705 TestVar (EURUSD,M6)     Время T[] -> uint[] - 4 микросекунд
2021.07.11 04:42:03.085 TestVar (EURUSD,M10)    Востановление данных - 317 микросекунд
2021.07.11 04:42:03.085 TestVar (EURUSD,M10)    Время uint[] -> T[] - 4 микросекунд
2021.07.11 04:42:10.012 TestVar (EURUSD,M12)    Востановление данных - 878 микросекунд
2021.07.11 04:42:10.012 TestVar (EURUSD,M12)    Время uint[] -> T[] - 4 микросекунд
2021.07.11 04:42:44.235 TestVar (EURUSD,M30)    Востановление данных - 1061 микросекунд
2021.07.11 04:42:44.235 TestVar (EURUSD,M30)    Время uint[] -> T[] - 8 микросекунд
2021.07.11 04:43:20.556 TestVar (EURUSD,M20)    Востановление данных - 303 микросекунд
2021.07.11 04:43:20.556 TestVar (EURUSD,M20)    Время uint[] -> T[] - 4 микросекунд
2021.07.11 04:43:25.339 TestVar (EURUSD,M15)    Востановление данных - 443 микросекунд
2021.07.11 04:43:25.339 TestVar (EURUSD,M15)    Время uint[] -> T[] - 5 микросекунд


与SIZE = 1000。

2021.07.11 05:01:32.602 TestVar (EURUSD,M5)     Сохранение данных - 41 микросекунд
2021.07.11 05:01:32.602 TestVar (EURUSD,M5)     Время T[] -> uint[] - 26 микросекунд
2021.07.11 05:01:36.541 TestVar (EURUSD,M6)     Востановление данных - 586 микросекунд
2021.07.11 05:01:36.541 TestVar (EURUSD,M6)     Время uint[] -> T[] - 64 микросекунд
2021.07.11 05:01:38.317 TestVar (EURUSD,M10)    Востановление данных - 648 микросекунд
2021.07.11 05:01:38.317 TestVar (EURUSD,M10)    Время uint[] -> T[] - 35 микросекунд
2021.07.11 05:01:40.534 TestVar (EURUSD,M12)    Востановление данных - 567 микросекунд
2021.07.11 05:01:40.534 TestVar (EURUSD,M12)    Время uint[] -> T[] - 36 микросекунд
2021.07.11 05:01:42.814 TestVar (EURUSD,M15)    Востановление данных - 449 микросекунд
2021.07.11 05:01:42.814 TestVar (EURUSD,M15)    Время uint[] -> T[] - 44 микросекунд
2021.07.11 05:01:45.015 TestVar (EURUSD,M20)    Востановление данных - 728 микросекунд
2021.07.11 05:01:45.015 TestVar (EURUSD,M20)    Время uint[] -> T[] - 59 микросекунд
2021.07.11 05:01:47.536 TestVar (EURUSD,M30)    Востановление данных - 2349 микросекунд
2021.07.11 05:01:47.536 TestVar (EURUSD,M30)    Время uint[] -> T[] - 45 микросекунд
附加的文件:
TestVar.mq5  6 kb
StructArr.mqh  3 kb
 

对于MQL来说,如果有某种全局 指标变量的指针就好了。它们将被初始化一次,而且只在安装指标时被初始化。

例如:
intglobal Var;

。在这种情况下,我们将不需要所有这些资源。让我们停止做梦,继续前进。

 
Nikolai Semko:

这是我的作品。

        array out of range in 'iCanvas.mqh' (114,55)
 
Mikhail Nazarenko:

对于MQL来说,如果有某种全局 指标变量的指针就好了。它们将被初始化一次,而且只在安装指标时被初始化。

例如:
intglobal Var;

。在这种情况下,我们将不需要所有这些资源。让我们停止做梦,继续前进。

除了PersistentStorage,ServerSideStorage也不错(在服务器端存储小东西)和AuthorOwnedCloud(让一些数据由作者管理)......但这是21世纪的东西 :-) 。

做梦吧,这就够了......

 
Nikolai Semko:

当TF发生变化时,与时间和价格相关的节点被保留,不会发生变化。

这是对阵列铸造的统计学意义上的衡量吗?

 
Taras Slobodyanik:

:)

奇怪的是,没有人写 "拐杖"、"重塑车轮"、"数据传输到另一个终端的困难"、"问题必须通过MQL手段解决"。
事实证明,metaquot解决方案是拐杖和mauvais ton)


MQ的这个解决方案在哪里?
 

fxsaber:

  array out of range in 'iCanvas.mqh' (114,55)


你似乎有一个过时的版本。
最新版本1.43
https://www.mql5.com/ru/code/22164

附加的文件:
iCanvas.mqh  52 kb
 
fxsaber:

这是对阵列铸造的统计学意义上的衡量吗?

没有人阻止你做出自己的调整。

HH
也请不要开始谈论弦子。
在这种类型的任务中,它们是不相关的,这就是为什么它们没有在我的类中实现,我的结构不能包含字符串类型
我知道它们在你的班级中得到了实施。但我们谈论的是别的东西。

 
PapaYozh:

MQ的这个解决方案在哪里?

是的,当然,这些解决方案根本就不存在。

所以用户发明了 "拐杖自行车" -FileWriteStructGlobalVariableSet
而最没有拐杖的解决方案,当然是将变量写入资源,加上将结构写入全局变量)

 
Nikolai Semko:

你似乎有一个过时的版本。
最新版本1.43
https://www.mql5.com/ru/code/22164

这个版本就是给你带来错误的那个版本。