Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1032

 

É possível duplicar um objeto Ccanvas?


Eu crio um objeto com Ccanvas e no processo tenho que criar duplicatas. Às vezes 10-20 e às vezes 100-200.

Uma vez o objeto é definitivamente desenhado. Existe alguma maneira de duplicá-la?

 
Sergey Likho:

É possível duplicar um objeto Ccanvas?


Eu crio um objeto com Ccanvas e no processo tenho que criar duplicatas. Às vezes 10-20 e às vezes 100-200.

Uma vez o objeto é definitivamente desenhado. Existe alguma maneira de duplicá-la?

CCanvas *canv = novo CCanvas
Mas isto não é uma duplicação de uma já existente. Está criando um novo e um ponteiro para ele.
 
Artyom Trishkin:
CCanvas *canv = novo CCanvad

Eu me referia a um objeto gráfico.

   CCanvas obj;
   obj.CreateBitmapLabel(0,1,name,x,y,x_size,y_size,COLOR_FORMAT_ARGB_NORMALIZE);
   obj.FillRectangle(0,0,x_size,y_size,ColorToARGB(Color,Alpha));
   obj.Update(false);


Как сделать 10 копий с измененными координатами?
 
Sergey Likho:

Eu me referia a um objeto gráfico.

Eu lhe mostrei. Se você não sabe com antecedência quantos objetos precisam ser criados, então somente por meio de novos objetos.
Se o número for conhecido, então
obj1, obj2, obj3,...,objN
 
Igor Makanu:

Eu poderia estar errado, mas sua ligação será o fio do autor, mas você tem que folhear todo o fio, Igor parece ter postado códigos um pouco crus, e então às vezes reescrevi o que precisava ser melhorado, embora novamente eu possa estar errado - folheei este fio há cerca de 5-6 anos, eu não me lembro mais

Você não está enganado. Recentemente folheado através de todo o fio condutor do autor. Levei cerca de 2-3 dias. No tópico do autor em vista do afastamento da escrita, algumas de suas características não são mais relevantes (ou assim me pareceu). Leia absolutamente tudo e altamente atual e irrelevante pouco. E como você notou, ele teve erros que apareceram após 2-3, ou até mais páginas, quando alguém decidiu usar sua função, encontrou o erro e o corrigiu e apenas disse que havia um erro, ou apenas apontou. Assim, mesmo 10 páginas depois a mesma função pode aparecer novamente, seja corrigida ou melhorada (o tempo passou e ele quis melhorá-la).

Portanto, se alguém puxou apenas o tópico mais importante e relevante, você só pode dizer obrigado e economizar muito tempo.

 
Como posso passar um ponteiro para uma função (ou seja, escrever uma função que leva um ponteiro para uma função como argumento) como um parâmetro? Já fiz isso antes em mql4, mas perdi uma cópia do arquivo onde estava este exemplo.
 
Seric29:
Como passar um ponteiro para uma função (a função leva um ponteiro para a função como argumento) como um parâmetro? Já o fiz antes com mql4, mas perdi uma cópia do arquivo de exemplo.

A MQL alguma vez apoiou os indicadores de função? Acho que não. Uma solução é embrulhar a função em uma classe e passar o ponteiro para o objeto.

 
Sergey Popov:

Olá a todos!

Quero escrever uma função em minha EA que proíba a comercialização nas primeiras 2 horas após o início da comercialização.

Mas me deparei com o fato de que o iTime(Symbol(),1440, 0) não retorna corretamente o horário de abertura da vela do dia.

Mais especificamente: em 26.12.2019 o mercado foi aberto às 06:00:00, mas o iTime determina 00:00:00:00.

Como faço para calcular exatamente o horário de abertura do dia?

SymbolInfoSessionTrade vai me ajudar a descobrir o tempo de negociação. Não sei se isso reflete mudanças para o Natal e outros feriados.

 
Aleksey Mavrin:

A MQL alguma vez apoiou os indicadores de função? Acho que não. Uma solução é embrulhar a função em uma classe e passar um ponteiro para o objeto.

E é verdade. Isto é feito usando a ajuda de leitura do typedif specifier, mas o esquema é diferente do c++. Encontrei um fórum onde uma pessoa gravou este código, mas não salvei o arquivo e reiniciei o sistema, é claro que o arquivo foi apagado. Mas a ajuda mostra um exemplo simples e eu tinha um exemplo sobre o qual eu estava perguntando.

 
Aleksey Mavrin:

A MQL alguma vez apoiou os indicadores de função? Acho que não. Uma solução é embrulhar a função em uma classe e passar o ponteiro para o objeto.

Você pode, codificar para reproduzir:

#property copyright "Copyright 2019, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
typedef void(*TFuncvoidPTR)(void);
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   TFuncvoidPTR f_ptr[3];
   f_ptr[0] = f_1;
   f_ptr[1] = f_2;
   f_ptr[2] = f_3;
   for(int i=0;i<ArraySize(f_ptr);i++)
   {
      printf("Вызываю фунцию № %i ",i);
      f_ptr[i]();
   }

}
//+------------------------------------------------------------------+
void f_1() {Print("Это вызов функции : ",__FUNCTION__);}
void f_2() {Print("Это вызов функции : ",__FUNCTION__);}
void f_3() {Print("Это вызов функции : ",__FUNCTION__);}

2019.12.30 18:30:55.518 Roteiro tst EURUSD,H1: removido

2019.12.30 18:30:55.511 tst EURUSD,H1: razão uninit 0

2019.12.30 18:30:55.511 tst EURUSD,H1: Esta é a chamada de função: f_3

2019.12.30 18:30:55.511 tst EURUSD,H1: Função de chamada número 2

2019.12.30 18:30:55.511 tst EURUSD,H1: Esta é a função de chamada : f_2

2019.12.30 18:30:55.511 tst EURUSD,H1: Função de chamada #1

2019.12.30 18:30:55.511 tst EURUSD,H1: Esta é a função de chamada : f_1

2019.12.30 18:30:55.511 tst EURUSD,H1: Chamada de aspiração nº 0

2019.12.30 18:30:55.511 tst EURUSD,H1: inicializado

2019.12.30 18:30:55.496 Script tst EURUSD,H1: carregado com sucesso