Código para rodar em multiplos ativos sem precisar abrir vários gráficos ao mesmo tempo.

 
Boa tarde, pessoal. Eu gostaria de saber como eu posso criar um código que rode em multiplos ativos ao mesmo tempo sem precisar ter que abrir vários gráficos para isso. Exemplo: O robô irá monitorar uma lista com 60 ativos e entrará em todos os ativos que apresentarem uma certa condição. Desde já, agradeço.
 
LKalemba:
Boa tarde, pessoal. Eu gostaria de saber como eu posso criar um código que rode em multiplos ativos ao mesmo tempo sem precisar ter que abrir vários gráficos para isso. Exemplo: O robô irá monitorar uma lista com 60 ativos e entrará em todos os ativos que apresentarem uma certa condição. Desde já, agradeço.

Boa tarde!


Uma busca no CodeBase por "multicurrencies ea" retorna alguns exemplos de códigos para MT4 e MT5: Search - MQL5.community

 
Vinicius de Oliveira:

Boa tarde!


Uma busca no CodeBase por "multicurrencies ea" retorna alguns exemplos de códigos para MT4 e MT5: Search - MQL5.community

Obrigado pela dica, Vinicius, mas eu não consegui compreender bem de como implementar essa idéia. Ao que parece terá que ser criado uma estrutura com o total de arrays que eu quero por cada simbolo. Poderia me dar uma ajuda?

 
LKalemba:

Obrigado pela dica, Vinicius, mas eu não consegui compreender bem de como implementar essa idéia. Ao que parece terá que ser criado uma estrutura com o total de arrays que eu quero por cada simbolo. Poderia me dar uma ajuda?

Um ponto de partida seria um loop com topos os ativos que voce adicionou na observacao de mercado, voce pode execurar esse expert em apenas um grafico, na abertura do candle.

void LoopAtivos()
{    
    for(int i=0;i<SymbolsTotal(1);i++)
    {  
        string ativo = SymbolName(i,1);
        string cotacao = SymbolInfoDouble(SymbolName(i,1), SYMBOL_LAST);                                                         
        //printf("AnalisaAtivo(ativo): " + ativo);
        AnalisaAtivo(ativo);                                  
        //printf(ativo + " SYMBOL_SECTOR: " + SymbolInfoInteger(ativo, SYMBOL_SECTOR)   + " SYMBOL_INDUSTRY: " + SymbolInfoInteger(ativo, SYMBOL_INDUSTRY) );                
    }         
    //printf("AtualizaAnaliseAtivo(): " + listaAnalise);
}


  
int AnalisaAtivo(string ativo)  
{


   maHandle4HM5 = iMA(ativo,PERIOD_M5, 4, 0,MODE_SMA, PRICE_HIGH);   
   maHandle4LM5 = iMA(ativo,PERIOD_M5, 4, 0,MODE_SMA, PRICE_LOW);   
   maHandle10M5 = iMA(ativo,PERIOD_M5, 10, 0,MODE_EMA,PRICE_CLOSE);   
   maHandle20M5 = iMA(ativo,PERIOD_M5, 20, 0,MODE_EMA,PRICE_CLOSE);   
   handleStochasticM5= iStochastic(ativo,PERIOD_M5 ,5 ,3, 3, MODE_SMA, STO_LOWHIGH);
   
   ArraySetAsSeries(maVal4HM5,true);
   ArraySetAsSeries(maVal4LM5,true);
   ArraySetAsSeries(maVal10M5,true);
   ArraySetAsSeries(maVal20M5,true);   

....
 
Sergio de:

Um ponto de partida seria um loop com topos os ativos que voce adicionou na observacao de mercado, voce pode execurar esse expert em apenas um grafico, na abertura do candle.


👏👏👏 Boa Sergio!!

 
É uma boa ideia, mas, eu tomaria cuidado com a criação dos handler em loop a todo momento. Isso pode levar a um memory leak.
Eu usaria uma abordagem com objetos, e essa construção ocorreria apenas uma única vez. 
 
Jonathan Pereira:
É uma boa ideia, mas, eu tomaria cuidado com a criação dos handler em loop a todo momento. Isso pode levar a um memory leak.
Eu usaria uma abordagem com objetos, e essa construção ocorreria apenas uma única vez. 

Não compreendi bem sobre essa abordagem com objetos. Estou tentando fazer via loop pois o EA tem que rastrear cerca de 80 ativos e retornar os ativos que estão com as condições que foram pré-determinadas (o famoso sinal). Só algo vai mal no loop e eu não estou conseguindo entender o erro. Obrigado a todos que responderam!

 
Sergio de:

Um ponto de partida seria um loop com topos os ativos que voce adicionou na observacao de mercado, voce pode execurar esse expert em apenas um grafico, na abertura do candle.


Ficaria inviável fazer um handle, um array etc para cada ativo pois são muitos ativos. Entende?

 
LKalemba:

Ficaria inviável fazer um handle, um array etc para cada ativo pois são muitos ativos. Entende?

Problema de ser muito nao eh problema. O seu problema eh a janela de execucao, se esta devagar aumenta o timeframe, o tempo para calculo ou simplifica o algoritmo.

Dependendo do que tu quer fazer tu poderia deixar um "vies" pre configurado em banco e so ficar observado via LAST se ele ocorreu ou nao. Dai nem handler tem!

Razão: