Discussão do artigo "Criação de Consultores Multiespecializados com base em Modelos de Comércio" - página 5

 

MetaTrader 5 Client Terminal build 381

...

MQL5: a biblioteca padrão foi atualizada: os métodos Type() das classes CDealInfo, CHistoryOrderInfo, COrderInfo e CPositionInfo foram renomeados para DealType(), OrderType() e PositionType(), respectivamente.

...


Como o modelo depende das classes comerciais básicas, qualquer alteração, mesmo que pequena, em suas interfaces é fundamental. Nesse caso, o erro pode ser facilmente corrigido com a simples alteração do método Type() para o OrderType() correspondente no arquivo TableOrders.mqh.

Em um futuro próximo, os códigos anexados ao artigo serão atualizados para funcionar corretamente nas compilações mais recentes do compilador e do terminal.

 

chr1sch4n: Não há erro... o código que você reescreveu é idêntico.

Na linguagem C, as instruções case são interrompidas, e é por isso que você precisa inserir a instrução break, de modo que o Buy deve passar para a próxima instrução e ainda executar a ordem.

Consulte: http: //en.wikipedia.org/wiki/Switch_statement ; seção C, C++, Java, PHP, ActionScript, JavaScript; "esse é um exemplo clássico de omissão da linha de interrupção para permitir a passagem"

Parabéns

 
Lugner:

Uma solicitação - seus comentários nos arquivos em inglês podem ser traduzidos?

Corrigido. Obrigado.
 
Um dos melhores artigos que já li, muito obrigado.
 

Parece que não consigo obter o impressionante backtest mostrado no artigo. Quais são as configurações que preciso fazer?

 

"Vale a pena descrever a variávelm_timing separadamente. No decorrer do trabalho do Expert Advisor, é necessário chamar determinados eventos em determinados intervalos de tempo.A funçãoOnTimer()não é adequada para isso, pois modelos diferentes podem ter intervalos de tempo diferentes.

Por exemplo, alguns eventos precisam ser chamados a cada nova barra. Para um modelo de negociação em um gráfico horário, esses eventos devem ser chamados a cada hora; para um modelo de negociação em um gráfico diário, a cada nova barra diária. Está claro que esses modelos têm configurações de tempo diferentes e cada um deve ser armazenado em seu próprio modelo de acordo. A estrutura t_period incluída na classe CModel permite armazenar essas configurações separadamente, cada uma em seu próprio modelo.

Esta é a aparência dessa estrutura:

struct t_period
{
 большая структура 
};

Como você pode ver, ela inclui a enumeração usual de timeframes. Para descobrir se uma nova barra ocorreu, precisamos comparar a hora da última barra com a hora registrada na estrutura t_period. Se o tempo não coincidir, então ocorreu uma nova barra, o tempo na estrutura deve ser atualizado para o tempo da barra atual e retornar um resultado positivo (verdadeiro). Se a hora da última barra e a estrutura coincidirem, isso significa que ainda não ocorreu uma nova barra e só precisamos retornar um resultado negativo (falso).

Aqui está uma função que funciona de acordo com o algoritmo descrito:

bool timing(string symbol, ENUM_TIMEFRAMES tf, t_period &timeframes)
{
большой swich
} 

"

É claro que sou apenas um programador iniciante, mas talvez seja possível determinar o início de uma nova barra para fazer isso (enquanto a variável m_timing é apenas datetime):

Se eu estiver errado com as conclusões, peço desculpas antecipadamente e peço que me corrijam. Se eu não estiver enganado, agradeço a este site e, em particular, a todos os que trabalham aqui - artigos, documentação escrita -, pois comecei a entender alguma coisa.

bool timing(string symbol, ENUM_TIMEFRAMES tf, t_period &timeframes)
{
   int rez;
   MqlRates raters[1];
   rez=CopyRates(symbol, tf, 0, 1, raters);
   if(rez==0)
   {
      Print("Error timing");
      return(false);
   }
   if (TimeCurrent()-raters.time)>PeriodSeconds(tf) return(true); else return(false);
   
} 


P.S.: A propósito, obrigado pelo excelente artigo.

 

Hi,

Como posso aprimorar o modelo ou a função Processing() para oferecer suporte à negociação de pares (outro símbolo)? Agora tudo funciona com o indicador e a negociação subsequente somente no mesmo símbolo. Como posso adicionar Symbol1 e Symbol2 para poder comprar Symbol1 e vender Symbol2 simultaneamente?

Obrigado pela ajuda

P.S.: Ou comprar/vender o Symbol1 com base no comportamento do indicador no Symbol2...

 
P_Cherry:

Hi,

Como posso aprimorar o modelo ou a função Processing() para oferecer suporte à negociação de pares (outro símbolo)? Agora tudo funciona com o indicador e a negociação subsequente somente no mesmo símbolo. Como posso adicionar Symbol1 e Symbol2 para poder comprar Symbol1 e vender Symbol2 simultaneamente?

Obrigado pela ajuda

P.S.: Ou comprar/vender o Symbol1 com base no comportamento do indicador no Symbol2...

Espero que isso seja possível.
 
Automated-Trading:
Corrigido. Obrigado a você.
Obrigado.
 

Hi,

Obrigado por esse excelente artigo...

Na função ReplacedDelayedOrders há a linha de código: for(int b=0;i<history_orders;b++)

Acho que isso causará um loop infinito, ou estou errado?

Acho que a linha de código deve ser: for(int b=0;b<history_orders;b++)

Tchau, T.