Dmitry, o que é isso? Por que o artigo tem a forma de um livro de referência e tabelas de macros?
e onde estão os exemplos de código, onde está a essência da ideia do programador?
Os capítulos que explicam o princípio e a identificação, infelizmente, não esclareceram o que está acontecendo.
tal impressão que eles escreveram para si mesmos para não esquecer a lista de macros possíveis.
Você pode explicar para todos o propósito do que está acontecendo no código? (Não estou interessado no aplicativo, mas apenas na organização dos algoritmos MQL).
Ahem...
Parece um artigo "de um programador para programadores". Só que não está claro quem (exceto o autor) o usará. "Aprenda mql5" vs. "Aprenda eIntepretar".
Mas o trabalho realizado é simplesmente colossal, é admirável.
Dmitry, o que é isso? Por que o artigo tem a forma de um livro de referência e tabelas de macros?
e onde estão os exemplos de código, onde está a essência da ideia do programador?
Os capítulos que explicam o princípio e a identificação, infelizmente, não esclareceram o que está acontecendo.
tal impressão que eles escreveram para si mesmos para não esquecer a lista de macros possíveis.
Você pode explicar para todos o propósito do que está acontecendo no código? (Não estou interessado no aplicativo, mas apenas na organização dos algoritmos MQL).
Há 3 ou 4 tabelas de referência. O restante são macros com comentários. O artigo é muito rico em informações, você deve lê-lo sem pular uma única palavra, não passe para a próxima, se houver um pensamento pouco claro (é claro, se necessário e se você quiser). Uma única leitura provavelmente não ajudará. Se você tentar destacar a ideia central, ela não é tão grande e complicada: qualquer estratégia de pedidos deve ser decomposta em todas as fases possíveis de estados, mas esse é um processo criativo pessoal, não formalizado. No entanto, se você quiser, pode formalizá-lo, mas terá que escrever muito.
Ideia do programador... é tão antiga quanto o próprio computador: um programa em linguagem humana, pelo qual uma máquina de ferro funciona.
Exemplos de código. Funções StringFind() e StringSubstr(). Em geral, pode ser útil estudar as funções de string no PHP - isso pode realmente expandir sua criatividade...
Se você tentar colocar toda a quantidade de informações apresentadas no artigo de alguma outra forma, ele poderia ser de 5 a 10 vezes mais volumoso...
O que acontece no código... Ler o arquivo linha por linha, separar os comentários com o sinal "#", dividir os campos de fase e ação com o sinal "|", dividir os comandos com o sinal ";". Em seguida, procuramos por substrings <, >, <=, <=, etc. em expressões de comparação. Se encontrarmos uma, anotamos seu índice, e a expressão é dividida em partes esquerda e direita por ela. A expressão aritmética permanece. Se ela começar com + ou -, recuamos um caractere e procuramos por + ou - antes do qual não haja um sinal *. Dividimos + ou - em substrings e dividimos essas duas substrings pelo sinal *. Depois disso, temos quatro argumentos (e mais um no lado esquerdo da expressão). Esses argumentos podem ser comandos. Verificamos se é um número, ou um número com p no final, ou uma variável de usuário ou uma variável de usuário com p no final; se for o caso, substituímos por um número. Caso contrário, é um comando. Separamos o comando em si e seus argumentos com o sinal (.
O mais interessante é o cálculo de expressões. Há estruturas, cinco estruturas com valores em cada estrutura, e a estrutura de valor especifica se o valor é diretamente numérico ou um comando. Para cada estrutura com um valor, uma função é chamada para calcular o valor. Se o valor for numérico, a função não fará nada; se for um comando, a função apropriada será chamada (selecionada por meio de uma chave). Depois que os valores são preenchidos, a expressão aritmética é calculada; na estrutura, os sinais dos valores e a ação aritmética são especificados.... Somente tudo é especificado por números (índices), e a ação necessária é selecionada por meio da chave.
O próprio processo de interpretação de trabalho tem dois níveis de chave: um comando e um aninhado para o identificador dos dados recebidos sobre o comando. Se você estiver interessado, examine o código da função OnTick(), pois não há muito código nela. A maior quantidade de código vem da função OnInit(), mas não é tão interessante, pois pode ser feito como for mais conveniente para alguém - apenas as funções StringFind() e StrSubstr().
- www.mql5.com
Eu apoio, mas preciso de um exemplo de como programar um TS simples, pelo menos negociando em cruzamentos de MAs lentas e rápidas
Khe... Primeiro, você deve ler o artigo na íntegra.
...para ser um designer visual de estratégias.....
Essa é uma boa ideia, pois eliminaria um problema... mas um problema menor, você ainda teria que pensar sobre a estratégia, analisá-la, dividi-la em fases.
Ahem...
Parece um artigo "de um programador para programadores". Só que não está claro quem (exceto o autor) o usará. "Aprenda mql5" vs. "Aprenda eIntepretar".
E o trabalho realizado é simplesmente colossal, é admirável.
Bem, há um pouco, como em "Crazy scientist" (Cientista maluco) ..... Como prêmio de consolação, há uma descrição de várias estratégias de ordem, embora não muito detalhada, mas com imagens.... Alguém, talvez, pelo menos isso seja útil...
Если постараться изложить весь объем информации представленный в статье как-то иначе, она бы могла поучиться раз в 5-10 объемней...
Você poderia colocar as tabelas de referência em um dock e simplesmente anexá-las ao artigo.
Reli o artigo novamente e até decidi fazer uma declaração de tese para mim mesmo a fim de entender do que se trata o artigo. Provavelmente estou perto de entender.
Dimitri, corrija-me se eu estiver errado.
Portanto, o trabalho do especialista será verificar os estados. Todos eles. Ponto a ponto.
E se algum dos estados for relevante no momento, então faremos o que a macro prescreve para esse estado.
A tarefa não é criar contradições - fazer com que várias macros lidem com o mesmo estado ou evitar conflitos entre duas macros (por exemplo, uma fecha e a segunda abre imediatamente, e haverá uma "briga")
Ou seja, a tarefa do especialista é executar constantemente em um loop e verificar TODAS as macros especificadas (o que escrevemos no arquivo ou qualquer outra coisa) e fazer o que elas prescrevem quando cumprem sua condição.
Por exemplo, digamos que tenhamos uma estratégia simples (até mesmo uma estratégia de indicador).
Precisamos abrir uma ordem quando a MA cruzar. Em seguida, gastá-la. E fechá-la à força em um determinado prefixo.
O que um programador faz nesse caso.
Ele escreve TRÊS funções (como macros, no seu caso)
- a função de verificar o indicador e abrir uma ordem, se o indicador tiver dado OK e não houver nenhuma posição.
- a função de arrasto, se houver uma posição
- a função de fechamento, se houver uma ordem e houver lucro
A ordem de chamada dessas funções pode ser qualquer. Basta colocá-las na verificação em OnTick, por exemplo
OnTick()
{
OpenOrder()
TralPos()
CloseProfit()
}
Ou seja, as funções são independentes por si mesmas.
Isso significa que a TralPos é independente por si mesma e a presença de outras duas funções não afeta seu trabalho de forma alguma. Todas as verificações necessárias são realizadas nela (busca de uma posição, modificação de uma parada, etc.)
Da mesma forma, CloseProfit é independente.
Portanto, você escreveu várias dezenas de funções desse tipo, que são independentes e executam a operação atômica do algoritmo.
E você criou uma maneira de configurá-las por meio de um arquivo de teste com parâmetros, de modo que pudesse alterar os parâmetros das funções (e, portanto, do Expert Advisor) sem recompilá-lo.
assim?
Seria possível colocar as tabelas de referência em um documento e simplesmente anexá-las ao artigo
É uma questão de gosto, mas se elas estiverem dentro do artigo, não se perderão.
Reli o artigo novamente e até decidi fazer uma declaração de tese para mim mesmo para entender do que se trata o artigo, e provavelmente estou perto de entendê-lo.
Dimitri, corrija-me se eu estiver errado.
Portanto, o trabalho do especialista será verificar os estados. Todos eles. Ponto a ponto.
Sim. Em cada tick, todas as fases são verificadas quanto à relevância.
E se algum dos estados for relevante no momento, então faremos o que a macro prescreve para esse estado.
Sim, mas há algumas nuances. Se uma ação de mercado for executada, ela deve ser uma e deve vir primeiro. Se uma ordem pendente for definida, o Expert Advisor verificará sua existência antes de defini-la.
A tarefa é não criar contradições - várias macros devem processar o mesmo estado, ou duas macros não devem entrar em conflito (por exemplo, uma fecha e a segunda abre imediatamente, e haverá uma "briga").
Não deve haver conflito. Mas pode haver várias macros para a mesma fase, se for mais conveniente. Por exemplo, uma fase é a presença de uma posição de mercado, em um lado pode haver uma ordem Limit e no outro uma ordem Stop, ou você pode escrever tanto uma ordem Stop quanto uma ordem Limit em uma linha.
Ou seja, a tarefa do Expert Advisor é percorrer constantemente o loop e verificar TODAS as macros especificadas (que escrevemos no arquivo ou em outra coisa) e fazer o que elas prescrevem quando a condição é atendida.
Sim.
Por exemplo, digamos que tenhamos uma estratégia simples (até mesmo uma estratégia de indicador).
Precisamos abrir uma ordem quando a MA cruzar. Em seguida, gastá-la. E depois fechá-la à força em um determinado prefixo.
Sim.
O que um programador faz nesse caso.
Ele escreve TRÊS funções (como macros no seu caso)
- a função de verificar o indicador e abrir uma ordem se o indicador tiver dado um sinal e não houver posições.
Essa é uma fase: há um sinal do indicador, mas não há posição. Nesse caso, sua ação é abrir uma posição.
- função de arrasto, se houver uma posição.
Isso pode ser registrado como uma fase separada. Identificação da fase - presença de uma posição de mercado. A ação correspondente é a chamada da função trawl.
- Função de fechamento, se houver uma ordem e a ordem tiver lucro.
Essa é a terceira fase. Há uma posição e seu lucro é maior que o valor especificado. A ação é fechar a posição.
A ordem de chamada dessas funções pode ser qualquer. Basta colocá-las na verificação em OnTick, por exemplo.
E no arquivo com o metaprograma, você pode colocar as linhas em uma ordem diferente.
OnTick()
{
OpenOrder()
TralPos()
CloseProfit()
}
Ou seja, as próprias funções são independentes.
Acontece que as linhas no arquivo com o metaprograma também são independentes.
Isso significa que a TralPos é independente por si só e a presença de outras duas funções não afeta seu trabalho. Todas as verificações necessárias são realizadas nela (busca de pose, modificação de parada, etc.).
Uma linha do metaprograma também é autossuficiente.
Da mesma forma, CloseProfit é autossuficiente.
Portanto, você escreveu várias dezenas dessas funções que são independentes e executam a operação atômica do algoritmo.
E criou uma maneira de defini-las por meio de um arquivo de teste com parâmetros, de modo que pudesse alterar os parâmetros das funções (e, portanto, do Expert Advisor) sem recompilá-lo.
Essas funções podem ser combinadas. A fase pode ser determinada não apenas pela presença de uma posição de mercado... mas por muitas variantes, comandos na tabela de comandos de acesso.
assim?
Um aspecto que pode causar mal-entendidos. De alguma forma, eu confundi a diferença entre ação e estado no artigo. Se uma ação de mercado deve ser tomada ao identificar uma fase, ela deve ser chamada de ação. E quando for necessário definir ordens pendentes, é mais provável que isso seja chamado de descrição de estado. Uma fase é identificada principalmente por um comentário em uma posição de mercado, e essa fase corresponde a uma ação (abertura/fechamento de uma posição de mercado) ou a um estado (presença de algumas ordens pendentes). Se for uma ação de mercado, presume-se que, após sua execução, haverá uma transição para outra fase. É importante marcar as ordens corretamente. Mas em uma fase pode haver tanto uma ação de mercado quanto a definição de ordens. Se a ação de mercado não for bem-sucedida, tudo o que vier depois dela não será executado. E, se for bem-sucedida, será executada, caso você tente fazer o máximo possível em um único tick. Deve-se ter em mente que as ordens podem não ser definidas, mas a ação de mercado é concluída, ou seja, há uma transição para outra fase.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Estratégias de ordem. Expert Advisor de propósito múltiplo. foi publicado:
O principal elemento inicial de qualquer estratégia de negócio é a análise de preço e análise de indicadores técnicos para abrir uma posição. Chamaremos isso de análise de mercado, ou seja, tudo que acontece no mercado e está além de nosso controle.
Além disso, as estratégias podem requerer outro tipo de análise. Chamaremos isso de análise da situação de negócio atual. Compreende a análise do estado na posição de negociação e análise de qualquer ordem pendente faltando/disponível (se alguma for usada em um estratégia). Os resultados de tal análise nos coloca frente a decisões como se determinadas ações com posições ou ordens precisassem ser realizadas, por exemplo, fechar, mover Stop Loss, posicionar ou excluir ordens pendentes, etc. Em outras palavras, tal análise inclui o estudo de nossa atividade de mercado, ações de acordo com a situação que nós (ou um Expert Advisor) criamos e as regras da estratégia em uso.
Um Limite Móvel comumente conhecido pode até certo ponto ser considerado o segundo tipo dos elementos em uma estratégia de negócio. Considere a seguinte análise: se existe uma posição aberta com o lucro maior que o valor ajustado, enquanto o Stop Loss não está definido ou está além da distância do preço atual como especificado nas configurações, o Stop Loss será movido.
O Limite Móvel é uma função bastante simples de ser de particular interesse. Além disso, ele pode ser classificado como uma categoria totalmente diferente dos elementos de estratégia de negócio, sendo uma função de gerenciamento de posição. Assim, uma estratégia de negócio pode ser composta por três categorias de elementos:
Análise de mercado e ações nela baseadas.
Análise de situação de negócio e ações nela baseadas.
Gerenciamento de posição.
Este artigo centraliza estratégias que usam ativamente ordens pendentes (chamaremos de estratégias de ordem para encurtar), uma metalinguagem que pode ser criada para descrever tais estratégias e o desenvolvimento e uso de uma ferramenta de propósito múltiplo (Expert Advisor) em que a operação baseia-se nestas descrições.
Autor: Dmitry Fedoseev