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

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

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. Na verdade, 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 carrapatos e.... é destruída 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. Crie uma estrutura com campos necessários, declare uma variável global com o tipo desta estrutura, faça uma função para atualizar informações nesta estrutura a cada tick e use-a para coletar o que você precisa, pois a variável será global, você não precisará usá-la em funções e não precisará de ponteiros.


Obrigado, lembrei-me porque mudei para estenografia, a variável não é atualizada em loops (obviamente a função não é chamada) e preciso fazer um novo para cada espirro, e depois matá-lo. Em geral, é mais fácil trocar a vareta de retorno pela vareta de retorno.

 
Vitaly Muzichenko:

Enviar um pós-pedido ao servidor com o número de conta

No servidor, verifique o número de entrada em relação a todas as linhas do arquivo CSV e, se houver uma correspondência, então a partir desta linha no arquivo, envie uma resposta para o terminal. Resta apenas ler a resposta do servidor no terminal e exibi-la no gráfico.

Em geral, é mais fácil implementar tais coisas no MySQL do que em arquivo.


Obrigado pela resposta, Vitaly!

Estou tentando entender isso por três dias, mas nada sai (sou um iniciante - no início de minha carreira)...

Você pode descrevê-lo com mais detalhes? Com qualquer exemplo...

Desculpe pela minha falta de compreensão...

 

E mais uma pergunta...

Eu queria que o feixe traçasse uma linha do preço atual - até o final do dia até o final do nível (23:59) (branco2), mas traça até o final do dia (conforme necessário), mas não no nível (branco2), e vai até o fundo do gráfico de fronteira.

E eu lhe dou qualquer um dos níveis (vermelho1, vermelho2, etc.), mas ele ainda brilha para cima ou para baixo até o infinito. Eu o escrevi corretamente para sempre iniciar o Beam deHigh[0], ou seja, com um novo castiçal ele muda para um novo castiçal (ou seja, segue o preço) ou ele desenha o Beam apenas uma vez? Os níveis estão sendo obtidos a partir do CSV. Por favor, ajude...

if(уровни==Daily)
        {
         double red1 = d_input[0];
         double red2 = d_input[1];
         double blue1 = d_input[2];
         double blue2 = d_input[3];
         double white = d_input[4];
         double signal= d_input[5];
         double z_1 = d_input[6];
         double z_2 = d_input[7];
         double white2 = d_input[8];
                 
         t0 = дата_уровней + 1*PeriodSeconds(PERIOD_M1);
         t1 = дата_уровней + 24*PeriodSeconds(PERIOD_H1);

         Draw_Level("red1", red1, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("red2", red2, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("blue1", blue1, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("blue2", blue2, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("white", white,c_day_3, STYLE_SOLID,2);
         Draw_Level("white2", white2,c_day_3, STYLE_DOT,0);
        
         Draw_Level("green1",z_1, c_day_4, STYLE_SOLID,2);
         Draw_Level("green2",z_2,c_day_3, STYLE_DOT,2);
               
        string name = "Ray";
         int window = 0, time1 = (int)Time[0], time2 = (int)StrToTime(txt_data+" 23:59");
          double price1 = High[0], price2= white2;
         
          ObjectCreate(name, OBJ_TREND, window, time1, price1, time2, price2);
          ObjectSet(name, OBJPROP_COLOR, clrAqua);
          ObjectSet(name, OBJPROP_RAY_RIGHT, false);
          ObjectSet(name,OBJPROP_WIDTH,1);
          ObjectSet(name,OBJPROP_STYLE,2);
              
        
        if(показ_не отработанных)
            if(!check_white_level(дата_уровней,white))
               draw_line(t0,white,c_day_3);
                 else(Draw_Level("white", white,c_day_3, STYLE_SOLID,1));// меняет толщину белой при достижении ценой
                
        }
 
MosheDayan:

E mais uma pergunta...

Eu queria que o feixe traçasse uma linha do preço atual - até o final do dia até o final do nível (23:59) (branco2), mas traça até o final do dia (conforme necessário), mas não no nível (branco2), e vai até o fundo do gráfico de fronteira.

E eu o aconchego em qualquer um dos níveis (vermelho1, vermelho2, etc.), mas ele ainda brilha para cima ou para baixo até o infinito. Os níveis são obtidos a partir do CSV. Ajude a plz...

Descubra (confira) o valor do branco2 com Alerta ou Impressão.
 
STARIJ:
Verifique o valor do branco2 usando Alert ou Print.
Alerta escreve imediatamente "EURUSD ErrorFileOpen() para escrever" e todos os níveis do dia atual desaparecem... Os níveis de ontem e todos os anteriores ainda estão lá... Então... A viga no local começa onde deveria e vai até o nível branco2 de ontem, mas não no final do dia, e hoje verticalmente para baixo posso ver que ela pára no nível branco2 de ontem.
 
MosheDayan:
Eu tentei verificar usando Alert e imediatamente escrevi "EURUSD Error FileOpen() para escrever" e todos os níveis do dia atual desapareceram... Os níveis de ontem e todos os anteriores permanecem... Então... A viga no local começa onde deveria e vai até o nível do branco2 de ontem, mas não no final do dia, e hoje verticalmente para baixo pode-se ver visualmente que ela pára no nível do branco2 de ontem.

Por que você precisa acessar o arquivo? Você tem o valor white2 e o emite com Alert("white2 = ", white2) antes de usá-lo;

 
STARIJ:

Por que você precisa se referir ao arquivo? Você tem o valor de white2 e o emite com Alert("white2 = ", white2) antes de usá-lo;

Obrigado pelo esclarecimento.... Aqui está o que diz: branco2 = 0,0

p.s. Eu é que sou estúpido... White2 = 0,0 é para outros pares de moedas que não têm níveis em CSV. Mas há níveis para EURUSD em CSV e Alert mostra-os ontem (white2 1.1720) e hoje (white2 1.1810).

O raio começa onde deveria, mas vai até o nível do branco2 de ontem em 1.1720, ao invés do branco2 de hoje em 1.1810 e não vai ao final do dia 23:59, mas hoje pára no branco2 de ontem, ou seja, 1.1720.

 

algo incompreensível

descreveu uma função

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alerta("beg IsBelow");

Alerta("NextTick=",NextTick=",NextTick);

//---------------------------


//---------------------------

Alerta("NextTick=",NextTick=",NextTick);

Alerta("fim IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

recebeu uma mensagem antes do corpo do ponto-e-vírgula expexto {

Pergunta qual ponto-e-vírgula é esperado ?

Por favor, explique ...

 
buyanov:

algo incompreensível

descreveu uma função

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alerta("beg IsBelow");

Alerta("NextTick=",NextTick=",NextTick);

//---------------------------


//---------------------------

Alerta("NextTick=",NextTick=",NextTick);

Alerta("fim IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

recebeu uma mensagem antes do corpo do ponto-e-vírgula expexto {

Pergunta qual ponto-e-vírgula é esperado ?

Por favor, explique...


vazio IsBelow()

 
buyanov:

algo incompreensível

descreveu uma função

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alerta("beg IsBelow");

Alerta("NextTick=",NextTick=",NextTick);

//---------------------------


//---------------------------

Alerta("NextTick=",NextTick=",NextTick);

Alerta("fim IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

recebeu uma mensagem antes do corpo do ponto-e-vírgula expexto {

Pergunta qual ponto-e-vírgula é esperado ?

Por favor, explique ...

A resposta está aqui
Функции - Основы языка - Справочник MQL4
Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Функции - Основы языка - Справочник MQL4
Razão: