A diferença entre externo e de entrada - página 4

 
Igor Makanu:

Que tal declarar uma variável do tipo enumerativa?

conversão enum implícita tst1.mq5 24 17


você também pode verificar EnumToString()...


Acho que o tipo sem as variáveis declaradas foi simplesmente descartado da compilação por não ter sido utilizado

Quero dizer, você pode declarar acidentalmente uma variável com o mesmo nome que no enumero já em uso e depois ter um tempo muito longo e doloroso procurando onde e onde eu atirei no meu joelho

 
Maksim Neimerik:
Então, qual é o veredicto, senhores? Se eu escrever um programa .mq5 com .mqh (#incluir), posso escrever com segurança externamente e não ter medo de consequências inesperadas (como fiz no mql4), ou usar o input ?

Em MT5, use a entrada para declarar variáveis externas. O exterior na MT5 tem um propósito diferente.

 
Dmitry Fedoseev:

Em MT5, use a entrada para declarar variáveis externas. O exterior na MT5 tem um propósito diferente.

Por que você não pode usar externamente no MT5? - Eu compilei meu exemplo no MT5, não vejo uma diferença fundamental

 
Igor Makanu:

Por que o exterior não pode ser usado no MT5? - Eu compilei meu exemplo no MT5, não vejo nenhuma diferença fundamental

Porque as pessoas por hábito da antiga MQL4 estão tentando usar o exterior para parâmetros de entrada.

E no novo MQL4 e MQL5, a entrada é usada juntamente com #propriedade rigorosa, e externa é usada para outros fins.

Por isso, foi dito que não se deveria usar o exterior.

 
Artyom Trishkin:

Porque as pessoas por hábito da antiga MQL4 tentam usar o exterior para parâmetros de entrada.

E na nova MQL4 e MQL5, a entrada é usada juntamente com #propriedade rigorosa, e externa é usada para outros fins.

É por isso que eu lhe disse para não usar o exterior.

Então todos estão tentando escrever um monte de bukuffs e o resultado é que eles NÃO devem usar SOMENTE em MQL5 e NÃO devem usar em nenhum outro lugar))))


Ok, aí vem o grande argumento, imho - se você vê o exterior em um código antigo, substitua-o por input e conserte todas as advertências, e que o poder da MQL o siga !!!!

 
Igor Makanu:

Todos tentam escrever muitos bukuffs e acabam NÃO usando SOMENTE em MT5 ou NÃO usando em nenhum lugar ))))


Ok, aqui vem o grande argumento, imho - se você vê o exterior em um código antigo, substitua-o por input e corrija todas as advertências, e que o poder da MQL esteja com você !!!!

Eu não entendo muito do que está escrito aqui.

Mas eu pretendia não usar externamente na MQL5 e MQL4 com #propriedade estrita para declarar parâmetros externos de programas, mas para usar para o propósito descrito (vagamente) na ajuda.

 

Estive pensando, apenas um pensamento... Na MQL5, trabalhar com iCustom() não é muito mais problemático do que na MQL4 (ou geralmente com chamadas indicadoras na MQL4)? É assim? Se sim, então eu continuarei.

Comecei agora a aprender um pouco de MQL5...

Provavelmente vou começar um novo tópico.
 
Maksim Neimerik:
Estou apenas pensando... Na MQL5 é muito mais difícil trabalhar com iCustom() do que na MQL4 (ou geralmente com indicadores chamando na MQL4), não é mesmo? É assim? Se assim for, eu continuarei.

não mais problemático, é apenas que na MQL5 você tem que trabalhar com iCustom() em duas etapas:

1. obter a alça indicadora

2. Solicite os valores dos buffers indicadores através de CopyBuffer()


na MQL4 - iCustom() funciona como uma chamada de função com parâmetros - você a chama, recebe

na MQL5 funciona da mesma maneira - os desenvolvedores reduziram propositalmente a funcionalidade das funções incorporadas e tornaram o acesso às séries de tempos inconvenientes - eles recentemente adicionaram iClose(), iHigh() à MQL5, antes de precisarem copiar os dados para uma matriz como com CopyBuffer()

em geral, o MT5 tem mais escrita que o MT4

 
Igor Makanu:

não mais problemático, é apenas que na MQL5 você tem que trabalhar com iCustom() em duas etapas:

1. obter a alça indicadora

2. Solicite os valores dos buffers indicadores através de CopyBuffer()


na MQL4 - iCustom() funciona como uma chamada de função com parâmetros - você a chama, recebe

na MQL5 funciona da mesma maneira - os desenvolvedores reduziram propositalmente a funcionalidade das funções incorporadas e tornaram o acesso às séries de tempos inconvenientes - eles recentemente adicionaram iClose(), iHigh() à MQL5, antes de precisarem copiar os dados para uma matriz como com CopyBuffer()

em geral, o MT5 tem mais escrita que o MT4

https://www.mql5.com/ru/forum/316800

MQL4 & MQL5
MQL4 & MQL5
  • 2019.06.29
  • www.mql5.com
Я тут вот что думаю, просто мысли... В MQL5 ведь намного проблемнее работа с iCustom() чем в MQL4 (да и вообще с вызовом индикаторов в советнике...
 

Infelizmente, a implementação de variáveis externas na MQL5 não está finalizada, e é por isso que eu não recomendo usá-la - pode causar problemas. Refiro-me à falta de controle sobre a inicialização obrigatória dessas variáveisuma única vez .

Por exemplo, você pode escrevê-lo de tal forma:

extern int a=1;
extern int a=2;

e não haverá erro. Imagine que estas inicializações sejam realizadas em diferentes plugins. Então o resultado final dependerá da ordem na qual esses arquivos forem incluídos.

Ou podemos escrevê-lo desta forma (arquivo executável):

extern int a;

void OnStart() { Print(a); }

aqui não inicializamos a variável externa, mas também não há nenhum erro.

Assim, não há controle sobre se as mesmas variáveis estão ou não definidas em outros arquivos. Você pode acidentalmente mudar seu nome, mas o programa se compilará como se nada tivesse acontecido, embora em outros arquivos tenhamos uma variável com um nome diferente.

No total, não cabe em lugar algum. É por isso que é melhor usar funções em vez de variáveis externas. É garantido que elas têm apenas uma definição, nem mais nem menos.