Perguntas sobre MQL5 Wizard e biblioteca padrão de classes comerciais - página 10

 
Sevrer:

Olá.

Decidi escrever o meu próprio módulo de sinal puramente para fins cognitivos. Tenho enfrentado um problema. Tenho de estabelecer ordens pendentes. Compreendi que isso pode ser feito através do CExpertSignal::OpenLongParams(...). Mas eu tenho um problema - o meu testador avisa sobre a Expiração Inválida. Tendo cavado o código fonte, apercebi-me que não podemos obter nenhum tipo de tempo para além doORDER_TIME_SPECIFIED e gostaríamos de ORDER_TIME_GTC.

Fiz uma jogada inteligente até agora, mas não é bem assim. Corrigi uma função na biblioteca:

O que pode aconselhar?

Olá.

Tem toda a razão. Não levei em conta as expirações zero.

A sua solução é óptima. Farei as edições apropriadas na Biblioteca Standard.

Obrigado.

 
uncleVic:

Olá.

Tem toda a razão. Não levei em conta a expiração zero.

A sua solução é óptima. Farei as edições apropriadas na Biblioteca Standard.

Obrigado.

Isso será óptimo, mas entretanto, nesta situação, encontrei outra saída, a correcta :) Ao criar uma classe herdada do CExpert, na qual substituí as funções CheckOpenLong() e CheckOpenShort(), e aí fiz correcções deste tipo:

        if (expiration == TimeCurrent() || expiration == 0)
        {
                m_expiration = 0;
                m_trade.SetOrderTypeTime(ORDER_TIME_GTC);
        }
        else
        {
              if(!m_trade.SetOrderExpiration(expiration))
        	{
         		 m_expiration=expiration;
        	}
        }
 
Sevrer:

Mas entretanto, encontrei outra forma de sair desta situação - a correcta :) Ao criar uma classe herdada do CExpert, na qual eu superei as funções CheckOpenLong() e CheckOpenShort(), e fiz correcções deste tipo lá:


A herança é a abordagem correcta.
 

Explique por favor a lógica do parâmetro Expert_EveryTick

Se Expert_EveryTick=true, o Expert Advisor processa cada carrapato? Isto é, verifica as condições de entrada/saída e o seguimento da posição (arrasto) em cada novo tick, certo?

E se Expert_EveryTick=fasle - apenas no primeiro tick de um novo bar? E o rasto também será activado apenas no primeiro tick?

Обработчик события "новый бар"
Обработчик события "новый бар"
  • 2010.10.04
  • Konstantin Gruzdev
  • www.mql5.com
Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
 
mr.Taras:

Explique por favor a lógica do parâmetro Expert_EveryTick

Se Expert_EveryTick=true, o Expert Advisor processa cada carrapato? Isto é, verifica as condições de entrada/saída e o seguimento da posição (arrasto) em cada novo tick, certo?

E se Expert_EveryTick=fasle - apenas no primeiro tick de um novo bar? E o rasto também será activado apenas no primeiro tick?


Sim, acertou.
 

Mais perguntas sobre a lógica do Conselheiro Especialista:


uma posição aberta, por exemplo, comprar e um lote fixo, por exemplo, 1.

Há um sinal para o outro lado, para vender.

o que fará a EA? serão dois negócios de 1 lote cada (o primeiro fechará por 1 lote) ou um negócio de 2 lotes? existe uma diferença entre ganhar e perder a compra actual?


Se houver uma posição de compra e novamente um sinal para comprar, que métodos devo redefinir para a fazer fechar?

 
mr.Taras:

Mais perguntas sobre a lógica do Conselheiro Especialista:


1. há uma posição aberta, por exemplo, comprar e um lote fixo, por exemplo, 1.

há um sinal para o outro lado, para vender.

o que deve fazer o consultor especializado? abrirá dois negócios de 1 lote cada (o primeiro fechará por 1 lote) ou um negócio de 2 lotes?


2. a EA não se alongará sozinha, isto é, se houver uma posição de compra e novamente um sinal para comprar? quais os métodos que devo redefinir para que se prolongue, CheckOpenLong()?


1. dois limiares de disparo (Definições do Expert Advisor). Se o limiar de Fechar é excedido, a posição simplesmente fecha, se dois limiares forem excedidos (Fechar e Abrir), a posição inverter-se-á. -/+ Não há diferença.

2. método de processamento

 
uncleVic:

1. dois limiares de disparo ( definições EA). se o limiar Fechado for excedido, a posição irá simplesmente fechar. se dois limiares forem excedidos (Fechado e Aberto), a posição irá inverter-se. -/+ Não há diferença.

2. método de processamento

Os limiares Fechar e Abrir são o resultado da "votação", o que é que a ShortCondition() ou LongCondition() no módulo de sinais retorna?

 
mr.Taras:

Serão os limiares Fechados e Abertos o resultado da "votação" que ShortCondition() ou LongCondition() retornam no módulo de sinais?

Limiares são parâmetros (Signal_ThresholdOpen e Signal_ThresholdClose) contra os quais o resultado da "votação" é comparado.
 

Três perguntas:

  1. Como fazer o módulo de sinal funcionar apenas nos preços de abertura e não em todas as carraças?
  2. Como obter os valores de voto do módulo de sinal no módulo de rastreio de posição? É necessário arrastá-lo com um sinal já calculado e não constituir outro módulo de sinal para o acompanhar.
  3. Como obter os valores de voto do módulo de alarme no módulo de gestão de dinheiro e risco? É necessário abrir volumes de acordo com os sinais comerciais já calculados, e não compor outro módulo de sinal para o cálculo do volume.

Teoricamente, podemos, evidentemente, construir a EA usando o assistente e depois adicionar todas estas características manualmente ao código. Mas é desejável que tudo isto tenha sido implementado sob a forma de métodos padrão, ou seja, para bonecos que querem usar o feiticeiro, para que não tenham de entrar no código e editar, por exemplo, se quiserem substituir um módulo de sinal por outro.

Razão: