EA com 10 indicadores | Como controlar todos os sinais e enviar as ordens?

 

Boa tarde pessoal.

Estou tentando criar um EA que tenha muitos indicadores a escolha do usuário. 
O problema é que não estou conseguindo dizer ao EA de forma dinamica quais sao os sinais que os indicadores que o usuario escolheu para poder comprar e vender. 

Vamos criar um exemplo aqui pra ficar melhor.....

Vamos supor que o EA tenha 5 indicadores, sendo eles: BB, MM, IFR, MACD e HILO.
O usuário pode escolher desde 1 indicador até os 5 ao mesmo tempo caso deseje.

Digamos que o user escolheu apenas 3, sendo: BB, MM e IFR. 

Logo eu preciso apenas capturar os sinais de BB, MM e IFR pensando na questão de performance. Se o user n escolheu MACD e HILO, logo não preciso passar por estes codigos rs. 

Até aqui eu consegui fazer numa boa.

Mas o meu maior problema esta sendo dizer ao EA, de forma dinâmica que ele precisa entrar em um trecho de código que o usuário escolheu apenas 3 indicadores, dizer quais sao estes 3 indicadores, e ainda colocar pra validar se os 3 ao mesmo tempo retornaram Compra ou Venda. 

Alguém pode me ajudar?

Vou postar aqui:
O trecho de código aqui que faz a escolha dos sinais que o user escolheu.

//+------------------------------------------------------------------+
//| Função para buscar os sinais apenas dos indicadores ativos       |
//+------------------------------------------------------------------+
void AtualizaSinais(int n) //Passar a variavel total de indicadores
{
   for(int i=0;i<n;i++)
   {
      switch(indicadoresON[i])	//Cada posição do array eu guardo o ID do indicador que atribui ao OnInit.
      {
         case 1:
            sinalBB = BB_Sinal();
            //Print("Renovei o sinal de Bandas");
            break;
         case 2:
            sinalMxM = MxM_Sinal();
            //Print("Renovei o sinal de Cruzamento");
            break;
         case 3:
            sinalIFR = IFR_Sinal();
            //Print("Renovei o sinal do IFR");
            break;
      }
   }
}

Um exemplo de como são meus sinais.

//+------------------------------------------------------------------+
//| SINAL --- IFR                                                    |
//+------------------------------------------------------------------+
int IFR_Sinal()
  {
   double ifr[];
   ArraySetAsSeries(ifr, true);
   CopyBuffer(IFR_Handle, 0, 1, 2, ifr);
   
   if(ifr[1] <= LimiteSup && ifr[0] > LimiteSup)
      return -1;
   if(ifr[1] >= LimiteInf && ifr[0] < LimiteInf)
      return 1;
   
   return 0;
  }

E um exemplo de como inicializo meus indicadores. 

int            indicadoresON[10];                              // Armazena os indicadores que o user escolheu

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//| VERIFICANDO OS HANDLES                                           |
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

if(BB_LigDesl)
{
   BB_Handle = iBands(_Symbol, _Period, Periodo, Deslocamento, Desvio, Preco);

   if(BB_Handle == INVALID_HANDLE)
   {
      Print("Erro na criação do handle Bandas de Bollinger");
      return INIT_FAILED;
   }

   if(!ChartIndicatorAdd(0, 0, BB_Handle))
   {
      Print("Erro ao adicionar o indicador Bandas de Bollinger");
      return INIT_FAILED;
   }
     
   totalIndicadores += 1;
   indicadoresON[0]=1;    //Adiciona o numero 1 que é o ID do Bandas de Bollinger
   
   Print("BB adicionado ao Array.");
}


if(MxM_LigDesl)
{
   MM_CurtaHandle =  iMA(_Symbol, _Period, MxMPeriodoCurto, MxMShift, MxMTipo, MxMPreco);  
   MM_LongHandle  =  iMA(_Symbol, _Period, MxMPeriodoLongo, MxMShift, MxMTipo, MxMPreco);

   if(MM_CurtaHandle == INVALID_HANDLE || MM_LongHandle == INVALID_HANDLE)
   {
      Print("Erro na criação do handle Cruzamento de medias");
      return INIT_FAILED;
   }

   if(MxMPeriodoLongo <= MxMPeriodoCurto)
   {
      Print("Parâmetros de médias incorretos");
      return INIT_FAILED;
   }

   if(!ChartIndicatorAdd(0, 0, MM_CurtaHandle) || !ChartIndicatorAdd(0, 0, MM_LongHandle))
   {
      Print("Erro ao adicionar as Médias Moveis");
      return INIT_FAILED;
   }
     
   totalIndicadores += 1;
   indicadoresON[1]=2;    //Adiciona o numero 2 que é o ID da Media Movel
   
   Print("MM adicionado ao Array.");
}


if(IFR_LigDesl)
{
   IFR_Handle     =  iRSI(_Symbol, _Period, PeriodoIFR, PrecoIFR);
   
   if(IFR_Handle == INVALID_HANDLE)
   {
      Print("Erro na criação do handle IFR");
      return INIT_FAILED;
   }

   if(!ChartIndicatorAdd(0, 1, IFR_Handle))
   {
      Print("Erro ao adicionar o indicador IFR");
      return INIT_FAILED;
   }
     
   totalIndicadores += 1;
   indicadoresON[2]=3;    //Adiciona o numero 3 que é o ID do IFR
   
   Print("IFR adicionado ao Array.");
}

   Comment("Total de indicadores: ", totalIndicadores);


   return(INIT_SUCCEEDED);
  }


Alguem pode me ajudar por favor? 

 
ramaziero:

Boa tarde pessoal.

Estou tentando criar um EA que tenha muitos indicadores a escolha do usuário. 
O problema é que não estou conseguindo dizer ao EA de forma dinamica quais sao os sinais que os indicadores que o usuario escolheu para poder comprar e vender. 

Vamos criar um exemplo aqui pra ficar melhor.....

Vamos supor que o EA tenha 5 indicadores, sendo eles: BB, MM, IFR, MACD e HILO.
O usuário pode escolher desde 1 indicador até os 5 ao mesmo tempo caso deseje.

Digamos que o user escolheu apenas 3, sendo: BB, MM e IFR. 

Logo eu preciso apenas capturar os sinais de BB, MM e IFR pensando na questão de performance. Se o user n escolheu MACD e HILO, logo não preciso passar por estes codigos rs. 

Até aqui eu consegui fazer numa boa.

Mas o meu maior problema esta sendo dizer ao EA, de forma dinâmica que ele precisa entrar em um trecho de código que o usuário escolheu apenas 3 indicadores, dizer quais sao estes 3 indicadores, e ainda colocar pra validar se os 3 ao mesmo tempo retornaram Compra ou Venda. 

Alguém pode me ajudar?

Vou postar aqui:
O trecho de código aqui que faz a escolha dos sinais que o user escolheu.

Um exemplo de como são meus sinais.

E um exemplo de como inicializo meus indicadores. 


Alguem pode me ajudar por favor? 

Você pretende comercializar isso?
 
Flavio Jarabeck:
Você pretende comercializar isso?
JAMAIS.
Meu time è o do open source e livre distribuiçao
 
ramaziero:
JAMAIS.
Meu time è o do open source e livre distribuiçao

Ah, OK!

Se fosse comercializar iria te dizer que já existem 2 empresas que fazem isso há séculos... e cobram uma bagatela de mensalidade   

;)

 
Não quero comercializar e nem comprar assinatura de ninguem. 
Eu so preciso de ajuda aqui. 

Vc ou alguem consegue me ajudar?