Bug de redimensionamento de matriz em beta build 530 - página 6

 
ubzen:
***Ps: (Eu não quero esquecer isto). Certamente a maioria de nós não gosta de não_conhecer o que está nos códigos que estamos usando. Ou nos consumimos em tentar entender os códigos de outra pessoa, caso contrário, provavelmente não o usaríamos. Entretanto, a maioria das funções nativas ( exemplo OrderSend() ) em mql4 são Objetos do nosso ponto de vista. Nós não vemos seus códigos, no entanto, aceitamos. Acredito que esta aceitação de outras_bibliotecas de Pepinos é algo que um programador_programador_profissional que trabalha em grandes projetos tem que aceitar e construir em cima. Caso contrário, você estará preso recriando a roda.
Sim, quando você coloca dessa forma, todos nós reinventamos a roda o tempo todo em mql4.
 
ubzen:

Acredito que você esteja descrevendo um fluxo de programas. Eu não acho que isso seja a grande_idea por trás do OOP. (imo) O OOP tenta resolver os seguintes problemas. Eu sou um noob da OOP, mas estou formando minha visão de mundo sobre isso.

1) Suas funções são independentes das_variáveis_globais? Em outras_palavras, suas funções são objetos_individuais? Encapsulamento

2) Sua função esconde os detalhes como nomes_variáveis_locais? Simplifica o volume de códigos na tela? Abstração

3) Tem a capacidade de criar cópias duplicadas de si mesmo para modificações? Como a capacidade de criar seus próprios tipos de dados? Herança.

4) Ele tem a capacidade de mudar na hora? Exemplo: a função pode manipular tanto o integer_array como o double_arrays? Polimorfismo.

A forma como um OOP pode ajudar na construção é similar à forma como um não_programador ajuda um não_programador a construir um_consultor_perito. Basta pegar seu Order_Accounting_Function favorito -> Data_Function -> Event Tracking Function -> Volume Defining Function -> Trading Criteria Defining Function -> Trade Functions -> Error Processing Function. E boom, você tem um Expert_Advisor. Todos os critérios de negociação que você desenvolveu ao longo dos anos podem ser facilmente trocados de entrada ou saída.

Eu como exemplo, se você quiser modificar meu consultor especializado, você precisará estudar onde minhas variáveis globais estão sendo aplicadas e que outra função depende disso (como em seu estado ou conjuntos de status). O OOP o faz como_simples_como Contabilidade(Opção_3); Display(Opção_1); Caption(Opção_5); TradingSys(Opção_7); VolumeSize(Opção2); OrderType(Opção_2) e isso é o especialista inteiro.

Isto torna mais fácil para alguém usar seu conjunto de bibliotecas, e normalmente o que funciona para outra pessoa funciona para você - bem no futuro. Se nada mais, basta pensar em objetos isolados em uma linha de montagem :)

Obrigado por descrever isso de forma tão concisa, eu já procurei isso antes e eles geralmente entram em um romance tão longo sobre tudo isso, eu nunca cheguei a entender.
 
SDC: Obrigado por descrever isso de forma tão concisa, eu já procurei isso antes e eles geralmente entram em um romance tão longo sobre tudo isso, eu nunca cheguei a entender.
De nada.
 
RaptorUK: Há uma diferença . . . Eu não tenho outra opção a não ser usar OrderSend() se eu quiser fazer um pedido . . . Eu tenho a opção de usar ou não a biblioteca de alguém elses . . . mesmo quando a fonte é respeitada eu ainda tento entendê-la antes de tentar usá-la, é assim que alguns erros são encontrados e corrigidos : " E minha cor reção para o comentário do RaptorUK :"
Aqui não há argumentos. O OOP não resolve a questão de bugs em códigos nem o obriga a usar a biblioteca de outra pessoa.
 
RaptorUK:
Eu tenho mexido um pouco com mql5 e não precisei usar nenhum OOP no código que escrevi.

As classes e o OOP são muito opcionais no MQL5. A estrutura da plataforma não as utiliza por si só. Por exemplo, você pode esperar que a plataforma tenha algo como uma coleção de Ordens que contém uma lista de objetos de Ordem, permitindo que você escreva código algo como o seguinte:

for (int i = 0; i < Orders.length; i++) {
  Order O = Orders.getByIndex(i);
  if (O.symbol == "EURUSD" && O.magicNumber = 12345) {
  }
}

Mas este não é o caso. Em vez disso, a maneira como você faz isso é basicamente idêntica entre a MQL4 e a MQL5:

for (int i = 0; i < OrdersTotal(); i++) {
  if (OrderGetTicket(i)) {
    if (OrderGetString(ORDER_SYMBOL) == "EURUSD" && OrderGetInteger(ORDER_MAGIC) == 12345) {
    }
  }
}

(Você também pode esperar que qualquer EA que você escreva seja uma classe derivada de uma classe ExpertAdvisor que tem coisas como funções virtuais OnTick e OnInit em sua declaração. Mas este também não é o caso. A estrutura MQL5 permanece fundamentalmente não-OOP, mas com a opção de você mesmo usar OOP para qualquer tarefa onde seja útil).

Como resultado, você pode continuar a usar o código MQL4 na MQL5 através de uma série de funções auxiliares, tais como OrderSymbol() {return OrderGetString(ORDER_SYMBOL);}. A única área onde isto se quebra é o acesso a séries de tempo, porque isso é organizado de forma muito diferente na MQL5. Uma função como a iOpenMQL4() em https://www.mql5.com/en/articles/81 funciona, mas é extremamente lenta e ineficiente para uso repetido.

 

(Se alguém ainda se importa, o relatório de bug que deu início a esta linha ainda se aplica no build 535. Assim como https://forum.mql4.com/56885/page20#861740, embora pareça que a MetaQuotes teve uma tentativa fracassada de consertar esta).

 
Desculpe pela resposta tardia, mas às vezes tenho que dormir e trabalhar

Concordo com o RaptorUK, a documentação no mql5.com sobre o OOP é pelo menos imperfeita. Mas infelizmente eu não conheço uma boa referência sobre oop. Al que li é muito abstrato ou muito básico, tomando a pêra e a maçã como exemplo de objetos e a fruta como classe.

A programação do OOP só é útil se você tiver um grande projeto. Um grande projeto não é necessariamente 1 EA, seu projeto pode ser construir uma série de EA com indicador, etc... Então é bom reutilizar código, e oop é principalmente sobre reutilização de código, ele ajuda você a construir uma estrutura que pode ser facilmente reutilizada em outro programa. Infelizmente não tenho tempo agora para ir a fundo com isso. Mas está em meu plano escrever alguns artigos sobre isso.

Um exemplo de um grande projeto é o MQL5 Wizard, criado pela Metaquotes. Ele permite que você crie um EA em 5 minutos com alguma entrada do usuário. Ele é baseado no mql5 Standard Libray que fornece todos os elementos necessários para a construção de um EA. O mesmo assistente pode provavelmente ser feito de uma forma processual, mas seria muito mais difícil, na minha opinião. E então você tem que manter este código. Mas estes Libray padrão é difícil de entender, pois não está bem documentado e descrito. Eu criei um tópico para centralizar tudo o que existe sobre o tópico (mql5 wizard não oop).

 
ubzen:

Acredito que você esteja descrevendo um fluxo de programas. Eu não acho que isso seja a grande_idea por trás do OOP. (imo) O OOP tenta resolver os seguintes problemas. Eu sou um noob da OOP, mas estou formando minha visão de mundo sobre isso.

1) Suas funções são independentes das_variáveis_globais? Em outras_palavras, suas funções são objetos_individuais? Encapsulamento

2) Sua função esconde os detalhes como nomes_variáveis_locais? Simplifica o volume de códigos na tela? Abstração

3) Tem a capacidade de criar cópias duplicadas de si mesmo para modificações? Como a capacidade de criar seus próprios tipos de dados? Herança.

4) Ele tem a capacidade de mudar na hora? Exemplo: a função pode manipular tanto o integer_array como o double_arrays? Polimorfismo.

A forma como um OOP pode ajudar na construção é similar à forma como um não_programador ajuda um não_programador a construir um_consultor_perito. Basta pegar seu Order_Accounting_Function favorito -> Data_Function -> Event Tracking Function -> Volume Defining Function -> Trading Criteria Defining Function -> Trade Functions -> Error Processing Function. E boom, você tem um Expert_Advisor. Todos os critérios de negociação que você desenvolveu ao longo dos anos podem ser facilmente trocados de entrada ou saída.

Eu como exemplo, se você quiser modificar meu consultor especializado, você precisará estudar onde minhas variáveis globais estão sendo aplicadas e que outra função depende delas (como em seu estado ou conjuntos de status). O OOP o faz como_simples_como Contabilidade(Opção_3); Display(Opção_1); Caption(Opção_5); TradingSys(Opção_7); VolumeSize(Opção2); OrderType(Opção_2) e isso é o especialista inteiro.

Isto torna mais fácil para alguém usar seu conjunto de bibliotecas, e normalmente o que funciona para outra pessoa funciona para você - bem no futuro. Se nada mais, basta pensar em objetos isolados em uma linha de montagem :)

É uma boa visão geral, exceto pelo polimorfismo. Quando você disse "A função pode lidar tanto com a confusão inteira quanto com a confusão dupla", não se trata de polimorfismo, mas sim de sobrecarga da função. Você também pode ter sobrecarga de operador em mql5 (traduzido erroneamente para sobrecarga de operação). OOP e polimorfismo é mais do que isso. Não tenho tempo para elaborar (especialmente em inglês), então sugiro que você leia a introdução do mql5 ao polimorfismo.
 
cyclops993:

As classes e o OOP são muito opcionais no MQL5. A estrutura da plataforma não as utiliza por si só. Por exemplo, você pode esperar que a plataforma tenha algo como uma coleção de Ordens que contém uma lista de objetos de Ordem, permitindo que você escreva código algo como o seguinte:

Mas este não é o caso. Em vez disso, a maneira como você faz isso é basicamente idêntica entre a MQL4 e a MQL5:

(Você também pode esperar que qualquer EA que você escreva seja uma classe derivada de uma classe ExpertAdvisor que tem coisas como funções virtuais OnTick e OnInit em sua declaração. Mas este também não é o caso. A estrutura MQL5 permanece fundamentalmente não-OOP, mas com a opção de você mesmo usar OOP para qualquer tarefa onde seja útil).

Como resultado, você pode continuar a usar o código MQL4 na MQL5 através de uma série de funções auxiliares, tais como OrderSymbol() {return OrderGetString(ORDER_SYMBOL);}. A única área onde isto se quebra é o acesso a séries de tempo, porque isso está organizado de forma muito diferente na MQL5. Uma função como a iOpenMQL4() em https://www.mql5.com/en/articles/81 funciona, mas é extremamente lenta e ineficiente para uso repetido.

Concordar. Eu acrescentaria que o mql5 fornece mais funções de nível "baixo" do que o mql4. Por exemplo, muitas pessoas reclamam de iBarShift() que não existe em mql5. Mas o mql5 fornece funções mais detalhadas, assim você pode construir seu próprio iBarShift() e fornece também oop para que você possa reutilizá-lo facilmente em qualquer projeto (é claro que oop não é obrigatório para reutilizá-lo). Não tenho certeza se minha explicação é clara, pois meu inglês ainda é um tanto rudimentar.
 
Ovo:

O OOP é bastante comum atualmente e atrairá mais codificadores reais para o MQL. Mas o editor do tipo bloco de notas vai repelir a maioria deles, tenho certeza.

Você já experimentou o metaeditor mql5 (ou o novo editor mql4 que é o mesmo) ? Há muitas melhorias.
Razão: