Criar um EA a partir de um Indicador já existente

Termos de Referência

Gostaria de criar um EA baseado no indicador listado abaixo de tal forma que a entrada na compra seja realizada quando a média ficar verde e a entrada na venda seja realizada quando a média ficar vermelha.

Em estando comprado ou vendido, quero que o EA inverta a posição caso a média sinalize venda, se eu estiver comprado, ou sinalize compra, se eu estiver vendido.

Preciso também que o EA permita entrada de compra e/ou venda com opção de se colocar automaticamente Stop Loss e Stop Gain.

Preciso também da opção de se delimitar diariamente a hora e minuto de início e a hora e minuto final de operação diária do EA.

Segue abaixo o código do indicador:

//+------------------------------------------------------------------+
//|                                                    tabajara2.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Patrick Corrêa Muniz"
#property version   "1.01"
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_plots   2
//--- plot media
#property indicator_label1  "media"
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_color1  clrRed,clrForestGreen,clrYellow,C'0,0,0',C'0,0,0',C'0,0,0',C'0,0,0',C'0,0,0'
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- plot candles
#property indicator_label2  "candles"
#property indicator_type2   DRAW_COLOR_CANDLES
#property indicator_color2  clrRed,clrForestGreen,clrBlack,clrGray,C'0,0,0',C'0,0,0',C'0,0,0',C'0,0,0'
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//--- indicator buffers
double         mediaBuffer[];
double         mediaColors[];
double         candlesOpenBuffer[];
double         candlesHighBuffer[];
double         candlesLowBuffer[];
double         candlesCloseBuffer[];
double         candlesColors[];
double         mediavalue[];
int            mediaHandle;
input int      PeriodoMedia=20;
input ENUM_MA_METHOD      TipoMedia=MODE_SMA;
//+------------------------------------------------------------------+
//|                      |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,mediaBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,mediaColors,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2,candlesOpenBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,candlesHighBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,candlesLowBuffer,INDICATOR_DATA);
   SetIndexBuffer(5,candlesCloseBuffer,INDICATOR_DATA);
   SetIndexBuffer(6,candlesColors,INDICATOR_COLOR_INDEX);
   mediaHandle=iMA(_Symbol,_Period,PeriodoMedia,0,TipoMedia,PRICE_CLOSE);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                               |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int start;
   if(prev_calculated==0)
     {
      start=1;
        }else{
      start=prev_calculated-1;
     }

   CopyBuffer(mediaHandle,0,0,rates_total,mediaBuffer);
   CopyBuffer(mediaHandle,0,0,rates_total,mediavalue);
   for(int i=start; i<rates_total; i++)
     {
      DefineColorMedia(mediavalue,i,close);
      DefineColorCandle(mediavalue,i,close,open,high,low);
     }
   return(rates_total);

  }
//+------------------------------------------------------------------+
//|Colors
//| 0 = Red
//| 1 = Green
//| 2 = yellow                                                                  |
//+------------------------------------------------------------------+
void DefineColorMedia(double &mediavalue[],int index,const double &close[])
  {
   bool fechamentoMaiorQueMediaeMediaAscendente=(close[index]>mediavalue[index] && mediavalue[index]>mediavalue[index-1]);
   bool fechamentoMenorQueMediaeMediaDescendente=(close[index]<mediavalue[index] && mediavalue[index]<mediavalue[index-1]);
   if(fechamentoMaiorQueMediaeMediaAscendente)
     {
      mediaColors[index]=1;
        }else if(fechamentoMenorQueMediaeMediaDescendente) {
      mediaColors[index]=0;
        }else{
      mediaColors[index]=2;
     }
  }
//+------------------------------------------------------------------+
//|Colors
//|0 = Red
//|1 = Green
//|2 = Black
//|3 = Gray                                                                 |
//+------------------------------------------------------------------+
void DefineColorCandle(double &mediavalue[],int index,const double &close[],const double &open[],const double &high[],const double &low[])
  {
   DefineBuffersCandle(index,close,open,high,low);
   bool candleDeForcaMediaAscendente=close[index]>close[index-1] && close[index]>mediavalue[index] && mediavalue[index]>mediavalue[index-1];
   bool candleDeCorrecaoMediaAscendente=close[index]<close[index-1] && close[index]>mediavalue[index] && mediavalue[index]>mediavalue[index-1];
   bool candleDeForcaMediaDescendente=close[index]<close[index-1] && close[index]<mediavalue[index] && mediavalue[index]<mediavalue[index-1];
   bool candleDeCorrecaoMediaDescendente=close[index]>close[index-1] && close[index]<mediavalue[index] && mediavalue[index]<mediavalue[index-1];
   if(candleDeForcaMediaAscendente)
     {
      candlesColors[index]=1;
        }else if(candleDeCorrecaoMediaAscendente){
      candlesColors[index]=2;
        }else if(candleDeForcaMediaDescendente){
      candlesColors[index]=0;
        }else if(candleDeCorrecaoMediaDescendente){
      candlesColors[index]=3;
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DefineBuffersCandle(int index,const double &close[],const double &open[],const double &high[],const double &low[])
  {
   candlesOpenBuffer[index] = open[index];
   candlesHighBuffer[index] = high[index];
   candlesLowBuffer[index]=low[index];
   candlesCloseBuffer[index]=close[index];
  }
//+------------------------------------------------------------------+

Respondido

1
Desenvolvedor 1
Classificação
(46)
Projetos
80
13%
Arbitragem
11
0% / 91%
Expirado
51
64%
Livre
2
Desenvolvedor 2
Classificação
(2586)
Projetos
3261
67%
Arbitragem
77
48% / 14%
Expirado
341
10%
Livre
Publicou: 1 código
3
Desenvolvedor 3
Classificação
(379)
Projetos
523
39%
Arbitragem
29
59% / 3%
Expirado
55
11%
Trabalhando
Publicou: 11 códigos
4
Desenvolvedor 4
Classificação
(571)
Projetos
942
47%
Arbitragem
303
59% / 25%
Expirado
125
13%
Livre
5
Desenvolvedor 5
Classificação
(186)
Projetos
205
26%
Arbitragem
12
25% / 58%
Expirado
39
19%
Livre
6
Desenvolvedor 6
Classificação
(2235)
Projetos
2820
62%
Arbitragem
118
46% / 25%
Expirado
427
15%
Trabalhando
7
Desenvolvedor 7
Classificação
(204)
Projetos
330
35%
Arbitragem
64
13% / 56%
Expirado
86
26%
Livre
8
Desenvolvedor 8
Classificação
(8)
Projetos
16
0%
Arbitragem
9
0% / 89%
Expirado
8
50%
Livre
9
Desenvolvedor 9
Classificação
Projetos
0
0%
Arbitragem
0
Expirado
0
Livre
Pedidos semelhantes
Smart Retest and Reversal EA SRR EA O EA funcionará em todos os ativos no time frame desejado pelo usuário. INDICADORES 1) O EA irá utilizar os seguintes indicadores para operar, todos gratuitos: 1.1) "Area of interest MT5" 1.2) "Price Retest MT5" 1.3) "Price Reversal Predictor" 1.4) "Easy Buy Sell Signal" GATILHOS 2) Uma vez colocados os indicadores no gráfico, na configuração padrão, o EA poderá fazer dois tipos de
JB-1 30 - 50 USD
Olá! gostaria de um orçamento para desenvolver um robô para mercado forex com: regra de coloração; Cruzamento de duas médias moveis tillson; confirmação no macd; com quantidade de operações diarias que eu possa controlar o horário para operar
I need a programmer who can take a ready-made and free BOT that I downloaded for MT5 and do the same and make it work on any currency pair, especially the Brazilian index. -- Preciso de um programador que pegue um BOT já pronto e grátis que baixei para MT5 e faça igual e faça funcionar em qualquer par de moedas, principalmente no índice brasileiro
Procuro programador para fazer ajustes em EA que já tenho, basicamente seriam ajustes no contador de mantingale que não está funcionando direito e em algumas entradas que entram antes do fechamento do candle
Olá, comunidade! Estou procurando um programador experiente em MQL5 para me ajudar a desenvolver um robô do zero , baseado no comportamento de um expert advisor (EA) que utilizo atualmente. Tenho acesso a dados de execução do robô em backtest, bem como diversos exemplos do seu funcionamento na prática (ordens abertas, horários, SL/TP, tipos de entrada, etc.). A ideia é reproduzir a lógica e comportamento observados
Eu já utilizo um robô na plataforma BA. É um indicador com automação baseado no Canal de Keltner, onde o box quando vai pra fora do canal ele indica que absorveu fora, ele aguarda o box que fecha para dentro do canal e indica que absorveu dentro, caso o próximo box feche para dentro ele confirma a compra ou venda. Além disso, preciso de opção de apenas comprar ou apenas vender; e outra com as duas opções de compra e
Estratégia com código aberto : • Sinal de negociação média móvel de 200: Após o último preço de negociação(se disponível) ficar igual(será necessário verificar último last price para verificar sentido) ou ficar maior(sinal de compra) ou ficar menor(sinal de venda) que a média móvel de 200 abrir uma ordem a mercado no sentido do sinal. Deverá ser realizado no máximo mais 3 entradas caso tenha atingido o Take Profit 1

Informações sobre o projeto

Orçamento
30 - 200 USD
Desenvolvedor
27 - 180 USD
Prazo
de 1 para 30 dias