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

 

Bom dia e bom humor para todos!

Eu continuo estudando a linguagem de programação MQL5. Fiz uma pequena mudança no código do Vasiliy Sokolov para abrir apenas uma posição por dia, como originalmente previsto no algoritmo do Expert Advisor. A mudança é destacada em amarelo.

Com os melhores cumprimentos, Vladimir.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Зададим условия для открытия позиций BUY и SELL
   double price=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
   double point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);
   int digits=(int)SymbolInfoInteger(Symbol(),SYMBOL_DIGITS);
   price=NormalizeDouble(price,digits);

   if(IsMainPositionOpen() == false && IsTimeForOpen())
     {
      if(TickUP()==(price+point))
         OpenBUY();
      else
        {
         if(TickDOWN()==(price-point))
            OpenSELL();
        }
     }
   if(IsTimeForClose())
      CloseALL();
 
Vasiliy Sokolov:

O bloco do OnInit também é muito pensado e ainda não foi escrito de forma muito correta. Antes de tudo, você deve tentar escrever identificadores, não números. Retornar INIT_SUCCEEDED ao invés de -1. Em segundo lugar, a troca é excessiva aqui. Deve ser usado o "se" ou o "interruptor". Primeiro você tem que escrever um e depois o outro - apenas óleo.

Em terceiro lugar, precisamos monitorar todos os tipos de contas. Temos Demo e depois temos Real. E depois há o Concurso. Mas mesmo que não houvesse uma terceira conta, deveria haver um toco que capturaria todas as outras variantes:

Provavelmente seria mais razoável explicar como funcionam as exceções, caso contrário, não haverá compreensão do porquê de haver qualquer controle sobre algo que você não conhece.

No seu máximo exagerado, deveria ser o seguinte:

1. Iniciar um programa a ser executado

2. trabalhando através do algoritmo e saindo dele em duas direções:

a) Verdadeiro - o algoritmo funcionou corretamente

b) Falso - o algoritmo não funcionou

Ao mesmo tempo, trabalhar a) significa que aqui são cumpridas todas as opções que o programador quer implementar, e b) todo o resto, e não importa, se é necessário ou não. Isto é, o programador implementa apenas aquela funcionalidade que ele quer e tudo mais deve ser excluído.

 
Konstantin:

Provavelmente faz mais sentido explicar o funcionamento das exceções, caso contrário, não há compreensão do porquê de se controlar algo que não se sabe.

No seu máximo exagerado, deveria ser o seguinte:

1. Iniciar um programa a ser executado

2. trabalhando através do algoritmo e saindo dele em duas direções:

a) Verdadeiro - o algoritmo funcionou corretamente

b) Falso - o algoritmo não funcionou

Ao mesmo tempo, trabalhar a) significa que aqui são cumpridas todas as opções que o programador quer implementar, e b) todo o resto, e não importa, se é necessário ou não. Isto é, o programador implementa apenas aquela funcionalidade que ele ou ela insere, e tudo mais deve ser descartado como uma exceção.

Olá Konstantin, obrigado por seus esclarecimentos.

Caros participantes desta linha! Mais uma vez, gostaria de agradecer a todos vocês pelas sugestões e conselhos construtivos que me ajudaram no aprendizado da linguagem de programação MQL5.

Por enquanto tenho uma pausa porque meu trabalho principal não me permite dedicar muito tempo e atenção ao auto-estudo, mas por enquanto o principal resultado é alcançado - entendo o básico da programação, leio códigos de terceiros e escrevo minhas próprias funções.

Vou publicar a versão do Trailing_Stop (v.1).mq5 Expert Advisor com comentários detalhados sobre cada linha de código, em uma forma acessível para um aluno da 1ª série de uma escola de programação, como prometi anteriormente, mas um pouco mais tarde.

Cumprimentos, Vladimir.

 

Bom dia e bom humor para todos!

Eu continuo estudando a linguagem de programação MQL5. Finalmente, tenho tempo suficiente para escrever uma versão do Expert Advisor com comentários detalhados sobre cada linha de código, em uma forma acessível aos alunos do 1º ano de uma escola de programação. Como o código do Expert Advisor é bastante volumoso, estou publicando-o como um arquivo chamado Trailing_Stop_gv.22.mq5.

Antes de publicar o código, verificamos o Expert Advisor no testador de estratégia. Não foram encontrados problemas. O sistema de rede de contabilidade de posição é usado no Expert Advisor. Este sistema de contabilidade significa que, em um determinado momento da conta, pode haver apenas uma posição aberta para um e o mesmo símbolo (segurança).

Neste momento, o Consultor Especialista implementou a capacidade de fazê-lo:

  1. Verifique a conta comercial, na qual você planeja instalá-la. Se o Expert Advisor for instalado em uma conta demo, então na caixa de mensagens aparecerá a permissão para continuar trabalhando. Se for feita uma tentativa de instalar o Expert Advisor em uma conta real, a janela de mensagem mostrará um aviso de que ele não pode continuar trabalhando, e então ele será automaticamente excluído da janela de trabalho do terminal comercial.
  2. Uma vez por dia de negociação, às 9h, horário de Moscou, abre automaticamente uma posição na direção em que o primeiro tique é dirigido. Por exemplo, se o primeiro tique for direcionado para cima às 9h, horário de Moscou, então a posição COMPRAR será aberta; se o primeiro tique for direcionado para baixo, então a posição VENDER será aberta.
  3. Defina o tamanho do lote.
  4. Tamanho de stop loss definido.
  5. Especifique o nível relativo ao preço de abertura, no qual o Stop Loss é movido para o Breakeven.
  6. Estabelecer o passo de fuga do stop loss.

Esta versão do Expert Advisor implementa a maioria das dicas, previamente sugeridas por Vasily Sokolov.

ADVERTÊNCIA!!!

Este Expert Advisor foi desenvolvido de acordo com o plano de auto-estudo para contas de demonstração, e é destinado apenas para fins de treinamento! Não se destina à negociação em uma conta real e com lucro!

Atenciosamente, Vladimir.

Arquivos anexados:
 
MrBrooklin:

Bom dia e bom humor para todos!

Eu continuo estudando a linguagem de programação MQL5. Finalmente, tenho tempo suficiente para escrever uma versão do Expert Advisor com comentários detalhados sobre cada linha de código, em uma forma acessível aos alunos do 1º ano de uma escola de programação. Como o código do Expert Advisor é bastante complicado, estou publicando-o como um arquivo chamado Trailing_Stop (v.2).mq5.

Antes de publicar o código, verificamos o Expert Advisor no testador de estratégia. Não foram encontrados problemas. O sistema de rede de contabilidade de posição é usado no Expert Advisor. Este sistema de contabilidade significa que, em um determinado momento da conta, pode haver apenas uma posição aberta para o mesmo símbolo (instrumento financeiro).

Neste momento, o Consultor Especialista implementou a capacidade de fazê-lo:

  1. Verifique a conta comercial, na qual você planeja instalá-la. Se o Expert Advisor for instalado em uma conta demo, então na caixa de mensagens aparecerá a permissão para continuar trabalhando. Se for feita uma tentativa de instalar o Expert Advisor em uma conta real, a janela de mensagem mostrará um aviso de que ele não pode continuar trabalhando, e então ele será automaticamente excluído da janela de trabalho do terminal comercial.
  2. Uma vez por dia de negociação, às 9h, horário de Moscou, abre automaticamente uma posição na direção em que o primeiro tique é dirigido. Por exemplo, se o primeiro tique for direcionado para cima às 9h, horário de Moscou, então a posição COMPRAR será aberta; se o primeiro tique for direcionado para baixo, então a posição VENDER será aberta.
  3. Defina o tamanho do lote.
  4. Tamanho de stop loss definido.
  5. Especifique o nível relativo ao preço de abertura, no qual o Stop Loss é movido para o Breakeven.
  6. Estabelecer o passo de fuga do stop loss.

