Perguntas básicas de um recém-chegado

 

Olá a todos!

Devo salientar imediatamente que tentei fazer estas perguntas no tópico relevante aqui, mas de alguma forma a pergunta não recebeu a atenção que merecia. Embora, parece-me, os tópicos tocaram pelo menos uma vez na mente de muitas pessoas. Uma espécie de perguntas do tipo FAQ (embora eu possa estar errado). Eu mesmo duplicarei as perguntas aqui diretamente:

1. Há uma diferençaentre Mql4 e Mql5 (site e linguagem de programação). Há Metatrade 4 e Metatrader 5 com Mql4 e Mql5 respectivamente. Há também dois sites diferentes correspondentes. Ao mesmo tempo, todos aqueles Conselheiros Especialistas que eu observei no MT4 levam a esse site. Qual deles é mais relevante? Que fórum é "mais vivo"? Onde é o melhor lugar para postar perguntas? Existe uma compatibilidade retroativa entre as diferentes versões de MT e Mql? Atualmente estou escrevendo pessoalmente meu assessor especializado MT4 no Mql4, respectivamente. Isto se deve ao fato de que o corretor que estou usando para testar a demonstração está usando o MT4. Como posso identificar o idioma em que meu Assessor Especialista está escrito? Quero dizer somente por extensão (.mq4 e .mq5). Se eu renomear um arquivo, ele será compilado (novamente, sobre compatibilidade)?

2. Parâmetros dinâmicos do Consultor Especialista Externo. É possível mudar dinamicamente os parâmetros ajustáveis de um Expert Advisor? Deixe-me explicar... Por exemplo, existe um parâmetro externo bool a. Se for verdade, um parâmetro adicional externo int b deve ser definido. Se a=falso, o parâmetro b não é necessário. Existe alguma maneira de exibi-la ou não, dependendo do valor atual de um selecionado? Levando em conta que não consegui encontrar nenhum manipulador de mudança de parâmetro externo e não existe nenhum #se ... #endif, eu suspeito que não pode ser feito... Se sim, mas você poderia sugerir a melhor maneira de proceder nesta situação, para não sobrecarregar o processo de definição de parâmetros externos? Por exemplo, posso colocar a=falso, esquecer que o parâmetro b não é usado, mas ainda assim incluí-lo na otimização (embora não valesse a pena, ele só perderia tempo extra). E é uma coisa quando existe apenas um parâmetro b. Mas se, por exemplo, eu fizer um parâmetro externo enumerativo e houver várias variantes de TC. Eles têm uma parte comum (portanto, é lógico implementá-los dentro de uma EA, em vez de escrever várias), mas também há outras diferentes com muitos parâmetros diferentes. Então é muito fácil confundir quais parâmetros são relevantes para o TS selecionado.

Otimização automática do Expert Advisor. IMHO, é muito útil e útil. Encontrei aqui um artigo sobreotimização automatizada de robôs comerciais em comércio real. Entretanto, até onde eu entendo, uma segunda instância de MT é utilizada para otimização a partir do exterior (de uma instância de MT em execução) e os resultados da otimização são lidos de um relatório na forma de html. Isto não é muito conveniente e tortuoso. Logicamente, eu deveria escrever minha própria função de otimização e executá-la diretamente do Expert Advisor. Portanto, aqui está a questão. Até onde entendi, um algoritmo de otimização genética foi programado no testador de estratégia. Conheço muito brevemente estes algoritmos. Mas eles são conhecidos há muito tempo, daí a pergunta - por que reinventar a roda?) Existe um algoritmo pronto que é usado diretamente na MT? Talvez já exista em algum lugar nas bibliotecas do próprio terminal. Talvez haja um código fonte separado ou uma dll pronta. Em geral, por favor, compartilhe sua experiência neste assunto.

Obrigado antecipadamente pelas respostas a pelo menos parte destas perguntas.

 
gammaray:

Olá a todos!

Devo salientar imediatamente que tentei fazer estas perguntas no tópico relevante aqui, mas de alguma forma a pergunta não recebeu a atenção que merecia. Embora, parece-me, os tópicos tocaram pelo menos uma vez na mente de muitas pessoas. Uma espécie de perguntas do tipo FAQ (embora eu possa estar errado). Eu mesmo duplicarei as perguntas aqui diretamente:

1. Há uma diferençaentre Mql4 e Mql5 (site e linguagem de programação). Há Metatrade 4 e Metatrader 5 com Mql4 e Mql5 respectivamente. Há também dois sites diferentes correspondentes. Ao mesmo tempo, todos aqueles Conselheiros Especialistas que eu observei no MT4 levam a esse site. Qual deles é mais relevante? Que fórum é "mais vivo"? Onde é o melhor lugar para postar perguntas? Existe uma compatibilidade retroativa entre as diferentes versões de MT e Mql? Atualmente estou escrevendo pessoalmente meu assessor especializado MT4 no Mql4, respectivamente. Isto porque o corretor que eu uso para testar a demonstração está usando o MT4. ...

