Discussão do artigo "Limitações e verificações em Expert Advisors"

 

Novo artigo Limitações e verificações em Expert Advisors foi publicado:

É permitido negociar este símbolo na segunda? Há dinheiro suficiente para abrir posição? Qual o tamanho da perda se o Stop Loss acionar? Como limitar o número de ordens pendentes? A operação de negócio foi executada na barra atual ou na anterior? Se um robô de negócio não puder realizar este tipo de verificações, então qualquer estratégia de negócio pode se tornar uma de perda. Este artigo mostra os exemplos de verificações que são úteis em qualquer Expert Advisor.

Limitações e verificações em Expert Advisors

Autor: MetaQuotes Software Corp.

 

artigo útil

 
Concordo, há muitas coisas úteis... Por favor, não considere difícil, mas explique o conceito de "Sessão de negociação" e "Sessão de cotação".
 

Entendo que uma sessão de negociação é diferente de uma sessão de cotação, pois você já pode colocar ordens.

mas as cotações ainda não estão em andamento, ou seja, a negociação não está ocorrendo, mas as ordens podem ser colocadas.

Bem, está claro que as cotações estão em andamento, o que significa que as negociações nesse instrumento estão ocorrendo.


Corrija-me se eu estiver errado

 
Na sessão de negociação, você pode negociar; na sessão de cotação, os preços são recebidos como na sessão de negociação, mas você não pode negociar.
 
Rosh:
Na sessão de negociação, você pode negociar; na sessão de cotação, os preços chegam como na sessão de negociação, mas você não pode negociar.

Obrigado, isso faz sentido.
 
Devido a uma alteração na linguagem MQL5, agora o volume cumulativo máximo permitido por um símbolo deve ser obtido dessa forma:
//--- obter o limite de caracteres no volume
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

Avariante antiga era assim e não deve mais ser usada:

//--- obter o limite de caracteres no volume
   double max_volume=AccountInfoDouble(ACCOUNT_LIMIT_VOLUME);


O artigo foi corrigido e o novo código do Expert Advisor Check_Order_And_Volume_Limits.mq5 foi anexado.

 

Devido a alterações na MQL5, agora o volume total máximo permitido para um símbolo pode ser obtido da seguinte forma:

//--- obter limitação de símbolo para o volume
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

Não use a variante antiga! Era assim:

//--- obter limitação de símbolos para o volume
   double max_volume=AccountInfoDouble(ACCOUNT_LIMIT_VOLUME);
O artigo foi corrigido e o novo código de especialista Check_Order_And_Volume_Limits.mq5 foi anexado a ele.
 

(construir 306)

void OnStart()
{
double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);
}

erros de compilação:

'SYMBOL_VOLUME_LIMIT' - identificador não declarado test.mq5 4 46
'SymbolInfoDouble' - nenhuma das sobrecargas pode ser aplicada à chamada de função test.mq5 4 20

 

Citação do artigo:"Para obter o horário de abertura da última barra, você pode usar a função SeriesInfoInteger(), que precisa receber o nome do símbolo, o período de tempo e a propriedade SERIES_LASTBAR_DATE".

Em uma versão anterior do livro de referência, havia um exemplo de como obter a hora de abertura da última barra usando a função CopyTime, mais ou menos assim:

datetime lastbar_time[1];

CopyTime(Symbol(),0,0,1,lastbar_time);

Pergunta: qual dessas duas opções para obter a hora de abertura da última barra é preferível em termos de velocidade de recuperação de informações e eficiência de uso?

 
Yedelkin:

Citação do artigo:"Para obter a hora de abertura da última barra, você pode usar a função SeriesInfoInteger(), que precisa receber o nome do símbolo, o período de tempo e a propriedade SERIES_LASTBAR_DATE."

Em uma versão anterior do Manual de Referência, havia um exemplo de como obter o horário de abertura da última barra usando a função CopyTime, assim:

Pergunta: qual dessas duas opções para obter o horário de abertura da última barra é preferível em termos de velocidade de recuperação de informações e eficiência de uso?

Elas devem ser equivalentes em termos de tempo, mas a opção SERIES_LASTBAR_DATE com parece melhor.