Trabalhando com mais de um ativo no mesmo EA.

Jonathan Pereira  
Juan Pablo Silenzi de Stagni:
Tem como? Existe literatura ou documentação sobre como implementar isso?
A resposta é sim tem como, eu faço isso desde 2016. E como tudo relacionado a MQL5 não há quase ou nada de literatura relacionado.
Juan Pablo Silenzi De Stagni  
Ivan Ronchi:

Olá.


Utilize _Symbol para comparar o ativo que você deseja.

https://www.mql5.com/pt/docs/predefined/_symbol

Exemplo:

if(StringSubstr(_Symbol,0,3)="WDO")

Obrigado pela pronta resposta mas _Symbol e Symbol() se referem ao ativo do grafico. eu quero utilizar um Symbol que não é o do grafico. Por ex. PETR4, VALE3 e ITUB4, verificando seus preços e colocando, modificando e cancelando ordens de acordo com programação que tem em consideração informações desses 3 ativos ou ate de um 4o.
Inclusive os topicos de ajuda do manual MT5 são tão enxutas que há horas que parecem atrapalhar mais do que ajudar. Se eu colocar o seguinte:

Symbol[0] = "NOME_ATIVO_1";

Symbol[1] = "NOME_ATIVO_2";    

Symbol[2] = "NOME_ATIVO_3";

      RSIHandle1 = iRSI(Symbol[0],
                       PeriodoGrafRSI[0],
                       RSI_Period[0],
                       RSI_Price[0]
                       );
      RSIHandle2 = iRSI(Symbol[1],
                       PeriodoGrafRSI[1],
                       RSI_Period[1],
                       RSI_Price[1]
                       );

      RSIHandle3 = iRSI(Symbol[2],
                       PeriodoGrafRSI[2],
                       RSI_Period[2],
                       RSI_Price[2]
                       );

isso estaria ok? (evidentemente não declarei as arrays, mas acho que explica a ideia)
posso criar handles, observar n ativos a partir do meu EA? Operar com eles ou para operar tem que ser o do grafico?

Juan Pablo Silenzi De Stagni  
Jonathan Pereira:
A resposta é sim tem como, eu faço isso desde 2016. E como tudo relacionado a MQL5 não há quase ou nada de literatura relacionado.

Grato pela pronta resposta Jonathan!

Vc tem links para literatura que possa compartilhar ou exemplos que vc tenha feitos pra ver como é feito?

Quero montar um EA que opere n pares de opções sempre em função do valor do ativo pai e o B&S da opção (o B&S eu calcularia na hora via função já que não existe no MT5 nada nativo).

Mas como implementar controle de ativos diferentes ao do grafico atual? (Por exemplo: Grafico com o ativo pai e EA operando suas opções mas não o ativo pai.)

Grato desde já 

Pablo

Juan Pablo Silenzi De Stagni  
Luis Gustavo Carneiro De Araujo:

Juan, tem um EA meu pra Forex que opera quantos ativos você possa imaginar. Eu já te liberei acesso de leitura do código para que você possa estudar o mesmo. Basta atualizar o repositório no seu Meta Editor que ele vai aparecer pra você.

Obrigado pela resposta Luis Gustavo! Obrigado por compartilhar! Parabéns, tua programação é muito mais avançada do que a minha, infelizmente pra mim, demorarei muito pra entender o que vc fez mas vou tentar pelo menos. O que é o indicador PVT? O que é PVT? vc criou?
Jonathan Pereira  
Juan Pablo Silenzi de Stagni:

Grato pela pronta resposta Jonathan!

Vc tem links para literatura que possa compartilhar ou exemplos que vc tenha feitos pra ver como é feito?

Quero montar um EA que opere n pares de opções sempre em função do valor do ativo pai e o B&S da opção (o B&S eu calcularia na hora via função já que não existe no MT5 nada nativo).

Mas como implementar controle de ativos diferentes ao do grafico atual? (Por exemplo: Grafico com o ativo pai e EA operando suas opções mas não o ativo pai.)

Grato desde já 

Pablo

Pablo,

Eu faço um processador de eventos e com isso eu ganho a flexibilidade de apenas estender esse modulo num mesmo EA monitorando diversos ativos.
abaixo um fluxo que organizei para fazer esse processo que te falei.


Esse processador de eventos esta centralizado em uma classe de estratégia genérica e com isso eu só herdo ela e faço uma implementação de cada estratégia, ai tenho a liberdade de replicar essa estratégia para diversos ativos e tbm ter diversas estratégias rodando para um ou N ativos num só gráfico. Com isso economizo em processamento e ganho em escalabilidade, pois a forma tradicional sugerida pela arquitetura da MetaQuotes te limita a fazer um EA <-> para uma estratégia <-> para um único gráfico. Logo se temos algumas estratégias e ou alguns EA's temos que abrir diversos gráficos, o que faz o processamento da maquina ir nas "nuvens".


o código fica mais ou menos assim:

#include "MODULO.mqh"

class CEstrategia : public CModuleProcessor
  {
    ...
  }


int OnInit()
  {
//--- Configurar e adicionar à lista de estratégias CEstrategia
   CEstrategia *estrategiaX=new CStrategia ();
   estrategiaX.ExpertMagic(1111);
   estrategiaX.Timeframe(Period()); // posso passa o nome do ativo "GBPUSD", apenas precisa estar listado na janela de negociação
   estrategiaX.ExpertSymbol(Symbol());
   estrategiaX.ExpertName("EstrategiaX-V1");
   estrategiaX.SetX(x);
   estrategiaX.SetY(y);
   if(!Gerenciador.AddStrategy(estrategiaX))
      delete estrategiaX;
  }

Espero ter ajudado.

Jonathan

Ivan Ronchi  
Juan Pablo Silenzi de Stagni:

Obrigado pela pronta resposta mas _Symbol e Symbol() se referem ao ativo do grafico. eu quero utilizar um Symbol que não é o do grafico. Por ex. PETR4, VALE3 e ITUB4, verificando seus preços e colocando, modificando e cancelando ordens de acordo com programação que tem em consideração informações desses 3 ativos ou ate de um 4o.
Inclusive os topicos de ajuda do manual MT5 são tão enxutas que há horas que parecem atrapalhar mais do que ajudar. Se eu colocar o seguinte:

Symbol[0] = "NOME_ATIVO_1";

Symbol[1] = "NOME_ATIVO_2";    

Symbol[2] = "NOME_ATIVO_3";

      RSIHandle1 = iRSI(Symbol[0],
                       PeriodoGrafRSI[0],
                       RSI_Period[0],
                       RSI_Price[0]
                       );
      RSIHandle2 = iRSI(Symbol[1],
                       PeriodoGrafRSI[1],
                       RSI_Period[1],
                       RSI_Price[1]
                       );

      RSIHandle3 = iRSI(Symbol[2],
                       PeriodoGrafRSI[2],
                       RSI_Period[2],
                       RSI_Price[2]
                       );

isso estaria ok? (evidentemente não declarei as arrays, mas acho que explica a ideia)
posso criar handles, observar n ativos a partir do meu EA? Operar com eles ou para operar tem que ser o do grafico?

Acredito que funcione sim. Já utilizei em um EA do WDO buscando informações do WIN, mas somente para buscar informações e não para ativar compras e vendas do WIN, por exemplo. 

Juan Pablo Silenzi De Stagni  
Jonathan Pereira:

Pablo,

Eu faço um processador de eventos e com isso eu ganho a flexibilidade de apenas estender esse modulo num mesmo EA monitorando diversos ativos.
abaixo um fluxo que organizei para fazer esse processo que te falei.


Esse processador de eventos esta centralizado em uma classe de estratégia genérica e com isso e só herdo ela e faço uma implementação de cada estratégia, ai tenho a liberdade de replicar essa estratégia para diversos ativos e tbm ter diversas estratégias rodando para um ou N ativos num só gráfico. Com isso economizo em processamento e ganho em escalabilidade, pois a forma tradicional sugerida pela arquitetura da MetaQuotes te limita a fazer um EA <-> para uma estratégia <-> para um único gráfico. Logo se temos algumas estratégias ou alguns EA's temos que abrir diversos gráficos, o que faz o processamento da maquina ir nas "nuvens".


o código fica mais ou menos assim:



Espero ter ajudado.

Jonathan

Poxa Jonathan, muito obrigado pela resposta e a ideia! Estou longe de implementar classes nesse nivel ainda mas entendi perfeitamente como vc faz. Vc tem razão sobre o processamento ir as nuvens com um robo por grafico, ja rodei um mesmo robo em 30 janelas e ativos, o robo controlando um ativo em cada janela, mas é duro no computador e preciso de teloes imensos (kkkkkkk). Por isso quero rodar tudo num robo so numa janela só.

Valeu!

Thiago Duarte  
Juan Pablo Silenzi de Stagni:
Tem como? Existe literatura ou documentação sobre como implementar isso?

Procure no youtube o canal Tutoriais MQL5, há várias aulas gratuitas de programação nessa linguagem :)