Auto-aprendizagem da linguagem MQL5 a partir do zero - página 28
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Isso mesmo! Todos tentam aprender programação usando conceitos errados sobre software com base na experiência de vida. Por exemplo, que um programa é como um texto em um livro com um índice, uma introdução, uma tabela de conteúdo e uma conclusão. Ou seja, o programa é uma espécie de esquema seqüencial do início ao fim. No início, esta idéia funciona, mas depois, à medida que o programa se torna mais complexo, surgem dificuldades e não é possível escrever um programa de trabalho confiável de forma alguma. Kovalev é muito bom na prestação de serviços em baixa: ele tenta explicar ao leitor, usando seu aparato conceitual acessível, que o programa é o mesmo livro com um esquema de sucção e tal. Mas não há esquemas! O roteiro tem um "esquema" fundamentalmente diferente do do Expert Advisor, e o Expert Advisor tem um esquema diferente do indicador.
Vasiliy Sokolov:
... 4) O bloco mais estranho é o bloco "manipulação de erros". Você pode entrar nela, mas não pode sair dela. Ou seja, o programa pegou um erro e fica neste bloco (deve ficar pendurado até ser completamente reinicializado, ou, melhor ainda, o terminal fica pendurado permanentemente, com certeza não vai cometer mais erros - esta é a idéia!
Olá Vasiliy! Obrigado pela explicação detalhada e altamente qualificada! A única coisa com a qual não posso concordar é com o ponto 4. A questão é que as setas vão tanto para a " Unidade de tratamento de erros" como da " Unidade de tratamento de erros". A linha que liga esta unidade à outra tem setas em suas extremidades e do programa de informática do instituto ainda me lembro que isso significa um processo bidirecional, ou seja, para frente e para trás. Portanto, não tenho dúvidas sobre a situação. Quanto ao resto de sua mensagem, tudo está claro para mim.
Cumprimentos, Vladimir.
Olá Vasily! Obrigado pela explicação detalhada e altamente qualificada! A única coisa com a qual não posso concordar é com o ponto 4. O fato é que as setas vão tanto para a "Unidade de tratamento de erros" como da "Unidade de tratamento de erros". A linha que liga esta unidade à outra tem setas em suas extremidades e do programa de informática do instituto ainda me lembro que isso significa um processo bidirecional, ou seja, para frente e para trás. Portanto, não tenho dúvidas sobre a situação. Quanto ao resto de sua mensagem, tudo está claro para mim.
Cumprimentos, Vladimir.
Isso mesmo, o primeiro que foi pego :-)
Use sua expa como modelo em sua pesquisa - código competente!
lá e
"Oи
Reverter e outras coisas e conectar bibliotecas padrão no código no início para simplificar a abertura de posição - ESTUDO E NÃO TRABALHAR.
A bandeira'Posições: Apenas uma' definida como'verdadeira' permite que o Expert Advisor não tenha mais do que uma posição no mercado. A bandeira'Posições: Reverter' é responsável pela inversão de sinais. Interessante bandeira'Posições: Fechar o oposto' - se esta bandeira for definida como'verdadeira' antes de abrir uma posição, ela garante a eliminação de posições opostas.Print log' imprime o registro ampliado de todas as operações. O parâmetro'Freeze and StopsLevels Coefficient' define um coeficiente para níveis de parada e congelamento para os casos em que estes níveis são iguais a zero para um símbolo. Recomenda-se aplicar um valor de '3'.
Escreverei princípios que recomendo vivamente ao autor para o conhecimento do que se trata o programa. Ao contrário dos folhetos de Kovalev, onde parte do material é correto, alguns contêm erros grosseiros e outros são especulações gerais com o leitor, estes princípios são SEMPRE e 100% corretos, não importa o que você escreva em MQL: Expert Advisors, scripts, ou Expert Advisors:
Primeiro Princípio. Qualquer programa na MQL trata de eventos. Um evento é uma notificação que contém informações sobre algo, geralmente sobre algo que mudou. Por exemplo, um novo tick chegou ou nosso pedido pendente foi executado. Outros eventos não contêm nenhuma informação, eles simplesmente acontecem. Por exemplo, o evento "timer" pode chamar a função do usuário com uma periodicidade definida. Ele não notifica o usuário que algo mudou. Ele simplesmente invoca o código do usuário, de modo que não precisa de nenhuma informação adicional. A partir da definição do evento, vários métodos não triviais são seguidos:
- A primeira implicação é que uma vez que recebemos um evento, devemos tratá-lo o mais rápido possível. Pode haver muitos eventos, e os eventos podem se amontoar em uma fila. MeteTrader (não nosso programa) lida com os eventos. Para isso, utiliza um recurso especial chamado fluxo. Este recurso é muito valioso e limitado. O thread de propriedade da MetaTrader executa generosamente nosso código bruto, sub-ótimo e lento, escrito em um script na CPU de nosso PC. Se o processamento de eventos desacelera o fio de nosso código, em alguns casos, outros programas em execução no MetaTrader não serão capazes de executar corretamente. Eles vão esperar que liberemos o fio de nossos cálculos inúteis e depois executarão seu código no fio liberado.
- Há muitos eventos. Podemos tratar de muitos dos eventos disponíveis ou apenas um. Quando fazemos um roteiro, ele trata apenas de um evento, OnStart, que acontece uma vez. Quando escrevemos um Expert Advisor, ele pode lidar com vários eventos ao mesmo tempo. Isto significa que é inútil enfiar seu programa no paradigma "programe este livro". Ao invés disso, devemos apenas entender que o programa é um manipulador de certos eventos. Eles podem ser chamados em qualquer ordem, eles podem não ser chamados de forma alguma. Os eventos são independentes um do outro. Portanto, as partes do programa que tratam desses eventos não dependem uma da outra. Eles são não lineares e não seqüenciais.
(isso é tudo por enquanto, eu continuarei se me apetecer).aqui está o primeiro que recebi para dar boa sorte :-)
Use sua expa como modelo em sua pesquisa - código competente!
lá e
"Oи
Reverter e outras coisas e conectar bibliotecas padrão no código no início para simplificar a abertura de posição - ESTUDO E NÃO TRABALHAR, mas acostumar-se a escrever código padrão - há recuo e tudo mais
A bandeira'Posições: Apenas uma' definida como'verdadeira' permite que o Expert Advisor não tenha mais do que uma posição no mercado. A bandeira'Posições: Reverter' é responsável pela inversão de sinais. Interessante bandeira'Posições: Fechar o oposto' - se esta bandeira for definida como'verdadeira' antes de abrir uma posição, ela garante a eliminação de posições opostas.Print log' imprime o registro ampliado de todas as operações. O parâmetro'Freeze and StopsLevels Coefficient' define um coeficiente para níveis de parada e congelamento para os casos em que estes níveis são iguais a zero para um símbolo. Recomenda-se usar o valor de '3'.
Olá Roman! Obrigado pelo exemplo. Muitas vezes tentei entender os códigos escritos por Vladimir Karputov, mas para mim ainda é um nível inalcançável. Um pouco mais tarde, quando eu tiver mais informações em minha cabeça, é provável que eu volte aos seus códigos. Mas obrigado pela dica!
Cumprimentos, Vladimir.
Escreverei princípios que recomendo vivamente ao autor para o conhecimento do que se trata o programa. Ao contrário dos folhetos de Kovalev, onde parte do material é correto, alguns contêm erros grosseiros e outros são especulações gerais com o leitor, estes princípios são SEMPRE e 100% corretos, não importa o que você escreva em MQL: Expert Advisors, scripts ou Expert Advisors:
Primeiro Princípio. Qualquer programa na MQL trata de eventos. Um evento é uma notificação que contém informações sobre algo, geralmente sobre algo que mudou. Por exemplo, um novo tick chegou ou nosso pedido pendente foi executado. Há eventos que não têm nenhuma informação, mas simplesmente acontecem. Por exemplo, o evento "timer" pode chamar a função do usuário com uma periodicidade definida. Ele não notifica o usuário que algo mudou. Ele simplesmente chama o código do usuário, portanto não precisa de nenhuma informação adicional. A partir da definição do evento, vários métodos não triviais são seguidos:
- A primeira implicação é que uma vez que recebemos um evento, devemos tratá-lo o mais rápido possível. Pode haver muitos eventos, e os eventos podem se amontoar em uma fila. MeteTrader (não nosso programa) lida com os eventos. Para isso, utiliza um recurso especial chamado fluxo. Este recurso é muito valioso e limitado. O thread de propriedade da MetaTrader executa generosamente nosso código bruto, sub-ótimo e lento, escrito em um script na CPU de nosso PC. Se o processamento de eventos desacelera o fio de nosso código, em alguns casos, outros programas em execução no MetaTrader não serão capazes de executar corretamente. Eles vão esperar que liberemos o fio de nossos cálculos inúteis e depois executarão seu código no fio liberado.
- Há muitos eventos. Podemos tratar de muitos dos eventos disponíveis ou apenas um. Quando fazemos um roteiro, ele trata apenas de um evento, OnStart, que acontece uma vez. Quando escrevemos um Expert Advisor, ele pode lidar com vários eventos ao mesmo tempo. Isto significa que é inútil enfiar seu programa no paradigma "programe este livro". Ao invés disso, devemos apenas entender que o programa é um manipulador de certos eventos. Eles podem ser chamados em qualquer ordem, eles podem não ser chamados de forma alguma. Os eventos são independentes um do outro. Portanto, as partes do programa que tratam desses eventos não dependem uma da outra. Eles são não lineares e não seqüenciais.
(É tudo por enquanto, eu continuarei se me apetecer).Muito bem Vasily, estou esperando a seqüência, se você não se importa de escrevê-la! Tudo o que você me disse foi lacônico e compreensível para mim!
Cumprimentos, Vladimir.
Bem feito Vasily, ansioso pela seqüência, se você não se importa de escrevê-la! Tudo o que você relatou é conciso e compreensível para mim!
Cumprimentos, Vladimir.
Seguindo em frente:
- Como há muitos eventos, há muitos manipuladores de eventos. Uma vez que os eventos são chamados de inconsistentes, seus manipuladores de eventos também são chamados de inconsistentes. Como há uma chamada inconsistente, os manipuladores de eventos não podem depender uns dos outros, e também não podem depender dos dados uns dos outros. A única construção que atende a estes requisitos estritos é uma função.
- As funções não podem depender uma da outra. Se uma função retorna a soma a+b, e a segunda devolve o produto a*b, então o resultado destas duas funções não dependerá da seqüência de chamadas. Podemos chamar a primeira função com os argumentos 3 e 5 e obter 8. Então, ligue para a segunda função com os mesmos argumentos e ganhe 24. Em seguida, trocar suas ligações. Os resultados serão os mesmos. A função de adição sempre retornará 8 com os argumentos 3 e 5. A função de multiplicação sempre retornará 24 com os mesmos argumentos.
- Está claro do exposto acima que o manipulador de eventos só pode ser uma função. Se ocorrer um novo evento de carrapato, este é tratado pela função OnTick. Se o evento Start (um lançamento único do roteiro) ocorrer, isto é tratado pela função especial OnStart.
- Esta função é universal. Esta função não pode tratar apenas de eventos. A função pode devolver algo útil, por exemplo, a hora atual. Uma função pode realizar cálculos complexos com os argumentos passados a ela e retornar o resultado final desses cálculos como um valor único. Finalmente, uma função pode ser um fornecedor de dados: Você chama a função e obtém os dados necessários, tais como citações, a partir dela.
- Internamente, o MetaTrader consiste em milhares de funções, das quais cerca de 1500 mil são gentilmente colocadas à disposição dos usuários. Estas são funções muito úteis. Eles permitem que você verifique o tempo do sistema e obtenha os dados de um instrumento que lhe interessa. As funções são usadas para enviar ordens comerciais. Você pode abrir o manual da ICL e ver que ele consiste de funções e seus argumentos. Portanto, o MetaTrader, no que diz respeito aos programas de usuário, é um grande conjunto de funções.
- As funções universais não são suficientes. Não importa quantas funções novas sejam adicionadas ao sistema, sempre haverá falta delas. A razão é que cada um tem necessidades diferentes. Não há uma característica de tamanho único para todas as ocasiões. As características mais genéricas e universais já estão incluídas no MetaTrader e são gentilmente compartilhadas conosco. No entanto, as necessidades dos usuários são infinitas. A MetaQuotes não pode atender às necessidades individuais de 100.000 usuários de seu terminal. Em vez disso, eles fizeram algo mais flexível: eles deixaram os usuários criarem as características que eles mesmos desejam. Os usuários foram beneficiados com isso. Em vez de usar uma função do sistema que não é adequada para eles, eles podem escrever sua própria função que resolve seu problema perfeitamente. Nenhuma função do sistema é perfeita por causa de sua universalidade.
- A habilidade que um usuário é capaz de escrever suas próprias funções e entender como elas funcionam lhe diz quão habilidoso é um programador. Se ele/ela entender que um programa é um conjunto desarticulado de manipuladores (na forma de funções) que não lidam consistentemente com eventos recebidos, ele/ela é bom. Se ele souber escrever suas próprias funções, isso é outra vantagem. Se ele pode combinar o trabalho de várias funções (tanto as suas próprias funções como as do sistema) em um algoritmo comum, isso é outra vantagem para ele.
- Se você entender que tudo no MetaTrader (o quarto e o quinto) é de alguma forma baseado em funções, funções e funções - tudo se torna claro de repente. A ajuda não é mais apresentada como um livro grosso com um monte de trechos de código espalhados, mas como um guia para as funções disponíveis e o que elas fazem. Tudo o mais, como tipos de dados, matrizes, estruturas, classes, é irrelevante. Trata-se de funções de apoio para que eles possam devolver algo e aceitar algo.
(isso é tudo por enquanto)Um iniciante é inundado com informações inúteis).
Isto sugere que você não deve ostentar seus desejos de tal forma. Vladimir poderia muito bem ter feito perguntas específicas sobre esta ou aquela função e recebido conselhos úteis, ao invés do absurdo de "especialistas" como aprender C++ ou aprender assembler. Você poderia começar estudando os cartões perfurados.