Verificar regra a partir de uma string

 

Olá pessoal!

Tenho o seguinte código que verifica o sinal:

ENUM_SINAL CheckSinal()
 {
   double media_buffer[];
   CopyBuffer(handle_media, 0, 0, 2, media_buffer);
   ArraySetAsSeries(media_buffer, true);
   
   if (media_buffer[0] > media_buffer[1])
      return COMPRA;
   
   if (media_buffer[0] < media_buffer[1])
      return VENDA;
   
   return NULO;
 }

O código acima funciona, mas gostaria montar a regra através de dois campos input, para não ter que ficar alterando e recompilando o código.

Alguém pode me dar uma luz?

 

Se foi você quem inventou esse código, não vejo por quê você não consiga traduzir isso para INPUTs...

Onde está o problema??

 
Flavio Jarabeck:

Se foi você quem inventou esse código, não vejo por quê você não consiga traduzir isso para INPUTs...

Onde está o problema??

Bom dia Flávio, esse é só um código para exemplificar o problema que me deparei. O código é parte do setup 9.1, do Larry Williams, demonstrado pela DevTrader.

Não estou aqui pedindo para ninguém desenvolver nada, muito menos de graça, só pedindo uma ajuda, pois havia muitos anos que não programava e voltei agora com o mql5.

Minha Ea está com quase 3000 linhas de código e as dúvidas que tive até agora, consegui sanar com o que já tem no fórum, artigos e codebase.

Opero price action e essa solução vai facilitar muito minha vida, além de permitir uma otimização.

Mas enfim, voltando ao problema, se puder me indicar uma direção, vai ser de muita valia.

Seguem meus inputs (o conteúdo das variáveis são só um exemplo):

input string EQCOMPRA      = "PRECO[0].close < PRECO[0].open";  // Compra
input string EQVENDA       = "PRECO[0].close > PRECO[0].open";  // Venda

Abaixo onde verifico o sinal (Utilizo várias outras regras também, mas vou colocar aqui somente o que é pertinente ao assunto):

ENUM_SINAL MinhaEA::CheckSinal()
  {

   MqlRates PRECO[];
   ArraySetAsSeries(PRECO, true);
   CopyRates(_Symbol, PERIOD_CURRENT, 0, 10, PRECO);

   bool Compra, Venda;
   Compra = PRECO[0].close < PRECO[0].open;
   Venda  = PRECO[0].close > PRECO[0].open;
   
   if(Compra)
      return COMPRA;

   if(Venda)
      return VENDA;

   return NULO;
  }

O código acima funciona perfeitamente, mas como disse, não consegui enxergar uma maneira de jogar o valor dos inputs para o if, pois não são booleanos e não há conversão de string para bool.

Mais uma vez, não quero código pronto, só um norte.

Obrigado. 

Razão: