Condição if dentro de um input

 

Olá a todos!

Eu gostaria de saber se é possível e se sim qual o caminho pra receber uma condição dentro de um input e jogar isso pra um if, como por exemplo, pra uma condição de abertura de posição.

Sabendo que não é possível jogar essa string diretamente dentro do if(sim, eu tentei kk) pois a string não tem nenhuma condição booleana, como eu consigo tratar isso. Receber por exemplo um comando "candle[1].close > candle[1].high" em um input e trabalhar com isso em if.

 
HENRIQUE ARAUJO DOS SANTOS:

Olá a todos!

Eu gostaria de saber se é possível e se sim qual o caminho pra receber uma condição dentro de um input e jogar isso pra um if, como por exemplo, pra uma condição de abertura de posição.

Sabendo que não é possível jogar essa string diretamente dentro do if(sim, eu tentei kk) pois a string não tem nenhuma condição booleana, como eu consigo tratar isso. Receber por exemplo um comando "candle[1].close > candle[1].high" em um input e trabalhar com isso em if.

Olá Henrique


Não sei se entendi muito bem a sua dúvida (receber uma condição dentro de um input). Todas as variáveis input são estáticas, uma vez que o EA inicia, não podem sofrer modificação. Se não for isso, cole aqui seu código para que eu possa tentar te ajudar melhor :)

 
Eduardo Fernando Teixeira:

Olá Henrique


Não sei se entendi muito bem a sua dúvida (receber uma condição dentro de um input). Todas as variáveis input são estáticas, uma vez que o EA inicia, não podem sofrer modificação. Se não for isso, cole aqui seu código para que eu possa tentar te ajudar melhor :)

Olá Eduardo!


#property copyright "#"
#property link      "#"
#property version   "1.00"
#include <Trade\Trade.mqh>
CTrade trade;

input string TradeRulesBuy = "candle[1].close > candle[2].high";
input string TradeRulesSell = "candle[1].close < candle[2].low";


MqlRates candles[];
MqlTick tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArraySetAsSeries(candles,true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   CopyRates(_Symbol,PERIOD_CURRENT,0,5,candles);
   SymbolInfoTick(_Symbol,tick);
   
   if(TradeRulesBuy){
   trade.Buy(1,_Symbol,tick.ask,tick.ask-300,tick.ask+250,NULL);
   }
   
  }
//+------------------------------------------------------------------+


Então, o que eu tentei explicar acima, foi isso, pegar o input TradeRulesBuy(regras de entrada  de compra) ou TradeRulesSell(regras de entrada de venda) e utilizar isso como condição de entrada, mas não tem como utilizar string dentro de if, imagino que deve ter algum tipo de tratamento dessa string que ainda não tenho conhecimento de como fazer, ou até mesmo outra forma de fazer isso.

 

Este seu input é desnecessário, você tem que usar a condição dentro do IF diretamente:


if(candles[1].close > candles[2].high)
   trade.Buy(1,_Symbol,tick.ask,tick.ask-300,tick.ask+250,NULL);


if(candles[1].close < candles[2].low)
   trade.Sell.....


Você usa candle 1 pois quer ver o resultado do último fechado, certo? Se você quer avaliar o valor do candle atual ainda aberto tem que usar o elemento 0.

 
Eduardo Fernando Teixeira:

Este seu input é desnecessário, você tem que usar a condição dentro do IF diretamente:



Você usa candle 1 pois quer ver o resultado do último fechado, certo? Se você quer avaliar o valor do candle atual ainda aberto tem que usar o elemento 0.

Sim Eduardo.  Fazer isso da forma que você citou é simples. Mas o que estou tentando fazer é justamente dar a possibilidade do usuário definir a condição por input, a dificuldade e justamente pegar a condição via input e usar isso como condição. 

 
HENRIQUE ARAUJO DOS SANTOS:

Sim Eduardo.  Fazer isso da forma que você citou é simples. Mas o que estou tentando fazer é justamente dar a possibilidade do usuário definir a condição por input, a dificuldade e justamente pegar a condição via input e usar isso como condição. 

Inputs são diretivas de compilação.

o que você quer fazer se chama Marco-Expansão. o MQL5 não suporta isso.

O que você pode fazer é criar seu próprio Parser. Você pode sub-dividir o seu IF em várias partes, cada uma com seu INPUT.

Ex:

input #1: lista com a variavel a ser checada

input #2; Operador

input #3: campo livre para o usuario digitar o valor que quer...

depois você traduz/trata o que espera dentro do indicador/expert...

;)

 
Descreva exatamente o tipo de regras que você quer que o usuário possa escrever ou selecionar. Vamos ver se conseguimos chegar numa solução :)
 
Flavio Jarabeck:

Inputs são diretivas de compilação.

o que você quer fazer se chama Marco-Expansão. o MQL5 não suporta isso.

O que você pode fazer é criar seu próprio Parser. Você pode sub-dividir o seu IF em várias partes, cada uma com seu INPUT.

Obrigado Flavio, já deu um caminho rss..


Eduardo Fernando Teixeira:
Descreva exatamente o tipo de regras que você quer que o usuário possa escrever ou selecionar. Vamos ver se conseguimos chegar numa solução :)

É trabalhar com os candles mesmo, o próprio usuário escrever toda a formula, exemplo: 

candle[1].low > candle[2].low && candle[1].high > candle[1].high

...

candle[1].high > candle[2].high && candle[1].close < candle[1].open

...

candle[1].high - candle[1].low < candle[1].low
 
HENRIQUE ARAUJO #:

Obrigado Flavio, já deu um caminho rss..


É trabalhar com os candles mesmo, o próprio usuário escrever toda a formula, exemplo: 

Tem como sim colocar neste modo que você quer editável via imput pois no EA do Vilela One tem essa opção no price action onde o usuário que coloca sua condição que ele quiser EX: C[1] < O[0] e ate mesmo volume e outros parâmetros você consegue escrever nessa mesma condição....Queria muito também no meu EA mas parece ser bem complexo...