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
(2423)
Projetos
3046
66%
Arbitragem
77
48% / 14%
Expirado
340
11%
Livre
3
Desenvolvedor 3
Classificação
(362)
Projetos
496
39%
Arbitragem
27
56% / 4%
Expirado
53
11%
Livre
4
Desenvolvedor 4
Classificação
(563)
Projetos
932
47%
Arbitragem
301
59% / 25%
Expirado
124
13%
Trabalhando
5
Desenvolvedor 5
Classificação
(186)
Projetos
205
26%
Arbitragem
12
25% / 58%
Expirado
39
19%
Livre
6
Desenvolvedor 6
Classificação
(2080)
Projetos
2640
61%
Arbitragem
113
45% / 26%
Expirado
418
16%
Carregado
7
Desenvolvedor 7
Classificação
(196)
Projetos
318
35%
Arbitragem
64
13% / 56%
Expirado
82
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
Desejo criar um site, onde, extraia informações da B³, passe-as pelo algoritmo que eu desenvolvi e, apresente o resultado ao usuário. Ele deve possuir uma página de demonstração para não assinantes e uma página de análise para assinantes. Deve apresentar os 5 melhores e os 5 piores investimentos do mês corrente

Informações sobre o projeto

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