Esta versão do Expert Advisor implementa a maioria das dicas, previamente sugeridas por Vasily Sokolov.

ADVERTÊNCIA!!!

Este Expert Advisor foi desenvolvido de acordo com o plano de auto-estudo para contas de demonstração, e é destinado apenas para fins de treinamento! Não se destina à negociação em uma conta real e com lucro!

Atenciosamente, Vladimir.

Olá! - Não compila.

Trailing_Stop_gv.22.mq5

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

descobriu - nome sem parênteses para criar o Trailing_Stop (v.2) Expert Advisor

 
SanAlex:

Olá! - não compila.

Olá! Acabei de baixar o arquivo do site e conferi no meu MetaEditor, tudo se compila bem.

Cumprimentos, Vladimir.

 
MrBrooklin:

Olá! Acabei de baixar o arquivo do site e conferi no meu MetaEditor, tudo se compila bem.

Cumprimentos, Vladimir.

Obrigado! pelo trabalho. eu não introduzi o nome corretamente ao criar o Expert Advisor. tudo funciona.

 
SanAlex:

Obrigado! pelo trabalho. não digitei o nome corretamente ao criar o especialista. tudo funciona.

O prazer é meu!

Cumprimentos, Vladimir.

 

Caros participantes desta linha!

Mais uma vez gostaria de agradecer a todos vocês por suas sugestões construtivas, dicas e conselhos, que me ajudaram a aprender o básico da linguagem de programação MQL5. Um agradecimento especial a Vasily Sokolov! Deus vos abençoe a todos!

Com grande respeito a todos, Vladimir.

 

Bom dia e bom humor para todos!

Eu continuo estudando a linguagem de programação MQL5. Atualmente estou escrevendo código para um novo EA. Eu me deparei com um ponto, que não entendo bem como resolver. A tarefa parece ser simples - quero que meu consultor especializado trabalhe no gráfico do par de moedas, que está definido nos parâmetros de entrada da EA. Se for feita uma tentativa (por engano, por exemplo) de instalá-lo no gráfico de outro par de moedas, o Expert Advisor deve fazer um aviso sobre a impossibilidade de continuar o trabalho.

Aqui está o esboço do código do programa:

input string Symbol_Main="GBPUSDrfd";  //Валютная пара, на которую ставим советник

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   /* Определим график валютной пары, на который будем устанавливать советник*/
   string currency_chart=SymbolInfoString(Symbol(),SYMBOL_DESCRIPTION);
   if(currency_chart==Symbol_Main) //если график валютной пары совпадает со входным параметром
     {
      /* выводим окно сообщений на торговом терминале и продолжаем работу советника */
      MessageBox("Работа советника на данной валютной паре разрешена!");
      return(INIT_SUCCEEDED); //возвращаем для функции OnInit значение означающее "удачная инициализация"
     }
   else //в противном случае, если график валютной пары не совпадает со входным параметром
     {
      /* выводим окно сообщений на торговом терминале и закрываем советник */
      MessageBox("Работа советника на данной валютной паре запрещена! Выходим!");
      return(INIT_FAILED); //возвращаем для функции OnInit значение означающее "неудачная инициализация"
     }
  }

O compilador não mostra nenhum erro. O código que não funciona é destacado em amarelo. Talvez isso se deva ao fato de eu não entender bem o significado do identificador SYMBOL_DESCRIPTION - descrição em cadeia do caractere. Eu tentei usar outros identificadores, mas o resultado é o mesmo. Talvez a função SymbolInfoString() não seja de todo necessária aqui? Escrevi o nome do par de moedas GBPUSDrfd somente porque pretendo usar o Expert Advisor na Alpha-Forex, enquanto todos os símbolos deste corretor têm o rfd final.

Caro Conselheiro Especialista, por favor, me aconselhe em que direção pensar!

Cumprimentos, Vladimir.

Razão: