Como posso mudar a estrutura global de variáveis no indicador ao passar para outro período de tempo? - página 5

 
fxsaber:

Se você escrever uma medida de desempenho, seria interessante comparar.

Certo. Vá em frente. Basta implementar sua parte você mesmo.
Aqui está minha parte.
Sugiro o seguinte indicador de teste da bola (amarelo marcado é o que é responsável por salvar e restaurar a estrutura da matriz entre os TFs):
Quando chamado pela primeira vez, a matriz de nós aleatórios (100 por padrão) dentro da janela é gerada e conectada pela curva de Bezier.
Quando a TF é alterada, os nós ligados ao tempo e ao preço são salvos e não alterados.
Para uma melhor medição, é melhor fazer o número de nós 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 микросекунд


com TAMANHO = 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 микросекунд
Arquivos anexados:
TestVar.mq5  6 kb
StructArr.mqh  3 kb
 

Para a MQL, seria ótimo ter algum tipo de ponteiro para variáveis indicadoras globais. Eles seriam inicializados uma vez e somente na instalação do indicador.

Por exemplo:
int global Var;

. Neste caso, não precisaremos de todos estes recursos. Vamos parar de sonhar e seguir em frente.

 
Nikolai Semko:

Aqui está minha peça.

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

Para a MQL, seria ótimo ter algum tipo de ponteiro para variáveis indicadoras globais. Eles seriam inicializados uma vez e somente na instalação do indicador.

Por exemplo:
int global Var;

. Neste caso, não precisaremos de todos estes recursos. Vamos parar de sonhar e seguir em frente.

Além de PersistentStorage, ServerSideStorage seria bom (para armazenar até mesmo pequenas coisas no lado do servidor) e AuthorOwnedCloud (para deixar alguns dados serem gerenciados pelo autor)... mas é algo do século 21 :-).

Continue sonhando, já chega...

 
Nikolai Semko:

Quando a TF muda, os nós ligados ao tempo e ao preço são mantidos e não mudam.

Esta é uma medida estatisticamente significativa de fundição de matriz?

 
Taras Slobodyanik:

:)

É estranho que ninguém escreva sobre "muletas", "reinvenção de uma roda", "dificuldades de transferência de dados para outro terminal","o problema deve ser resolvido por meios MQL "...
Acontece que as soluções metaquot são muletas e mauvais ton)


Onde está esta solução da MQ ?
 

fxsaber:

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


Você parece ter uma versão desatualizada.
última versão 1.43https://www.mql5.com/ru/code/22164

Arquivos anexados:
iCanvas.mqh  52 kb
 
fxsaber:

Esta é uma medida estatisticamente significativa de fundição de matriz?

ninguém está impedindo que você entre em seus ajustes.

HH
E por favor, não comece a falar sobre cordas.
Neste tipo de tarefas elas são irrelevantes, por isso não são implementadas em minha classe e minha estrutura não pode conter o tipo de fio.
Sei que eles são implementados em sua classe. Mas estamos falando de algo mais.

 
PapaYozh:

Onde está esta solução da MQ ?

Sim, é claro, essas soluções não existem de forma alguma.

Assim, os usuários inventam "crutch-bicycle" -FileWriteStruct e GlobalVariableSet.
E as soluções mais livres de muletas, naturalmente, são a escrita de variáveis para recursos, mais estruturas de escrita para variáveis globais)

 
Nikolai Semko:


Você parece ter uma versão desatualizada.
última versão 1.43 https://www.mql5.com/ru/code/22164

Esta versão é a que lhe deu o erro.