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

 
Sergey Likho:

Qual é a melhor maneira de escrever o algoritmo?


Tarefa:

Um Expert Advisor funciona com base em diferentes gráficos.

Preciso ter um arquivo separado com informações minuto a minuto sobre conta, saldo, patrimônio líquido, etc.

Agora acontece que todos os consultores especializados escrevem todas as informações em um único arquivo. Como resultado, temos muitas entradas desnecessárias.

Qual é a solução original possível, para que apenas um bot faça registros no arquivo (e, se fosse excluído, o outro bot começaria a fazer registros, etc.)

Criar um objeto gráfico no OnInit() com o nome da EA, ou qualquer outro objeto. Talvez, a EA já esteja criando um objeto, você pode usá-lo, por exemplo, "MyEA":ObjectCreate(0,"MyEA",OBJ_...,...))

Em OnTick() onde escrever no arquivo precisamos verificar a primeira identificação gráfica com esta mesma etiqueta = significa que este é o primeiro Expert Advisor instalado no terminal, não estamos interessados no resto.

Temos que usar o overshoot:

string ChartGetSymb()
  {
   string symb="";
   long chartID=ChartFirst();
   while(chartID!=-1) 
    {
      if(ObjectGetString(chartID,"MyEA",OBJPROP_NAME)=="MyEA")
       {
        symb=ChartSymbol(chartID);
        break;
       }
      chartID=ChartNext(chartID);
     }
   return(symb);
  }

Recebemos o primeiro gráfico/símbolo com um Expert Advisor instalado nele

Em seguida, comparamos com o primeiro Expert Advisor antes de escrevê-lo em um arquivo:

if(ChartGetSymb() == Symbol()) {
  записываем в файл, если соответствует символу, иначе не записываем
}


Não é uma construção fácil, mas é melhor do que escrever para uma variável global

 
Artyom Trishkin:

Pegue o MA padrão, mude o tipo de dados do buffer, compile e verifique na janela de dados do terminal (Ctrl+D)

Isso não ajudaria, pois não apareceria no terminal. Mas eu o verifiquei no indicador ZigZag, que tem dois amortecedores adicionais para Alto e Baixo, declarado como INDICADOR_CALCULATIONS. Eles também são retirados do programa, embora não sejam exibidos no terminal. De qualquer forma, obrigado pela dica.
 
Sergey Likho:

ChartID() é escrito nas variáveis globais do terminal com um erro. o que é este absurdo?


Tente este código:


O resultado da execução deste código

2019.11.29 15:22:07.453 Script 00 EURUSD,H1: removed
2019.11.29 15:22:07.453 00 EURUSD,H1: uninit reason 0
2019.11.29 15:22:07.453 00 EURUSD,H1: GVAR id:131992895281608496 GV_id:131992895281608496
2019.11.29 15:22:07.453 00 EURUSD,H1: initialized
2019.11.29 15:22:07.433 Script Test\00 EURUSD,H1: loaded successfully
 
Vitaly Muzichenko:

Criar um objeto gráfico no OnInit() com o nome da EA ou qualquer outro objeto, talvez a EA já crie um objeto, então você pode usá-lo, vamos assumir "MyEA": ObjectCreate(0,"MyEA",OBJ_...,...))

Em OnTick() onde escrever no arquivo precisamos verificar a primeira identificação gráfica com esta mesma etiqueta = significa que este é o primeiro Expert Advisor instalado no terminal, não estamos interessados no resto.

Temos que usar o overshoot:


Recebemos o primeiro gráfico/símbolo com um Expert Advisor instalado nele

Em seguida, comparamos com o primeiro Expert Advisor antes de escrevê-lo em um arquivo:


Não é uma construção fácil, mas é melhor do que escrever para a variável global

Sim, boa idéia.

Obrigado.


Pergunta, e se a EA foi apagada (por exemplo, devido a erro), mas o objeto permaneceu. O que fazer se o gráfico estiver completamente fechado, precisamos de alguma forma reatribuir a EA "principal"?

 
Sergey Likho:

Sim, isso é uma boa idéia.

Obrigado.


Pergunta então: E se a EA foi apagada (por exemplo, devido a um erro), mas o objeto permaneceu. O que fazer se o quadro estiver fechado em sua totalidade, precisamos de alguma forma reatribuir o "principal" Expert Advisor?

Há apenas um caso de erro - se o Expert Advisor foi apagado acidentalmente e o objeto foi deixado, mas em minha memória, não me lembro de tal erro no MT4. Em todos os outros casos, o Conselheiro Especialista principal será reatribuído.


P.S. Tente verificar se o OnDeInit() será emitido em erro no Expert Advisor e se apagará do gráfico. Provavelmente, você pode verificá-lo facilmente criando uma variável e contando carrapatos e dividindo-o por 10/0 no 11º carrapato.

Em OnDeInit() definir Imprimir e ver a causa da desinicialização, e se ela ocorrer, então por esta causa/número apagar o objeto "MyEA" do gráfico

t++;
if(t > 10) {
 int e = 10;
 e /= 0;
}

Você pode escrever sobre o resultado, pois não tenho tempo de verificá-lo eu mesmo

 
Vitaly Muzichenko:

Criar um objeto gráfico no OnInit() com o nome da EA ou qualquer outro objeto, talvez a EA já crie um objeto, então você pode usá-lo, vamos assumir "MyEA": ObjectCreate(0,"MyEA",OBJ_...,...))

Em OnTick() onde escrever no arquivo precisamos verificar a primeira identificação gráfica com esta mesma etiqueta = significa que este é o primeiro Expert Advisor instalado no terminal, não estamos interessados no resto.

Temos que usar o overshoot:


Recebemos o primeiro gráfico/símbolo com um Expert Advisor instalado nele

Em seguida, comparamos com o primeiro Expert Advisor antes de escrevê-lo em um arquivo:


Não é uma construção fácil, mas é melhor do que escrever para uma variável global

Acho que você está enganado. Os GVs não são gravados em disco todas as vezes. Caso contrário, não haveria necessidade de forçar a GV para o disco.

void  GlobalVariablesFlush();
E, ainda por cima, percorrendo todos os gráficos em busca de EA e objeto. Vitaly, isso é uma chatice...
 
Alexey Viktorov:

Acho que você está enganado. Os GVs não são gravados em disco todas as vezes. Caso contrário, não precisaríamos da função de gravação forçada da GV em disco.

Sim, mais para percorrer todos os gráficos em busca de EA e objeto... Vitaly, isso é uma chatice...

Sim, eles são:GlobalVariableSet("GV",ID);

perfis -> gvariables.dat


 
Vitaly Muzichenko:

Alternativamente são escritos como:GlobalVariableSet("GV",ID);

perfis -> gvariables.dat


Quando você o cria, talvez, mas quando você o sobrescreve antes de desativar o aplicativo que lá escreve, você tem que verificar. Eu sou muito preguiçoso. Ainda assim, puramente teoricamente, se fosse escrito no disco todas as vezes, a função acima seria um guizo.

 
Sergey Likho:

Você não pode fazer isso.

Procure um programa Windows que sincronize os dados em pastas. E configurá-lo de modo que o Expert Advisor seja copiado automaticamente para um novo terminal.

Como eu entendo, existem tais programas, mas eles só funcionam com arquivos, mas se for um documento de texto, não copia o conteúdo e não substitui os arquivos, talvez eu não tenha encontrado um programa normal. É uma pena que os desenvolvedores não tenham considerado a opção de especificar o caminho de onde fazer o download do Expert Advisor ou do arquivo do robô, eu pensei que poderia especificar o caminho como normalmente é feito, mas como você apontou acima, é impossível.

 
Seric29:

Como eu entendo, existem tais programas, mas eles só funcionam com arquivos, mas se for um documento de texto, o conteúdo não é copiado e os arquivos não são substituídos, talvez eu não tenha encontrado um programa normal. Acho ruim que os desenvolvedores não tenham levado em conta a possibilidade de definir caminho de onde obter robô ou arquivo especializado. Pensei que seria possível definir caminho como geralmente é feito, mas como você já mencionou, isso não é possível.

Note neste post as palavras "Todos os terminais têm pastas compartilhadas".

Isto não é possível. Fórum sobre comércio, sistemas de comércio automatizados e teste de estratégias comerciais

O que devo fazer se eu quiser usar um produto Marketplace?

Sergey Tabolin, 2019.11.23 08:17

Você acha mesmo que eu não sei como e onde instalar? )))

Todos os terminais têm pastas comuns

Eu baixei um indicador gratuito do mercado. Ele se liga ao hardware.

Por que funciona com um hardware, mas não com o outro?

Conclusão óbvia - liga-se, pelo menos não só ao hardware.


Procure informações sobre como isso é feito e saia... Isto é chamado de ligação de pastas.

Razão: