Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1477

 
Vasiliy Pushkaryov #:

exibe informações da barra 6201

O que está escrito nele?

printf((string)TerminalInfoInteger(TERMINAL_MAXBARS));
Provavelmente, a história é mais para o testador, para que os indicadores sejam calculados corretamente nela
 
MrBrooklin #:

Levando em conta as dicas dos membros do fórum, que são um grande OBRIGADO, obtivemos esta versão do script:

Saudações, Vladimir.

Esqueci completamente de um ponto muito importante no script. Era necessário normalizar o lote. Aqui está a versão corrigida:

//+------------------------------------------------------------------+
//|                            Lot_Size_Depending_On_Risk_And_SL.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
input uint Risk=6;         // Размер риска (> 0, но не более 100 %)
input uint Stop_Loss=1000; // Размер стоп-лосса (> 0, но не более 4294967295)
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot_Size_Depending_On_Risk_And_SL()
  {
//--- блок проверки входных параметров на корректность
   if(Risk==0 || Risk>100 || Stop_Loss==0)
     {
      Print("<===== Введены не корректные размеры риска и/или стоп-лосса! =====>");
      return(0.0);
     }
//--- блок определения размера лота
   double trading_account_currency=SymbolInfoDouble(_Symbol,SYMBOL_POINT)*
                                   SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/
                                   SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
   double lot=NormalizeDouble((AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk*0.01)/
                              (Stop_Loss*trading_account_currency),2);
//--- блок проверки размера лота на минимум и максимум от возможного
   double min_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   double max_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
   if(lot<min_volume)
      lot=min_volume;
   if(lot>max_volume)
      lot=max_volume;
//--- блок расчёта минимального шага изменения объёма необходимого для заключения сделки
   double step_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
   int ratio=(int)MathRound(lot/step_volume);
   if(MathAbs(ratio*step_volume-lot)>0.0000001)
      lot=ratio*step_volume;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print(DoubleToString(Lot_Size_Depending_On_Risk_And_SL(),2));
  }
//+------------------------------------------------------------------+

Atenciosamente, Vladimir.

 
Boa tarde!
Depois de terminar o teste avançado dorobô, encontrei um problema persistente: ao iniciar um único teste com o melhor conjunto de parâmetros, o testador de estratégia começa a executá-lo e parece executá-lo até o fim (a julgar pelo mecanismo do indicador de progresso), mas depois trava. O Metatrader precisa ser reiniciado e os resultados do teste único (e de todo o teste avançado em geral) são perdidos.
Por que o testador trava e como isso pode ser resolvido?
Atenciosamente, Alexander
 
Especialistas, por favor, me digam: como configurar a plataforma para refletir o histórico de negociações não em todos os períodos de tempo, mas apenas em alguns deles?
E o que temos agora: clique na caixa de seleção "mostrar histórico de negociações" e todo o histórico (setas para cima e para baixo) no gráfico semanal já é uma cerca sólida.
E eu gostaria de uma configuração como outras ferramentas (linhas de tendência, setas, etc.), cuja exibição pode ser definida não em todos os períodos de tempo.
 

Boa tarde. Você poderia me dizer onde posso ver o exemplo mais simples de um Expert Advisor baseado na interseção de duas MAs (você pode dar uma aula).
Eu sei como adicionar um. Não quero fazer um simples copiar-colar e alongar o código, sei que existem outros métodos.
Se na MQL4 eu não tinha nenhuma dúvida, na MQL5 não consigo entender direito como fazer.

 
makssub exemplo mais simples de um Expert Advisor baseado na interseção de duas MAs (você pode dar uma aula).
Eu sei como adicionar um. Não quero fazer um simples copiar-colar e alongar o código, sei que existem outros métodos.
Se na MQL4 eu não tinha nenhuma dúvida, na MQL5 não consigo entender direito como fazer.

Olá. Abra o MetaEDitor 5. Ele tem um Expert Advisor integrado (padrão) baseado na interseção de duas MAs. Abra o código e estude-o. Ou procure-o no CodeBase. Aqui, por exemplo, está o primeiro EA construído com base na interseção de duas MAs.

Saudações, Vladimir.


 
MrBrooklin #:

Olá, abra o MetaEDitor 5. Ele tem um Expert Advisor integrado (padrão) baseado na interseção de duas MAs. Abra o código e estude-o. Ou pesquise no CodeBase. Aqui, por exemplo, está o primeiro EA construído com base na interseção de duas MAs.

Saudações, Vladimir.


Obrigado, dei uma olhada.

Entendo o que acontece no OnInit.

Como fazer tudo corretamente no OnTick?

 
makssub #:

Obrigado, eu dei uma olhada.

Em OnInit, entendo mais ou menos o que está acontecendo.

Como faço para inserir tudo isso no OnTick?

Estou mostrando apenas uma variante de escrever um Expert Advisor, mas pode haver um grande número dessas variantes. Tudo depende da qualificação do programador. A estrutura de um Expert Advisor pode ser assim:

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Input variables                                                  |
//+------------------------------------------------------------------+

// здесь размещаем входные параметры советника

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // здесь инициализируем то, что считаем нужным
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   // здесь деинициализируем то, что считаем нужным   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- абстрактный пример советника

   Check_Trading();           // проверим условия разрешающие торговлю
   Signal_Up();               // ищем сигнал для открытия длинной позиции
   Open_Buy_Position();       // открываем длинную позицию
   Close_Buy_Positions();     // закрываем длинную позицию
   
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Check_Trading()
  {

   // здесь вставляем условия разрешающие торговлю

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void  Signal_Up(); 
  {

   // здесь вставляем условия, при которых появляется сигнал на покупку

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Open_Buy_Position(); 
  {

   // здесь вставляем функцию открытия длинной позиции

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Close_Buy_Positions();
  {

   // здесь вставляем функцию закрытия длинной позиции

  }
//+------------------------------------------------------------------+

Algo parecido com isto. Mais uma vez, enfatizo que este não é um guia para a criação de Expert Advisors, mas uma estrutura aproximada que utilizo ao criar meus Expert Advisors.

Atenciosamente, Vladimir.

 
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // здесь инициализируем то, что считаем нужным
   return(INIT_SUCCEEDED);

Não sei como escrever isso

 
Лауреат #:

Não sei como escrever isso

O que exatamente não está claro para você? Como criar uma função de inicialização do EA? Então, tente estudar este artigo para iniciantes.

Saudações, Vladimir.