Auto-aprendizagem da linguagem MQL5 a partir do zero - página 28

 
Vasiliy Sokolov:

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.

Então, como você acha que uma pessoa deve aprender? Direto da filosofia da OLP? Isso é impossível.
 

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.

 
MrBrooklin:

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
  • Expert Advisor pode ser otimizado pelo 'Tempo detrabalho
  • '
  • Pode haver apenas uma negociação 'entrar no mercado' por barra (este é um parâmetro interno, não é colocado nos parâmetros de entrada e não tem nada a ver com o parâmetro 'Apenas uma posição
  • ')
  • Ao trabalhar em modo 'barra interna' ('Sinais de busca
  • '), ou igual a '10') a barra de corrente é a barra #0, no
  • modo 'Sinais de busca, em segundos'('Sinais de busca, em segundos
  • ' menos que '10') a barra de corrente é a barra #1:
  • parâmetro - restrição de qual lado negociar. Pode assumir valores 'Permitido apenas posições de COMPRA', 'Permitido apenas posições de VENDA' e 'Permitido posições de COMPRA e VENDA
  • '
  • Parâmetro 'Usar controle de tempo' - período de tempo para procurar sinais de negociação de 'Hora inicial': 'Minuto inicial' a'Hora final': 'Minuto final'
  • .
  • O parâmetro 'Pips Or Points:'
  • define o cálculo padrão de Stop Loss, Take Profit e Trailing

    и

    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'.

    iFractals iAMA
    iFractals iAMA
    • www.mql5.com
    Получать сигнала на откате (по iFractals (Fractals) ), а тренд определять по iAMA (Adaptive Moving Average, AMA). По индикатору iAMA (Adaptive Moving Average, AMA) определяется тренд. Условия тренда: на текущем баре и на двух предшествующих индикатор равномерно растёт (тренд вверх) или равномерно падает (тренд вниз). При этом цена (High или...
     

    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).
    Документация по MQL5: Основы языка / Функции / Функции обработки событий
    Документация по MQL5: Основы языка / Функции / Функции обработки событий
    • www.mql5.com
    В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
     
    Roman Shiredchenko:

    aqui está o primeiro que recebi para dar boa sorte :-)

    Use sua expa como modelo em sua pesquisa - código competente!

    lá e


    "O
  • Expert Advisor pode ser otimizado pelo 'Tempo detrabalho
  • '
  • Pode haver apenas uma negociação 'entrar no mercado' por barra (este é um parâmetro interno, não é colocado nos parâmetros de entrada e não tem nada a ver com o parâmetro 'Apenas uma posição
  • ')
  • Ao trabalhar em modo 'barra interna' ('Sinais de busca
  • '), ou igual a '10') a barra de corrente é a barra #0, no
  • modo 'Sinais de busca, em segundos'('Sinais de busca, em segundos
  • ' menos que '10') a barra de corrente é a barra #1:
  • parâmetro - restrição de qual lado negociar. Pode assumir valores 'Permitido somente posições de COMPRA', 'Permitido somente posições de VENDA' e 'Permitido posições de COMPRA e VENDA
  • '
  • Parâmetro 'Usar controle de tempo' - período de tempo para procurar sinais de negociação de 'Hora inicial': 'Minuto inicial' a'Hora final': 'Minuto final'
  • .
  • O parâmetro 'Pips Or Points:'
  • define o cálculo padrão de Stop Loss, Take Profit e Trailing

    и

    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.

     
    Vasiliy Sokolov:

    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.

     
    MrBrooklin:

    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.

    Sim, um julgamento interessante.

    1. qualquer programa é uma hierarquia de blocos de funções e é um sistema de parâmetros relacionados e mutuamente dependentes.

    2. O evento é o resultado da interação do programa com o ambiente de programação externa, ou de mudanças internas. O ambiente "informa" sobre o evento, chamando o programa (OnTick, OnChartEvent...).

    4. O ambiente (terminal) é neutro para o programa, mas pode influenciá-lo.

    5. O programa recebe informações sobre seu ambiente no terminal e no mercado por meio de funções especiais e pode utilizá-lo em sua lógica.

    6. O programa pode receber informações sobre si mesmo ou sobre seus objetos através de consultas especiais e utilizá-las em sua lógica.

    7. Os eventos são descritos nas declarações if().

    8. Os eventos têm manipuladores que respondem às mudanças.

    9. A reação pode ser uma mudança de estado do(s) objeto(s) (mudança em massa de seus valores de parâmetros) ou algum trabalho de computação.

    10. Os manipuladores de eventos são agrupados em estruturas hierárquicas (modelos de eventos).

    11. Os objetos de software podem se inscrever em vários eventos e fazer parte da lista de destinatários.

    ... e muito mais... :)

    P.S. Vasiliy irá descrevê-lo melhor e mais claramente.
     

    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)
     
    Você inundou um recém-chegado com informações inúteis).
     
    Реter Konow:
    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.

    Razão: