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

 
Olá, poderia por favor dizer-me como fazer isto? Como soletrar correctamente a condição: *se houver uma nova hora*?
 
MrBrooklin:

Olá!

Ajude-me aqui. Tenho uma pergunta sobre o módulo de sinal comercial "Filtro de tempo".

A questão é que gerei uma EA usando este módulo e defini-a para permitir apenas uma hora de negociação por dia. Comercializa principalmente dessa forma, mas há dias em que o meu Conselheiro Especialista abre posições à hora que lhe apetece. Tentei o módulo de sinais de negociação "Filtro de tempo" em várias combinações com outros módulos de sinais de negociação (por exemplo, Stochastic, WPR, etc.) mas acontece a mesma coisa. Além disso, se fixar 2 horas consecutivas de trabalho permitidas, não há problemas, funciona bem.

A que pode estar relacionado? Talvez haja um erro no código de um módulo de sinal comercial "Filtro de tempo"? Como não sou especialista em programação, peço-lhe que me ajude a descobrir ou que me dê uma dica, talvez esteja a fazer algo de errado.

Atenciosamente, Vladimir.


Aqui está um exemplo simples na fotografia. Num dia, abre às 7 horas; noutro dia, abre às 5 horas; no terceiro dia, abre novamente às 7 horas.


Pode anexar um Expert Advisor mq5 a este posto e especificar os parâmetros do testador (duas capturas de ecrã: Separadores Definições e Parâmetros)?

 
Snajper007:
Olá, poderia dizer-me, por favor? Como soletrar correctamente a condição: *se houver uma nova hora*?

Refere-se à hora (por exemplo, o relógio mostrou 15-00) ou quer dizer que nasceu um novo bar no período de tempo H1?

 

Fórum sobre Comércio, Sistemas de Comércio Automatizados e Testes de Estratégia

FAQ de Iniciantes MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2019.10.14 12:04

Pode anexar um Expert Advisor mq5 a uma mensagem e especificar os parâmetros do testador (duas capturas de ecrã: separadores Definições e Parâmetros)?


Para não ser infundado, por exemplo, neste momento gerei no MQL5 Wizard o primeiro módulo disponível de sinais de negociação AMA e um filtro de tempo.

//+------------------------------------------------------------------+
//|                                                          AMA.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalAMA.mqh>
#include <Expert\Signal\SignalITF.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedRisk.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string             Expert_Title            ="AMA";                  // Document name
ulong                    Expert_MagicNumber      =8503;                   //
bool                     Expert_EveryTick        =false;                  //
//--- inputs for main signal
input int                Signal_ThresholdOpen    =10;                     // Signal threshold value to open [0...100]
input int                Signal_ThresholdClose   =10;                     // Signal threshold value to close [0...100]
input double             Signal_PriceLevel       =0;                      // Price level to execute a deal
input double             Signal_StopLevel        =50.0;                   // Stop Loss level (in points)
input double             Signal_TakeLevel        =50.0;                   // Take Profit level (in points)
input int                Signal_Expiration       =4;                      // Expiration of pending orders (in bars)
input int                Signal_AMA_PeriodMA     =10;                     // Adaptive Moving Average(1,1,...) Period of averaging
input int                Signal_AMA_PeriodFast   =2;                      // Adaptive Moving Average(1,1,...) Period of fast EMA
input int                Signal_AMA_PeriodSlow   =30;                     // Adaptive Moving Average(1,1,...) Period of slow EMA
input int                Signal_AMA_Shift        =0;                      // Adaptive Moving Average(1,1,...) Time shift
input ENUM_APPLIED_PRICE Signal_AMA_Applied      =PRICE_CLOSE;            // Adaptive Moving Average(1,1,...) Prices series
input double             Signal_AMA_Weight       =1.0;                    // Adaptive Moving Average(1,1,...) Weight [0...1.0]
input int                Signal_ITF_GoodHourOfDay=-1;                     // IntradayTimeFilter(-1,...) Good hour
input int                Signal_ITF_BadHoursOfDay=16777087;               // IntradayTimeFilter(-1,...) Bad hours (bit-map)
input int                Signal_ITF_GoodDayOfWeek=-1;                     // IntradayTimeFilter(-1,...) Good day of week
input int                Signal_ITF_BadDaysOfWeek=0;                      // IntradayTimeFilter(-1,...) Bad days of week (bit-map)
input double             Signal_ITF_Weight       =1.0;                    // IntradayTimeFilter(-1,...) Weight [0...1.0]
//--- inputs for money
input double             Money_FixRisk_Percent   =10.0;                   // Risk percentage
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalAMA
   CSignalAMA *filter0=new CSignalAMA;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodMA(Signal_AMA_PeriodMA);
   filter0.PeriodFast(Signal_AMA_PeriodFast);
   filter0.PeriodSlow(Signal_AMA_PeriodSlow);
   filter0.Shift(Signal_AMA_Shift);
   filter0.Applied(Signal_AMA_Applied);
   filter0.Weight(Signal_AMA_Weight);
//--- Creating filter CSignalITF
   CSignalITF *filter1=new CSignalITF;
   if(filter1==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter1");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter1);
//--- Set filter parameters
   filter1.GoodHourOfDay(Signal_ITF_GoodHourOfDay);
   filter1.BadHoursOfDay(Signal_ITF_BadHoursOfDay);
   filter1.GoodDayOfWeek(Signal_ITF_GoodDayOfWeek);
   filter1.BadDaysOfWeek(Signal_ITF_BadDaysOfWeek);
   filter1.Weight(Signal_ITF_Weight);
//--- Creation of trailing object
   CTrailingNone *trailing=new CTrailingNone;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set trailing parameters
//--- Creation of money object
   CMoneyFixedRisk *money=new CMoneyFixedRisk;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set money parameters
   money.Percent(Money_FixRisk_Percent);
//--- Check all trading objects parameters
   if(!ExtExpert.ValidationSettings())
     {
      //--- failed
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- ok
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+

Captura de ecrã de "Configurações".


Captura de ecrã de "Configurações".

Imagem do filtro de tempoincorrecto (as posições são abertas em dias diferentes às 7, 12 e 7 horas)


 
MrBrooklin:

Para não ser infundado, por exemplo, neste momento gerei no MQL5 Wizard o primeiro módulo disponível de sinais de negociação AMA e um filtro de tempo.

Captura de ecrã de "Configurações".


Captura de ecrã de "Configurações".

Imagem do funcionamento incorrecto do filtro de tempo (posições de abertura em dias diferentes às 7, 12 e 7 horas)


1. Imagem com um gráfico - ao tirar uma fotografia, faça-o com a ferramenta "Crosshair" - não está claro qual é o ano.

2. Ao trabalhar com as ordens pendentes - lembre-se que a ordem pendente pode disparar a uma hora (hora e minutos) completamente diferente em relação à hora de definição.

3. Ao utilizar módulos de sinal, redefinir os parâmetros para valores por defeito e verificar o trabalho no mercado - sem quaisquer ordens pendentes (se o ponto 2 não for claro).

 

Fórum sobre Comércio, Sistemas de Comércio Automatizados e Testes de Estratégia

FAQ de Iniciantes MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2019.10.14 13:28

1. Imagem do gráfico - ao fazer um screnshot, faça-o juntamente com a ferramenta "Crosshair" - caso contrário não é claro em que ano.

2. Ao trabalhar com ordens pendentes - lembre-se que uma ordem pendente pode disparar a uma hora (hora e minutos) completamente diferente em relação à hora de colocação.

3. Ao utilizar módulos de sinal, redefinir os parâmetros para valores por defeito e verificar o trabalho no mercado - sem as ordens pendentes (isto se o ponto 2 não for claro).


1. Sobre a crista transversal - compreensível. Na imagem do ecrã, o ano é 2019 e o mês é Outubro.

2. Não compreendo bem a ordem pendente. Como sabe que a EA tem uma ordem pendente e não abre uma posição no início da hora? Pode ser mais específico?

3. O Expert Advisor funciona bem com os valores por defeito dos módulos de sinal. Não é permitido modificar os valores dos parâmetros?

Atenciosamente, Vladimir.

 

***

1. Em relação à mira, é evidente. Na imagem do ecrã, o ano é 2019 e o mês é Outubro.

***

Obrigado pelo esclarecimento.

***

2. Não compreendo bem a ordem pendente. Como determinou que a EA estabeleceu uma ordem pendente e não abriu uma posição imediatamente no início da hora? Pode ser mais específico?

***

No testador visual, basta olhar para o separador "História

Separador História

***

3. Com os valores por defeito dos módulos de sinal, o Expert Advisor funciona bem. Não é possível alterar os valores dos parâmetros?

***

Claro que pode, mas apenas se compreender o que está a fazer, e se compreender que parâmetro é responsável por quê.

 
Vladimir Karputov:

Refere-se à hora (por exemplo, o relógio mostrou 15-00) ou quer dizer que nasceu um novo bar no período de tempo H1?

O relógio mostrou 15-00.
 
Snajper007:
O relógio mostrou 15-00.

E com que grau de certeza deseja o resultado?

Apenas um exemplo: Quer ver as horas no relógio às 15 horas. E espera-se por ele. Mas nessa altura não havia nenhum tick ou não havia nenhuma ligação ao servidor. E depois tem as carraças, mas o tempo é de 15 horas 00 minutos e 36 segundos. O que é que vai fazer?

 
Vladimir Karputov:

E com que grau de certeza deseja o resultado?

Apenas um exemplo: Quer ver as horas no relógio às 15 horas. E espera-se por ele. Mas nessa altura não havia nenhum tick ou não havia nenhuma ligação ao servidor. E depois tem as carraças, mas o tempo é de 15 horas 00 minutos e 36 segundos. O que é que vai fazer?

Será possível verificar não exactamente 15-00, mas sim o início da hora? Por outras palavras, o primeiro minuto já mostraria que a hora anterior tinha terminado e que a nova hora tinha começado.
Razão: