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

 
MrBrooklin:

Olá, Valery! Muito obrigado, sua versão "...se as posições com nosso magik e em nosso símbolo são iguais a zero, verificamos o tempo e abrimos uma posição..." acabou sendo a mais fácil e eficaz. Adicionei-o à condição de verificar o tempo && PositionTotal()==0 e apenas uma posição com a quantidade necessária é aberta!

Atenciosamente, Vladimir.


Infelizmente, MKL não tem comando, o que retorna o número de posições sobre o símbolo. TotalPosition retorna todas as posições sobre a conta em todos os símbolos. Portanto, para obter posições sobre o símbolo, você precisa pesquisar todas as posições e comparar a posição do símbolo na nossa.

Também. A lógica na primeira vez, abri-la e verificar a presença de nossa posição, trilhar nem sempre é o ideal. Às vezes é melhor verificar primeiro se a posição é aberta com nosso assistente e se é, verificamos a hora de fechamento, ou então arrastá-la, ou então verificamos a hora de abertura.

O objetivo é reduzir o número de ações da EA.

 
Valeriy Yastremskiy:

Infelizmente, não há nenhum comando na MKL que devolva o número de posições sobre um símbolo. TotalPositions retorna todas as posições em todos os símbolos. Portanto, para obter posições sobre um símbolo, você precisa pesquisar todas as posições e comparar a posição do símbolo com a nossa.

Também. A lógica na primeira vez, abri-la e verificar a presença de nossa posição, trilhar nem sempre é o ideal. Às vezes é melhor verificar primeiro se a posição é aberta com nosso assistente e se é, verificamos a hora de fechamento, ou então arrastá-la, ou então verificamos a hora de abertura.

O objetivo é reduzir o número de ações da EA.

Tudo está claro, Valery! Estou tentando implementar suas dicas.

Atenciosamente, Vladimir.

 
Valeriy Yastremskiy:

Se as posições com nossa Magik e em nosso símbolo são zero, verificamos o tempo e abrimos uma posição, se for 1, não abrimos uma posição, verificamos o tempo de fechamento e arrasto, se for mais de 1, alertamos e não trabalhamos. Podemos usar o piggyback ou se quisermos verificá-lo com o iff.

Olá, Valery! Tentei escrever o código sem a enumeração das posições. Eu o escrevi, verifiquei, tudo funciona.

   if(PositionSelect(Symbol())==false && PositionGetInteger(POSITION_MAGIC)!=Magic_Number
   && time_current.hour==time_open.hour && time_current.min>=time_open.min && time_current.min<time_open1.min)
      OpenBUY();
Atenciosamente, Vladimir.
 
MrBrooklin:

Olá Valery! Tentei escrever o código sem a enumeração das posições. Eu o escrevi, verifiquei, tudo funciona.

Cumprimentos, Vladimir.

Tudo bem para começar, mas apenas para começar. As condições são muito rígidas. Se não há posições em nosso símbolo e nenhuma posição com nosso magik em todos os símbolos, então parece normal. Na vida real você pode ter 2 janelas abertas em um símbolo e outro pode ter uma posição. Você pode simplesmente usar Magik para explicar, por exemplo, como trishkin, os 3 primeiros dígitos - código do símbolo e os 2 seguintes - código do script/advisor. E o primeiro passo é codificar manualmente, ou gerar um magik adicionando linhas dependendo do símbolo da janela e do código do script e depois converter a linha em um número.

A maneira clássica é procurar por todos os pedidos ou posições.

Mas isto é demais para o início.

É por isso que é bom começar.

 
Valeriy Yastremskiy:

Não há problema em começar, mas apenas em começar. As condições são muito rígidas. Se não há posições em nosso símbolo e nenhuma posição com nosso magik em todos os instrumentos, então parece normal. Na vida real você pode ter 2 janelas abertas em um símbolo, e outro pode ter uma posição. Você pode simplesmente usar Magik para explicar, por exemplo, como trishkin, os 3 primeiros dígitos - código do símbolo e os 2 seguintes - código do script/advisor. E o primeiro passo é codificar manualmente, ou gerar um magik adicionando linhas dependendo do símbolo da janela e do código do script e depois converter a linha em um número.

A maneira clássica é procurar por todos os pedidos ou posições.

Mas isto é demais para o início.

É por isso que não há problema em começar com isso.

Obrigado, Valeriy! Pesquisar todas as posições é um dos próximos passos no auto-estudo que certamente farei.

Cumprimentos, Vladimir.

 
Valeriy Yastremskiy:

Por alguma razão, todos os pedidos ou posições são considerados uma superação clássica.

Infelizmente, esta é uma tradição na comunidade MQL, todos os EAs são desenvolvidos levando em conta uma perda repentina de conexão e/ou falta de energia de um PC.

por um lado, esta é uma boa metodologia, mas por outro lado impõe grandes restrições ao estilo de escrita do código EA - a EA só trabalha com os mestres da ordem. Por exemplo, se você precisar escrever um martingale, a EA buscará na história a última ordem com seus mestres e analisará o lucro/perda e decidirá se aumenta ou não o novo lote

... em geral desde a criação da MT - todos estão esperando que a internet desapareça e a estratégia em si não é mais tão importante ))

 
Igor Makanu:

Infelizmente, esta é uma tradição na comunidade MQL, todos os EAs são desenvolvidos com uma súbita perda de conexão e/ou falta de energia do PC em mente.

Por um lado, esta é uma boa metodologia, mas por outro lado impõe grandes restrições ao estilo de escrita do código EA - a EA só trabalha com os mestres da ordem. Por exemplo, se você precisar escrever um martingale, a EA buscará na história a última ordem com seus mestres e analisará o lucro/perda e decidirá se aumenta ou não o novo lote

... em geral desde a criação da MT - todos estão esperando que a Internet desapareça, e a estratégia em si não é mais tão importante ))

Olá Igor, obrigado por compartilhar esta informação muito útil.

Atenciosamente, Vladimir.

 
Igor Makanu:

Infelizmente, esta é uma tradição na comunidade MQL, todos os EAs são desenvolvidos com uma súbita perda de conexão e/ou falta de energia do PC em mente.

Por um lado, esta é uma boa metodologia, mas por outro lado impõe grandes restrições ao estilo de escrita do código EA - a EA só trabalha com os mestres da ordem. Por exemplo, se você precisar escrever um martingale, a EA buscará na história a última ordem com seus mestres e analisará o lucro/perda e decidirá se aumenta ou não o novo lote

... Em geral desde a criação da MT - todos estão esperando que a internet desapareça e a estratégia em si não é mais tão importante ))

A proteção contra incêndios, inundações e tolices deve ser sempre!) Normalmente me limito a parar em caso de perda de conexão com DT.

 

Bom dia e bom humor para todos!

Eu continuo estudando a linguagem de programação MQL5. Comecei um estudo detalhado do para operador de laço, que de acordo com a Referência MQL5, e passo a citar:

O para operador de laço

Executa o operador até que a expressão a ser verificada se torne falsa. A expressão é verificada antes de cada iteração


Vou à descrição do para operador de laço e lá li isso:

Оператор for состоит из трех выражений и выполняемого оператора:

for(выражение1; выражение2; выражение3) 
   оператор;

Выражение1 описывает инициализацию цикла. Выражение2 - проверка условия завершения цикла.
Если оно истинно, то выполняется оператор тела цикла for. Все повторяется, пока выражение2 не станет ложным. 
Если оно ложно, цикл заканчивается и управление передается следующему оператору. 
ВыражениеЗ вычисляется после каждой итерации.

O operador executa um operador? OK. Eu pego e corro para o operador de laço para tentar todas as posições em aberto e depois digito a declaração com as condições que eu preciso:

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelect(Symbol())==false && PositionGetInteger(POSITION_MAGIC)!=Magic_Number
         && time_current.hour==time_open.hour && time_current.min>=time_open.min && time_current.min<time_open1.min)
         OpenBUY();
     }

e então nada acontece. A posição Comprar não é aberta. Como faço para entender isso? Devo estar fazendo algo errado, ou não entendo o termo da declaração corretamente?

Prezado Perito! Por favor, me aconselhe, mas não em palavras, não em um código corrigido, caso contrário, nunca aprenderei a linguagem de programação MQL5.

Atenciosamente, Vladimir.
 
MrBrooklin:

Bom dia e bom humor para todos!

Eu continuo estudando a linguagem de programação MQL5. Comecei um estudo detalhado do para operador de laço, que de acordo com a Referência MQL5, e passo a citar:

O para operador de laço

Executa o operador até que a expressão a ser verificada se torne falsa. A expressão é verificada antes de cada iteração


Vou à descrição do para operador de laço e lá li isso:

O operador executa um operador? OK. Eu pego e corro para o operador de laço para tentar todas as posições abertas e depois digito a declaração com as condições que eu preciso:

e nada acontece. A posição Comprar não é aberta. Como faço para entender isso? Devo estar fazendo algo errado ou não entendo de todo o propósito do operador de laço corretamente?

Caros especialistas! Estou pedindo que me dêem algum feedback, mas não em palavras, senão nunca aprenderei a linguagem de programação MQL5.

Atenciosamente, Vladimir.

O operador de laço e os operadores em um corpo de laço. Não é bem uma língua russa clássica.

Tudo é bom, é claro, mas onde está o iterador i no corpo do loop? E para obter o personagem de posição e seu símbolo mágico, ele deve ser selecionado primeiro. A descrição da posição é uma estrutura (na MQL5 tudo é uma estrutura, ordens, tempo e negócios), e é preenchida através de seleção, pelo iterador que não é um bilhete de posição, mas um número de posição. E devemos lembrar que a estrutura de descrição da posição é sempre a última escolha.

Razão: