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

 
hamsteruser:

*O retorno também não está sendo destruído. Estou apenas confuso com o escapamento do terminal comercial. É escrever sobre memória não esclarecida.


Dê-me todo o código onde você usa o ponteiro devolvido pela função e o momento em que você destrói o ponteiro. É tão difícil ajudar você.

 
Anatolij Povoroznyj:

Olá. Por favor, ajude-me a corrigir o código. Eu preciso que a EA não abra uma série de pedidos, mas apenas um pedido no primeiro evento.

Agora funciona assim: quando a CCI cruza a linha 200 para baixo, isto abre um BAY, então se a CCI cruza 200 para baixo novamente, isto abre outro BAY, etc., etc., até que a CCI cruze a linha -200 para cima, então todos os BAY são fechados e um Sell é aberto.

O que eu quero perguntar: quando a SSI cruza a linha 200 de cima para baixo - o primeiro e único BAI abre, outros BAIs não devem abrir até que a SSI cruze a linha -200 de baixo para cima, neste caso o BAI é fechado e uma venda é aberta. (Espelhar a linha de venda e a linha -200).


Adicione uma função para verificar se há alguma ordem em aberto do tipo relevante. Ou seja, se houver ordens, a função voltará a ser verdadeira e a próxima ordem não será aberta.

 

Provavelmente fora do tópico...

Um desejo no MT4

Eu uso muitos alertas, e todos eles são definidos para certos parâmetros.

Eu estabeleço o tempo de vida útil de meus alertas e os ressuscito a um novo preço-alvo.

Como o registro de alerta do meu terminal não está ordenado por símbolo ou evento, procurar o alerta correto toda vez é um incômodo.

Seria bom ter opções de ordenação como na guia "comércio".

 
hamsteruser:

Há uma função com um ponteiro:


Eu ainda o chamo em outra função:


Como limpar a memória por trás disso?

Ao apagar (TickReturn); recebo um operando de erro, exceto.

TickReturn* rt = returntick( period, 1 );

int timeis = rt.curtime;

delete rt;
 
MMM1972:

Provavelmente não é o ponto...

Um desejo no MT4

Eu uso muitos alertas, e todos eles são definidos para certos parâmetros.

Eu estabeleço o tempo de vida útil de meus alertas e os ressuscito a um novo preço-alvo.

Como o registro de alerta do meu terminal não está ordenado por símbolo ou evento, procurar o alerta correto toda vez é um incômodo.

Seria bom ter opções de ordenação como na guia "comércio".

O terminal MT4 não está mais sendo desenvolvido. Somente os bugs encontrados estão sendo corrigidos.

 
Алексей Барбашин:

Dê todo o código onde você usa o ponteiro devolvido pela função e o momento em que você destrói o ponteiro. É tão difícil ajudar você.

A memória está realmente fluindo.

  class TickReturn

   {

   public:

      int curtime;

      double open;

      double close;

      double high;

      double low;

      double priceask;

      double pricebid;

      

   };



  TickReturn *returntick(int period, int timeposition)

   {

      TickReturn *returntick = new TickReturn();

      MqlRates rates[];

      MqlTick last_tick;

      

      if(SymbolInfoTick(symbol,last_tick)){}

      else Print("SymbolInfoTick() failed, error = ",GetLastError());

      

      //int timeposition=0;

      ArraySetAsSeries(rates,true);

      ArrayResize(rates,1);

      int copied=CopyRates(symbol,period,timeposition,1,rates);

      

      returntick.curtime = rates[0].time;

      returntick.open = rates[0].open;

      returntick.close = rates[0].close;

      returntick.high = rates[0].high;

      returntick.low = rates[0].low;

      returntick.priceask = last_tick.ask;

      returntick.pricebid = last_tick.bid;

      

      return(returntick);

}

void OnTick() { int period = 15; int timeis = returntick(period, 1).curtime; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)); Вот здесь пытаюсь уничтожить указатель. }

 
hamsteruser:

A memória está realmente fluindo.


void OnTick() { int period = 15; int timeis = returntick(period, 1).curtime; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)); É aqui que eu tento destruir o ponteiro }


Não está muito claro o que exatamente pode ser destruído aqui. Não é de se admirar que a memória vaze. O que é um ponteiro? Um ponteiro é uma referência ao endereço da memória onde a variável dinâmica criada é armazenada. Essencialmente, você chama o procedimento de obter um ponteiro para a variável de classe, neste procedimento o objeto de classe é criado, colocado na memória, depois o ponteiro é devolvido à função de obter os ticks e.... é destruído quando se sai da função. Note que o ponteiro é destruído, mas a memória não é apagada! E a cada novo tique mais e mais memória é consumida! Para evitar este ponto em seu código, você deve primeiro remover a abreviatura e colocar o ponteiro em outra variável:TickReturn* temptick =returntick(período, 1);// pegar o ponteiro e colocá-lo em um tempo int variável é = temptick.curtime; // Obter o valor requerido do objeto pelo ponteiro ...... apagar o temptick; // Destruir o ponteiro e limpar a memória

E antes de destruir o ponteiro, é melhor verificar se ele está correto para evitar o erro de exclusão.

No geral, eu não me preocuparia com as indicações e a classe em particular, pois a tarefa é muito mais fácil na verdade e não há necessidade de usar a classe. Criar estrutura com campos necessários, declarar variável global com tipo desta estrutura, fazer função para atualizar informações nesta estrutura em cada tick e coletar dela o que você precisa, porque a variável será global, você não precisará executá-la através de funções e não precisará de apontadores.

 

1.É possível usar o mql4 para desativar outros EAs?

2. Para verificar se há um Expert Advisor funcionando em um determinado ChartId?

 
Sergey Likho:

1.É possível usar o mql4 para desativar outros EAs?

2. Verifique se há um Expert Advisor em funcionamento em um determinado ChartId?


É possível desativar o comércio dentro do código EA e fazer uma troca em um arquivo externo, então outro EA será capaz de informar a qualquer EA que o comércio não é mais necessário.

 
Aleksey Vyazmikin:

Você pode proibir o comércio dentro do código EA, e fazer a troca no arquivo externo, então outro EA poderá dizer a qualquer EA que o comércio não é mais necessário.


A idéia é exatamente que a EA A irá desativar a EA B por condição.

Razão: