Discussão do artigo "Sistemas de negociação adaptativos e seu uso no terminal do cliente do MetaTrader 5" - página 2

 

É incômodo traduzir a documentação para o inglês? Eu sempre aprecio uma boa documentação. Ótimo artigo, obrigado por sua incrível contribuição.

 
Lugner:

É incômodo traduzir a documentação para o inglês? Eu sempre aprecio uma boa documentação. Ótimo artigo, obrigado por sua incrível contribuição.

Traduziremos a documentação anexa assim que possível.
 

Para trabalhar com parâmetros de entrada (variáveis), é fácil simplesmente declará-los antes da declaração da classe e

seguir o caminho de chamada da classe (inclui).

 
Lugner:

É incômodo traduzir a documentação para o inglês? Eu sempre aprecio uma boa documentação. Ótimo artigo, obrigado por sua incrível contribuição.

Muito obrigado. A documentação está traduzida.
 
AM2:

Na classe CAdaptiveStrategy, tento negociar apenas com estocásticos:

Desativei o resto, mas o gráfico no testador ainda é o mesmo. Pelo que entendi, é aqui que as estratégias são conectadas e desconectadas?

Sim, as estratégias são conectadas na função CAdaptiveStrategy::Expert_OnInit(). Por conveniência, é melhor usar a versão de depuração do Expert Advisor, que adicionou o salvamento dos resultados em arquivos. Você pode descobrir quais sinais de quais estratégias foram usados na negociação real usando o arquivo direction_res.txt.

Ao usar uma estratégia adaptativa que consiste nos 5 estocásticos especificados(EURUSD H1, teste do início de 2010 a 1º de setembro de 2010), os seguintes resultados são obtidos:




 

Este é provavelmente o artigo mais instigante que li sobre negociação programática/robótica em um tempo muito, muito longo. Muito obrigado!

Agindo com esse novo entusiasmo, adaptei um pouco o trabalho de Eugene. [Desculpas - pelo menos eu também compartilharei ideias ;-)].

Adaptei um EA existente (infelizmente, ainda não orientado a objetos) para:

1. Várias escalas de tempo: M1, M3, M5, M10, M20, M30, H1
2. Várias MAs rápidas: 3,5,7,9,11
3. Múltiplas MAs lentas: 17, 27, 37, 47 etc. 97, 107, 117 etc.

Anexado a um tick M1, em um loop foreach(period)-foreach(fast)-foreach(slow). Cada tick calcula se precisa verificar se há uma negociação "virtual" e "executa", se necessário, mantendo um saldo P/L lógico/virtual.

Os resultados são muito surpreendentes e muito positivos...

A otimização agora está nas áreas de remoção de períodos de tempo curtos (por exemplo, M1, M3) [já que os períodos de tempo mais altos acabam "vencendo"] e também na determinação da frequência com que o contador de "P/L em execução" deve ser apagado para permitir a detecção de conjuntos de parâmetros de "melhoria rápida".

Também preciso fazer a interface do meu EA de negociação favorito com esse trabalho (para adicionar verificações de ADX/RSI/MACD/RVI etc.), de modo que ele sempre use os pares MA rápidos/lentos ideais e vencedores, e também tenha uma boa lógica de gerenciamento de mercado, dinheiro, posição e negociação.

Mais uma vez, obrigado,

T.

 

Quantum,

Obviamente, se eu quiser adicionar mais condições de compra e venda (ou pares/combos de condições de compra e venda), além das ainda talentosas

if(buy_condition_1 && buy_condition_2) new_state=SIGNAL_OPEN_LONG;
if(sell_condition_1 && sell_condition_2) new_state=SIGNAL_OPEN_SHORT;

no exemplo em CStrategyMA.mqh,

para acionar outras oportunidades para

new_state=SIGNAL_CLOSE_SHORT;
// e 
new_state=SIGNAL_CLOSE_LONG;

não tem sentido lógico adicionar esses combos no arquivo CStrategyMA.mqh, mas para cada nova condição ou par/combo de condições, deve ser dedicado outro arquivo para cada nova condição.

de condições, deve ser dedicado outro arquivo de inclusão/classe,

correto?

Estou me referindo rapidamente, por exemplo, se eu quiser adicionar essas condições:

// Condição de compra 3: MA novo 
   bool buy_condition_3=(m_values[0+5]>m_values[1+7]) && (m_values[1+5]>m_values[2+7]);
// Condição de compra 4: o preço OPEN anterior é maior que a MA
   bool buy_condition_4=(p_open>m_values[1]);

// Condição de venda 3: MA novo 
   bool sell_condition_3=(m_values[0+5]<m_values[1+7]) && (m_values[1+5]<m_values[2+7]);
// Condição de compra 4: o preço OPEN anterior é inferior ao MA
   bool sell_condition_4=(p_open<m_values[1]);

e

  if(buy_condition_3  &&  buy_condition_4) new_state=SIGNAL_OPEN_LONG;
   if(sell_condition_3 && sell_condition_4) new_state=SIGNAL_OPEN_SHORT;

   if((GetSignalState()==SIGNAL_OPEN_SHORT) && (buy_condition_3 || buy_condition_4)) new_state=SIGNAL_CLOSE_SHORT;
   if((GetSignalState()==SIGNAL_OPEN_LONG) && (sell_condition_3 || sell_condition_4)) new_state=SIGNAL_CLOSE_LONG;

elas podem ser adicionadas em subclasses dentro do CStrategyMA.mqh, sem afetar o sistema principal do sistema adaptativo, em outras palavras, com a

sistema adaptativo, em outras palavras, se esse arquivo de inclusão CStrategyMA.mqh continuar interagindo corretamente com CAdaptiveStrategy.mqh

e CSampleStrategy.mqh, também levando em consideração as novas condições (3 e 4 do exemplo) no núcleo lógico

da ideia do EA?

Ou, para as condições 3 e 4, devo reescrever e adicionar, por exemplo, um arquivo CStrategyMA3and4.mqh?

É possível adicionar essas condições dentro do mesmo CStrategyMA.mqh e fazer tudo funcionar corretamente?

Talvez eu tenha respondido sozinho e seja um pouco estúpido, mas também gostaria de pedir sua(s) opinião(ões).

Obrigado

 
Automated-Trading:

Sim, as estratégias são conectadas na função CAdaptiveStrategy::Expert_OnInit(). Por conveniência, é melhor usar a versão de depuração do Expert Advisor, na qual foi adicionado o recurso de salvar resultados em arquivos. Você pode descobrir quais sinais de estratégia foram usados na negociação real usando o arquivo direction_res.txt.

Ao usar uma estratégia adaptativa que consiste nos 5 estocásticos acima (EURUSD H1, teste do início de 2010 a 1º de setembro de 2010), os seguintes resultados são obtidos:

A julgar pelo gráfico, você tem novamente apenas um modelo otimizado, mesmo que parte dessa otimização tenha sido automatizada, mas um modelo adaptado é um modelo no qual há um bloco de cálculo que adapta a entrada e a saída ao mercado durante a operação da estratégia, e os parâmetros na inicialização não importam em nada. Nessas condições, apenas a linha de patrimônio líquido em relação à linha de saldo será equalizada, pois, nos casos em que a distribuição para o fechamento de uma posição por lucro tiver mudado, esse sistema ainda recalculará novos valores e determinará uma nova zona de lucro e, portanto, reconstruirá os parâmetros de lucro e o grupo de ordens de patrimônio líquido será preservado:
Arquivos anexados:
 

Prezado Forexistence,

Você respondeu à sua pergunta :)

Por um lado, podemos adicionar novas condições à estratégia CStrategyMA (mas obteremos a nova estratégia, diferente da inicial); a outra maneira é criar uma nova classe (por exemplo, CStrategyMA34) e adicionar condições adicionais de compra/venda nela.

Mas, é claro, você deve incluir o arquivo com sua nova estratégia e adicionar essas novas estratégias à função Expert_OnInit da classe CAdaptiveStrategy:

#include <CStrategyMA3and4.mqh>

int CAdaptiveStrategy::Expert_OnInit()
{
.....
--- adding new strategies
   for(int i=0; i<10; i++)
     {
      CStrategyMA34 *t_StrategyMA34;
      t_StrategyMA34=new CStrategyMA34;
      if(t_StrategyMA34==NULL)
        {
         delete m_all_strategies;
         Print("Error of creation of object of the CStrategy3and4 type");
         return(-1);
        }
      int period=3+i*10;
      t_StrategyMA34.Initialization(period,true);
      t_StrategyMA34.SetStrategyInfo(_Symbol,"[MA34_"+IntegerToString(period)+"]",period,"Moving Averages with new conditions "+IntegerToString(period));
      m_all_strategies.Add(t_StrategyMA34);
     }
.....
}

A segunda maneira é melhor, pois você pode adicionar muitas estratégias e suas variações.

Não é necessário remover as instâncias da classe CStrategyMA (se houver), pois não analisaremos suas caixas de areia e seus resultados serão ruins.

O mercado nos ajudará a determinar a melhor estratégia na lista de estratégias, incluída em m_all_strategies.

 
dasmen:
A julgar pelo gráfico, você novamente tem simplesmente um modelo otimizado, mesmo que parte dessa otimização tenha sido automatizada, mas um modelo adaptado é um modelo no qual há um bloco de cálculo que adapta a entrada e a saída ao mercado durante a operação da estratégia, e os parâmetros na inicialização não importam em nada. Nessas condições, apenas a linha de patrimônio líquido em relação à linha de saldo será equalizada, pois, nos casos em que a distribuição para o fechamento de uma posição com lucro tiver mudado, esse sistema ainda recalculará os novos valores e determinará uma nova zona de lucro e, portanto, reconstruirá os parâmetros de lucro e o grupo de ordens de patrimônio líquido será preservado:

O artigo usa o conceito e a aplicação da estratégia adaptativa como na matemática, de fato como um sistema para implementar escolhas de gerenciamento.