Olá, Marcel, poste esse trecho do seu código (utilizando o botão Código, como mostrado abaixo) onde você verifica a condição do IFR9 para abrir posição, que a gente mostra como alterar...
Olá pessoal!
Gostaria de saber se é possível habilitar/desabilitar uma funcionalidade de um EA através de um bool (true/false), por exemplo, como input. Por exemplo, eu fiz um EA que entra comprado quando o preço toca a EMA9 e a EMA9 está acima da EMA20 no timeframe de 5 minutos , e também pode entrar comprado se o IFR9 está sobrevendido abaixo de 20. Gostaria de desabilitar a parte do IFR9 sem ter que entrar no editor e comentar as linhas que fazem parte do código referente a essa funcionalidade. Seria possível?
Sim, é possivel. Voce vai fazer algo assim (fora das funções bem em cima):
input bool InpOperacaoTipo1=true; // Toque em EMA9 permitido? input bool InpOperacaoTipo2=true; // IFR9 sobrevendido permitido?
Com isso, no seu codigo tu pode usar essas variaveis InpOperacaoTipo1 e InpOperacaoTipo2 em trechos de codigo especificos para permitir ou não as operações por essas ou outras analises.
int Condicao_operacao() { double MediaX_dol[]; ArraySetAsSeries(MediaX_dol, true); CopyBuffer(handlemediax_dol, 0, 0, 25, MediaX_dol); double MediaX_engolfo[]; ArraySetAsSeries(MediaX_engolfo, true); CopyBuffer(handlemediax_engolfo, 0, 0, 101, MediaX_engolfo); double MediaX_estocastico[]; ArraySetAsSeries(MediaX_estocastico, true); CopyBuffer(handlemediax_estocastico, 0, 0, 101, MediaX_estocastico); double Stoch_Array[]; ArraySetAsSeries(Stoch_Array, true); CopyBuffer(handlestoch, 0, 0, 101, Stoch_Array); MqlRates rates[]; ArraySetAsSeries(rates, true); CopyRates(_Symbol, _Period, 0, 7, rates); // --------------------------------------------------------------------- // Compra Dolar if((rates[1].high > MediaX_dol[1]) && // maxima > média (rates[1].low < MediaX_dol[1]) && // minima < media (rates[1].close >= rates[1].open) && // fechamento >= abertura (rates[1].close > MediaX_dol[1]) && // fechamento > media ((rates[1].open - rates[1].low) > (rates[1].high - rates[1].open)) && // (abertura - minima) > (maxima - abertura) ((rates[1].high - rates[1].low) > candle_size_dol) && // (maxima - minima) > tamanho do candle otimizado (rates[1].low < rates[2].low) && // minima < minima anterior (rates[2].high > rates[1].high) && //maxima anterior > maxima NovaBarra() && HorarioEntrada_Dol()) return 1; // Venda Dolar if((rates[1].high > MediaX_dol[1]) && // maxima > media (rates[1].low < MediaX_dol[1]) && // minima < media (rates[1].close <= rates[1].open) && // fechamento <= abertura (rates[1].close < MediaX_dol[1]) && // fechamento < media ((rates[1].high - rates[1].open) > (rates[1].open - rates[1].low)) && // (maxima - abertura) > (abertura - minima) ((rates[1].high - rates[1].low) > candle_size_dol) && // (maxima - minima) tamanho do candle otimizado (rates[1].high > rates[2].high) && // maxima > maxima anterior (rates[2].low < rates[1].low) && // minima anterior < minima NovaBarra() && HorarioEntrada_Dol()) return -1; // --------------------------------------------------------------------- // Compra Estocástico if ((Stoch_Array[1] < (100 - stoch_alto)) && ((rates[1].high - rates[1].close) <= pavil_gatilho) && (rates[1].high >= rates[2].high) && (MediaX_estocastico[1] - MediaX_estocastico[n_candles_estocastico] > inclinacao_media_esto) && (rates[1].close - rates[1].open <= candle_size_max) && (rates[1].close - rates[1].open >= candle_size_min) && NovaBarra() && HorarioEntrada_Estocastico() //&& HorarioBloqueioEstocastico() ) return 2; // Venda Estocástico if ((Stoch_Array[1] > stoch_alto) && ((rates[1].close - rates[1].low) <= pavil_gatilho) && (rates[1].low <= rates[2].low) && (MediaX_estocastico[n_candles_estocastico] - MediaX_estocastico[1] > inclinacao_media_esto) && (rates[1].open - rates[1].close <= candle_size_max) && (rates[1].open - rates[1].close >= candle_size_min) && NovaBarra() && HorarioEntrada_Estocastico() //&& HorarioBloqueioEstocastico() ) return -2; // --------------------------------------------------------------------- // Compra Engolfo if ((MediaX_engolfo[1] - MediaX_engolfo[n_candles_engolfo] > inclinacao_media_engolfo) && // inclinação da média (rates[1].close - rates[2].open >= rates[4].open - rates[3].close) && // corpo [1+2] > corpo [3+4] (rates[1].high - rates[1].close < rates[1].close - rates[2].open) && // pavil candle[1] < candle[1+2] (rates[2].low >= rates[3].low) && // minina[2] >= minima[3] (rates[4].low >= rates[3].low) && // minima[4] >= minima[3] (rates[3].open - rates[3].close > 0) && // candle[3] negativo (rates[4].open - rates[4].close > 0) && // candle[4] negativo (rates[4].open - rates[3].close >= candle34_min) && // candle[3+4] máx. (rates[4].open - rates[3].close >= candle34_min) && // candle[3+4] mín. NovaBarra() && HorarioEntrada_Engolfo() && HorarioBloqueioEngolfo() ) return 3; // Venda Engolfo if ((MediaX_engolfo[n_candles_engolfo] - MediaX_engolfo[1] > inclinacao_media_engolfo) && (rates[2].open - rates[1].close >= rates[3].close - rates[4].open) && (rates[1].close - rates[1].low < rates[2].open - rates[1].close) && (rates[2].high <= rates[3].low) && (rates[4].high <= rates[3].high) && (rates[3].open - rates[3].close < 0) && (rates[4].open - rates[4].close < 0) && (rates[3].close - rates[4].open >= candle34_min) && (rates[3].close - rates[4].open >= candle34_max) && NovaBarra() && HorarioEntrada_Engolfo() && HorarioBloqueioEngolfo() ) return -3; // --------------------------------------------------------------------- return 0; }
Como pode ser observado eu utilizo umas verificação de condição no OnTick() baseado no retorno de um int onde esse retorno vai indicar compra ou venda. Não sei se nesse caso eu consigo implementar algo para desabilitar as funcionalidades conforme eu gostaria.
Ok, o Ricardo já descreveu aqui exatamente como seria... Agora eu vou apenas aplicar a ideia diretamente com o seu código...
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //--- ESCOPO GLOBAL input bool InpCondDolar = true; // Verificar Condição Dólar input bool InpCondEstoc = true; // Verificar Condição Estocástico input bool InpCondEngol = true; // Verificar Condição Engolfo // . . . //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int Condicao_operacao() { double MediaX_dol[]; ArraySetAsSeries(MediaX_dol, true); CopyBuffer(handlemediax_dol, 0, 0, 25, MediaX_dol); double MediaX_engolfo[]; ArraySetAsSeries(MediaX_engolfo, true); CopyBuffer(handlemediax_engolfo, 0, 0, 101, MediaX_engolfo); double MediaX_estocastico[]; ArraySetAsSeries(MediaX_estocastico, true); CopyBuffer(handlemediax_estocastico, 0, 0, 101, MediaX_estocastico); double Stoch_Array[]; ArraySetAsSeries(Stoch_Array, true); CopyBuffer(handlestoch, 0, 0, 101, Stoch_Array); MqlRates rates[]; ArraySetAsSeries(rates, true); CopyRates(_Symbol, _Period, 0, 7, rates); // --------------------------------------------------------------------- if(InpCondDolar) { // Compra Dolar if((rates[1].high > MediaX_dol[1]) && // maxima > média (rates[1].low < MediaX_dol[1]) && // minima < media (rates[1].close >= rates[1].open) && // fechamento >= abertura (rates[1].close > MediaX_dol[1]) && // fechamento > media ((rates[1].open - rates[1].low) > (rates[1].high - rates[1].open)) && // (abertura - minima) > (maxima - abertura) ((rates[1].high - rates[1].low) > candle_size_dol) && // (maxima - minima) > tamanho do candle otimizado (rates[1].low < rates[2].low) && // minima < minima anterior (rates[2].high > rates[1].high) && //maxima anterior > maxima NovaBarra() && HorarioEntrada_Dol()) return 1; // Venda Dolar if((rates[1].high > MediaX_dol[1]) && // maxima > media (rates[1].low < MediaX_dol[1]) && // minima < media (rates[1].close <= rates[1].open) && // fechamento <= abertura (rates[1].close < MediaX_dol[1]) && // fechamento < media ((rates[1].high - rates[1].open) > (rates[1].open - rates[1].low)) && // (maxima - abertura) > (abertura - minima) ((rates[1].high - rates[1].low) > candle_size_dol) && // (maxima - minima) tamanho do candle otimizado (rates[1].high > rates[2].high) && // maxima > maxima anterior (rates[2].low < rates[1].low) && // minima anterior < minima NovaBarra() && HorarioEntrada_Dol()) return -1; } // --------------------------------------------------------------------- if(InpCondEstoc) { // Compra Estocástico if((Stoch_Array[1] < (100 - stoch_alto)) && ((rates[1].high - rates[1].close) <= pavil_gatilho) && (rates[1].high >= rates[2].high) && (MediaX_estocastico[1] - MediaX_estocastico[n_candles_estocastico] > inclinacao_media_esto) && (rates[1].close - rates[1].open <= candle_size_max) && (rates[1].close - rates[1].open >= candle_size_min) && NovaBarra() && HorarioEntrada_Estocastico() /*&& HorarioBloqueioEstocastico()*/) return 2; // Venda Estocástico if((Stoch_Array[1] > stoch_alto) && ((rates[1].close - rates[1].low) <= pavil_gatilho) && (rates[1].low <= rates[2].low) && (MediaX_estocastico[n_candles_estocastico] - MediaX_estocastico[1] > inclinacao_media_esto) && (rates[1].open - rates[1].close <= candle_size_max) && (rates[1].open - rates[1].close >= candle_size_min) && NovaBarra() && HorarioEntrada_Estocastico() /*&& HorarioBloqueioEstocastico()*/) return -2; } // --------------------------------------------------------------------- if(InpCondEngol) { // Compra Engolfo if((MediaX_engolfo[1] - MediaX_engolfo[n_candles_engolfo] > inclinacao_media_engolfo) && // inclinação da média (rates[1].close - rates[2].open >= rates[4].open - rates[3].close) && // corpo [1+2] > corpo [3+4] (rates[1].high - rates[1].close < rates[1].close - rates[2].open) && // pavil candle[1] < candle[1+2] (rates[2].low >= rates[3].low) && // minina[2] >= minima[3] (rates[4].low >= rates[3].low) && // minima[4] >= minima[3] (rates[3].open - rates[3].close > 0) && // candle[3] negativo (rates[4].open - rates[4].close > 0) && // candle[4] negativo (rates[4].open - rates[3].close >= candle34_min) && // candle[3+4] máx. (rates[4].open - rates[3].close >= candle34_min) && // candle[3+4] mín. NovaBarra() && HorarioEntrada_Engolfo() && HorarioBloqueioEngolfo()) return 3; // Venda Engolfo if((MediaX_engolfo[n_candles_engolfo] - MediaX_engolfo[1] > inclinacao_media_engolfo) && (rates[2].open - rates[1].close >= rates[3].close - rates[4].open) && (rates[1].close - rates[1].low < rates[2].open - rates[1].close) && (rates[2].high <= rates[3].low) && (rates[4].high <= rates[3].high) && (rates[3].open - rates[3].close < 0) && (rates[4].open - rates[4].close < 0) && (rates[3].close - rates[4].open >= candle34_min) && (rates[3].close - rates[4].open >= candle34_max) && NovaBarra() && HorarioEntrada_Engolfo() && HorarioBloqueioEngolfo()) return -3; } // --------------------------------------------------------------------- return 0; } //+------------------------------------------------------------------+
Teria tambem a possibilidade de retirar isso do EA e colocar em outro separando cada coisa, dai caso precise no mesmo ativo basta abrir outra aba de grafico no mesmo ativo e colocar la. As vezes fica mais facil acompanhar assim via o navegador já que tu vendo o que tem rodando na conta aparecia com os nomes especificos e ativos logo abaixo da conta.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Gostaria de saber se é possível habilitar/desabilitar uma funcionalidade de um EA através de um bool (true/false), por exemplo, como input. Por exemplo, eu fiz um EA que entra comprado quando o preço toca a EMA9 e a EMA9 está acima da EMA20 no timeframe de 5 minutos , e também pode entrar comprado se o IFR9 está sobrevendido abaixo de 20. Gostaria de desabilitar a parte do IFR9 sem ter que entrar no editor e comentar as linhas que fazem parte do código referente a essa funcionalidade. Seria possível?