Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1076

 

Como ler um ficheiro grande numa só linha?

FileReadString()

Ao ler a partir de um ficheiro de lixo. o comprimento de um fio a ler deve ser especificado. Ao ler a partir de um ficheiro txt, o comprimento da corda não é necessário, e a corda será lida da posição actual para o carácter de alimentação de linha "\r\n". Ao ler a partir de um ficheiro csv, o comprimento da corda também não é necessário, a corda será lida a partir da posição actual até ao delimitador mais próximo ou até ao carácter final da corda de texto.

A única bandeira para todo o ficheiro é FILE_BIN, mas na MQL5, ao contrário da MQL4, está limitada a 4095 bytes. De que outra forma posso obter um texto grande de um ficheiro numa só linha?
 
Сергей Таболин:

Não é isso que eu quero dizer.

"E com uma lógica NÃO resolver - inverter os bits, mas não tenho um terminal - não me lembro como fazer um bitwise NOT em MQL, e não quero ler a ajuda online".

Quer dizer, ou me dão uma prova, ou não turvam as águas ))))

"Qualquer pessoa pode cometer um erro. Só os fortes podem admitir um erro". Se ainda ninguém o expressou, é essa a minha sabedoria ))))) Se alguém já o disse - repeti a sabedoria de um homem sábio ))))

Ainda não compreendo as suas reivindicações? Está a sugerir que lhe devo provar alguma coisa? - Porquê? ))))

Aqui reproduzi via NOT e verifiquei todas as variantes discutidas:

void OnStart()
  {
//---
   uint TForiginal=OBJ_PERIOD_M1|OBJ_PERIOD_M2|OBJ_PERIOD_M3|OBJ_PERIOD_M4|OBJ_PERIOD_M5|OBJ_PERIOD_M6|OBJ_PERIOD_M10|
                   OBJ_PERIOD_M12|OBJ_PERIOD_M15|OBJ_PERIOD_M20|OBJ_PERIOD_M30|OBJ_PERIOD_H1;

   uint TFwithNOT=(~OBJ_PERIOD_H1&OBJ_PERIOD_H2)-1;
   uint TFwithShift=OBJ_ALL_PERIODS>>9;
   Print("TForiginal = ",TForiginal);
   Print("TFwithNOT = ",TFwithNOT);
   Print("TFwithShift = ",TFwithShift);
  }
//+------------------------------------------------------------------+

A variante NÃO funciona com nenhuma TF, mas preencha de acordo com (~TF_ abaixo da qual exibimos & TF_uma mais antiga que a TF requerida)-1;

 

Bom dia a todos! Mais uma pergunta...

Existe um programa MQL5, tem uma configuração (muito) de "Parâmetros de entrada". O programa efectua cálculos e cria / elimina e gere objectos gráficos conforme necessário.

Após a alteração dos parâmetros de entrada da janela de configuração é gerado o eventoInit, que leva à inicialização do programa e "recalcular" e "redesenhar" objectos, que é, em princípio, o que é necessário, maso eventoInittambém é gerado quando o período do gráfico é alterado (e outro), como resultado o processo repete-se sempre, mesmo quando não é necessário.

Pergunta:Como posso excluir a inicialização do programa em Nocaso deos parâmetros de entrada não serem alterados mas deixarem a inicialização no início do programa (terminal)?

Variante possível: para lembrar os valores definidos e compará-los quando o evento Init ocorrere se forem diferentes permitir a inicialização, mas há muitos parâmetros de entrada...

 
Anzhela Sityaeva:

Bom dia a todos! Mais uma pergunta...

Existe um programa MQL5, tem uma configuração (muito) de "Parâmetros de entrada". O programa efectua cálculos e cria / elimina e gere objectos gráficos conforme necessário.

Após a alteração dos parâmetros de entrada da janela de configuração, é gerado o eventoInit, que leva à inicialização do programa e "recalcular" e "redesenhar" objectos, que é, em princípio, o que é necessário, mas o eventoInit também é gerado quando o período do gráfico é alterado (e outros), como resultado o processo repete-se sempre, mesmo quando não é necessário.

Pergunta:Como posso excluir a inicialização do programa em Nocaso de os parâmetros de entrada não serem alterados mas deixarem a inicialização no início do programa (terminal)?

Variante possível: para recordar os valores definidos e compará-los quando ocorrer Init e se forem diferentes para permitir a inicialização, mas há muitos parâmetros de entrada...

Aqui estão algumas dicas para outro problema semelhante

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Funciona na EA, mas não está correcto no indicador, música quando o indicador começa

Ihor Herasko, 2019.06.17 14:12

Sim.

  1. Quando o indicador começa, cria uma variável terminal global. Como - estou com a bota para cima.
  2. Uma saudação é tocada.
  3. Ao descarregar (verificado em OnDeinit) a variável terminal global é eliminada.
  4. Se durante a operação a TF for alterada ou os parâmetros alterados, então à saída no OnInit a variável global do terminal é verificada. Se for, então a saudação não é tocada. Caso contrário, a saudação é executada.

 
Alexey Viktorov:

Aqui estão algumas dicas para outro problema semelhante



Obrigado pela resposta, parece que no nosso caso teremos de acompanhar o estado de algumas dúzias de alterações, descrevendo isto através de um "branco" no gráfico para acompanhar as suas alterações, ou aguentar uma inicialização desnecessária, desde que não haja demasiados objectos...
 
Anzhela Sityaeva:
Obrigado pela resposta, parece que no nosso caso teremos de acompanhar o estado de algumas dezenas de alterações de correspondências , descrevendo isto através de um "branco" no gráfico para acompanhar as suas alterações, ou suportar uma inicialização desnecessária, desde que não haja tantos objectos...

Mas a pergunta que fez foi.

Anzhela Sityaeva:

Bom dia a todos! Mais uma pergunta...

Existe um programa MQL5, tem definições (muito) "Parâmetros de entrada". O programa efectua cálculos e cria / elimina e gere objectos gráficos conforme necessário.

Após a alteração dos parâmetros de entrada da janela de configuração é gerado o eventoInit, que leva à inicialização do programa e "recalcular" e "redesenhar" objectos, que é, em princípio, o que é necessário, mas o eventoInittambém é gerado quando o período do gráfico (e outros)é alterado , como resultado o processo repete-se sempre, mesmo quando não é necessário.

Pergunta:Como posso excluir a inicialização do programa em Nocaso de os parâmetros de entrada não serem alterados mas deixarem a inicialização no início do programa (terminal)?

Variante possível: para recordar os valores definidos e compará-los quando ocorrer Init e se forem diferentes para permitir a inicialização, mas há muitos parâmetros de entrada...

E, na sua situação, uma dessas dicas evitará estes ruídos desnecessários de objectos. E se estes objectos forem eliminados em OnDeinit(), também deve proibir a sua eliminação quando mudar o gráfico.

Este é um fórum para o comércio, sistemas de comércio automatizados e testes estratégicos.

Como eliminar a variável global do terminal no fim do gráfico?

Alexey Viktorov, 2019.06.29 08:40

Preste atenção a esta tabela

RAZÃO_PROGRAMA

0

Perito deixou de trabalhar ao chamar ExpertRemove()

REASON_REMOVE

1

Programa retirado do gráfico

RACIOCÍNIO_RECOMPILAR

2

Programa recompilado

REASON_CHARTCHANGE

3

O símbolo ou período do gráfico foi alterado

REASON_CHARTCLOSE

4

O gráfico está fechado

PARÂMETROS_DE_RAZÃO

5

Os parâmetros de entrada foram alterados pelo utilizador

RAZÃO_COUNTURA

6

Outra conta foi activada ou reconectada ao servidor de negociação porque as definições da conta foram alteradas

REASON_TEMPLATE

7

Foi aplicado outro modelo de gráfico

REASON_INITFAILED

8

OnInit() handler devolveu um valor não nulo

RAZÃO_CLOSE

9

O terminal foi encerrado


e nesta linha do seu código

   if(reason==1) GlobalVariableDel("val");

Mas se bem me lembro do início do vosso problema, é melhor colocar a condição desta forma

   if(reason != REASON_CHARTCHANGE) GlobalVariableDel("val");

 
Alexey Viktorov:

Mas na sua pergunta foi

Na sua situação, uma dessas dicas evitará que estes objectos desnecessários sejam alvo de ruídos. E se estes objectos forem eliminados em OnDeinit(), então também deve proibir a sua eliminação quando mudar o gráfico.


A direcção é clara, vamos tentar... Obrigado pela sua resposta.
 
Não encontrei um exemplo de EA em Codebase onde se possa definir uma condição de fecho, e não apenas SL/TP padrão. Alguém me pode dar uma dica?
 
Sprut112:
Não encontrei um exemplo de EA em Codebase onde se possa definir uma condição de fecho, e não apenas SL/TP padrão. Alguém me pode dar uma dica?

Qual é a diferença entre as condições de abertura e de fecho?

 
Sprut112:
Não encontrei no Codebase um exemplo de um EA onde se possa escrever a condição de encerramento de uma posição, e não apenas o SL/TP padrão. Alguém me pode dizer?

Vladimir Karputov tinha tais condições nos seus códigos, mas você mesmo tem de aprender a ler o seu código)