...

Seria lógico colocar minhas perguntas relacionadas à MQL4 no "quarto" fórum. Embora a diferença entre a MQL5 e a MQL4 não seja muito significativa. Nós nos mudamos da MQL4. Portanto, se você quiser fazer uma pergunta sobre o "4" neste fórum, é melhor especificar no cabeçalho do tópico que ele está relacionado ao MT4. Será mais claro dessa forma.


... Como você determina o idioma no qual o Expert Advisor está escrito? Quero dizer, somente pela extensão (.mq4 e .mq5). E se o arquivo for renomeado, ele irá compilar (novamente, sobre compatibilidade)?

...

Quanto à extensão. Há arquivos que depois de renomeados compilam bem e funcionam tanto no MT4 como no MT5 - não há receitas gerais aqui.
 
Karputov Vladimir:

Faz sentido dirigir perguntas da MQL4 para o "quarto" fórum. Embora as diferenças entre a MQL5 e a MQL4 não sejam significativas. É uma transição da MQL4. Portanto, se você quiser fazer uma pergunta sobre o "4" neste fórum, é melhor especificar no cabeçalho do tópico que ele está relacionado ao MT4. Será mais claro dessa forma.


Em relação à extensão. Se você não tiver uma conta MT4 ou MT5 com um arquivo MT4 ou MT5, você pode usá-lo como pré-requisito para um robô comercial e não precisa de um específico.
É apenas a primeira questão diz respeito ao mql4, o resto é comum para o IMHO para mql4 e mql5. Obrigado pela resposta à primeira pergunta;) Acima de tudo, estou interessado na segunda pergunta. E IMHO a terceira pergunta pode ser interessante para todos os desenvolvedores EA)
 
Para a segunda pergunta, veja input, sinput, ParametrGetRange(...), ParametrSetRange(...).
 
Vladimir Kazakov:
Para a segunda pergunta, veja input, sinput, ParametrGetRange(...), ParametrSetRange(...).

Eu não perguntei como definir parâmetros externos do consultor especializado. Aprendi a fazer isto há muito tempo (entrada, externa). Perguntei como e se é possível alterar dinamicamente o conjunto de parâmetros exibidos nos ajustes. ParametrGetRange e ParametrSetRange não podem ser encontrados em mql. Estas não são funções incorporadas? Onde procurá-los?

P.S. O uso de sinput pode ser usado apenas como uma dica de que o parâmetro não pode ser otimizado por si só sem estar vinculado a outros parâmetros. Mas eu não posso nem mesmo mudar dinamicamente a entrada em sinput dependendo dos parâmetros que já escolhi para sugerir quais parâmetros buscar na otimização (quais parâmetros são significativos dados os parâmetros escolhidos) para não ter que perder tempo correndo através dos parâmetros que atualmente não fazem sentido

 

Nada pode ser alterado programmaticamente na guia "Parâmetros". Você pode pular o parâmetro desativado definido retornando INIT_PARAMETERS_INCORRECT do OnInit().

Você pode mudar a permissão de início, passo, parada e otimização de forma programática: https://www.mql5.com/ru/docs/optimization_frames

Документация по MQL5: Работа с результатами оптимизации
Документация по MQL5: Работа с результатами оптимизации
  • www.mql5.com
Работа с результатами оптимизации - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Kazakov:

Nada pode ser alterado programmaticamente na guia de parâmetros. Um conjunto de parâmetros desativado não pode ser pulado - um toco pode ser ligado para não fazer cálculos desnecessários.

Você pode alterar a resolução de início, passo, parada e otimização programmaticamente: https://www.mql5.com/ru/docs/optimization_frames

Estas funções aparentemente apareceram em mql5 porque eu não as encontrei em mql4 de ajuda. Mais uma vez, há a questão da compatibilidade. Se eu escrever um EA no Metatrader 5, posso usá-lo no Metatrader 4? Parece improvável. Se eu usar especialmente as novas funções introduzidas no mql5. O mql5 tem funções para executar a otimização (é apenas a questão da minha pergunta 3)?
 

O tópico é chamado de "perguntas básicas de um iniciante", e como iniciante eu não entendo nada. Bem, é aqui que vou obter uma resposta à minha pergunta elementar (ou melhor, espero). Tentei seguir um guia passo a passo para escrever meu consultor especializado. Fiquei preso no aspecto de como fechar à força uma posição aberta em MKL5 (sem esperar pelo SL ou TP), quando aparece um certo sinal indicador, como na intersecção de dois MAs, ou quando o estreitamento das linhas Bollinger ou outros sinais? Deve haver uma função como ClosePos(), mas onde está e como eu a obtenho? Peço uma peça de código detalhada, porque eu mesmo não entendo as nuances - ainda sou um bebê no MKL5.

 
doublezero:

O tópico é chamado de "perguntas básicas de um iniciante", e como iniciante eu não entendo nada. Bem, é aqui que vou obter uma resposta à minha pergunta elementar (ou melhor, espero). Tentei seguir um guia passo a passo para escrever meu consultor especializado. Fiquei preso no aspecto de como fechar à força uma posição aberta em MKL5 (sem esperar pelo SL ou TP), quando aparece um certo sinal indicador, como na intersecção de dois MAs, ou quando o estreitamento das linhas Bollinger ou outros sinais? Deve haver uma função como ClosePos(), mas onde está e como eu a obtenho? Solicito um trecho detalhado do código, pois eu mesmo não entendo as nuances - no MKL5 ainda é um bebê.

Eu mesmo estou lidando com isso há menos de um mês. A questão é se você mesmo quer fazer isso ou perguntar no fórum. Perguntas simples geralmente não são feitas, porque não é muito bom (você pode procurar na Ajuda, procurar por respostas prontas na Internet). Foi por isso que fiz aquelas perguntas bastante extensas que surgiram durante este mês. Quanto à sua pergunta... A função OrderClose é chamada. Há muitos exemplos de seu uso. Está na amostra MACD incorporada. Aqui está o código usado para fechar pedidos por sinais MACD (aqui está uma amostra de código para implementação do Trailing Stop)


//--- it is important to enter the market correctly, but it is more important to exit it correctly...   
   for(cnt=0;cnt<total;cnt++)
     {
      if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderType()<=OP_SELL &&   // check for opened position
         OrderSymbol()==Symbol())  // check for symbol
        {
         //--- long position is opened
         if(OrderType()==OP_BUY)
           {
            //--- should it be closed?
            if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
               MacdCurrent>(MACDCloseLevel*Point))
              {
               //--- close order and exit
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
                  Print("OrderClose error ",GetLastError());
               return;
              }
            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     //--- modify order and exit
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
                        Print("OrderModify error ",GetLastError());
                     return;
                    }
                 }
              }
           }
         else // go to short position
           {
            //--- should it be closed?
            if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
               MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
              {
               //--- close order and exit
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
                  Print("OrderClose error ",GetLastError());
               return;
              }
            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     //--- modify order and exit
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
                        Print("OrderModify error ",GetLastError());
                     return;
                    }
                 }
              }
           }
        }
     }


E, em geral, basta digitar a palavra "Ordem" no "Índice" e todas as funções relativas à gestão de pedidos serão mostradas lá
 
gammaray:

Eu mesmo venho fazendo isso há menos de um mês. A questão é se você mesmo quer fazer isso, ou se quer fazer perguntas no fórum. Normalmente não faço perguntas simples, porque não é realmente apropriado (você pode fazer algumas pesquisas no Helpdesk ou pesquisar na Internet para obter respostas). Foi por isso que fiz aquelas perguntas bastante extensas que surgiram durante este mês. Quanto à sua pergunta... A função OrderClose é chamada. Há muitos exemplos de seu uso. Está na amostra MACD incorporada. Aqui está o código usado para fechar pedidos por sinais MACD (aqui está um código de exemplo de como implementar o mecanismo Trailing Stop)



Obrigado por uma resposta tão rápida! Pensei que provavelmente seria dado por alguém que tem lidado com este tipo de coisa por um longo tempo.

Exceto que OrderClose está em MKL4, mas não está em MKL5. Há apenas a funçãoPositionClose na classe CTrade na biblioteca padrão. E não está nada claro para mim como tirá-la de lá. Eu acho que, para isso você tem que de alguma forma ligar de um código para a biblioteca, depois para a classe CTrade..... Em geral, é uma floresta escura para mim. Eu não ia estudar MKL5, apenas decidi automatizar minha estratégia bastante bem sucedida (para mim), então comecei a seguir instruções passo a passo. E agora estou presa...

 
doublezero:

Obrigado por uma resposta tão rápida! Pensei que provavelmente viria de alguém que é novo nisto.

Exceto que OrderClose está em MKL4, mas MKL5 não o tem. Há apenas a funçãoPositionClose na classe CTrade na biblioteca padrão. E não está nada claro para mim como tirá-la de lá. Eu acho que, para isso você tem que de alguma forma ligar de um código para a biblioteca, depois para a classe CTrade..... Em resumo, é uma floresta escura para mim. Eu não ia estudar o MKL5, apenas decidi automatizar minha estratégia bastante bem sucedida (para mim), então comecei apenas a seguir instruções passo a passo. E agora estou presa...

Eu tinha estragado algo no mql 5, então eu não quero usar OrderSend, tudo é feito lá (inclusive o fechamento). Mais uma vez, o MT5 tem a mesma amostra MACD. Mas são necessárias 10 vezes mais linhas...
Ошибка закрытия ордера
Ошибка закрытия ордера
  • www.mql5.com
Скажите а есть отдельная команда по закрытию позиции или только встречная позиция? - - Категория: эксперты форекс, торговые роботы и советники