仕事が完了した
指定
Gostaria de um EA que tivesse os indicadores descritos abaixo, integrados no próprio EA, sem nenhuma integração do tipo iMA ou iCustom, ou seja, o próprio EA deve efetuar os cálculos e ter seus próprios buffers para armazenar informações dos cálculos e dos resultados, sem nenhuma integração com nenhum indicador.
O EA poderá ser desenvolvido no modelo descrito em https://www.mql5.com/pt/articles/4602, em que os cálculos que geram sinais são realizados dentro do próprio EA, sem utilização de nenhuma chamada a indicadores. Dessa forma, o EA não poderá ter nenhuma chamada do tipo iMA, iTEMA, iCustom, etc. O descrito no artigo 4602 é uma sugestão, pois trata-se de um modelo bem estruturado, porém o desenvolvedor poderá sugerir outra forma de organização do projeto desde que mantidos os indicadores dentro do próprio EA, inclusive seus buffers principais e de cálculo, sem utilização de iCustom, iMA, iTEMA, etc. Daqui pra frente, chamo esses indicadores calculados dentro do EA como “indicadores internalizados no EA”.
O EA deve ser construído com as seguintes características:
a) Deve ter o mínimo possível de cálculos e de informações de cada indicador internalizado no EA, conforme apontado mais adiante, para otimização do processamento, tanto em testes como em operação real;
b) Meu objetivo com este trabalho de freelance não é a geração de sinais para compra ou venda (eu mesmo vou criar posteriormente com base nos resultados dos indicadores internalizados no EA). Porém, para fins de teste, deve ser criado um sinal de compra para quando o buffer criado para T3_velocity tiver valor inferior a -0.2 e valor da barra 1 desse indicador internalizado ao EA for maior que o valor da barra 2. O sinal de venda deve ser gerado quando o buffer criado para T3_velocity tiver valor superior a 0.2 e valor da barra 1 desse indicador internalizado ao EA for menor que o valor da barra 2;
c) A abertura de posições de compra e venda deve ser feita com valores pré-definidos por ação, ou seja, se for uma compra, no pedido de abertura de posição será informado um valor máximo que se deseja pagar e se for uma venda, será informado um valor mínimo pelo qual a venda poderá ser efetuada. Se o preço máximo (compra) ou mínimo (venda) não for alcançado durante um número especificado (numa variável input) de barras, o pedido é cancelado. A definição do preço para abertura de posição deve ser em percentual do preço atual em Reais, como por exemplo, 100% do preço atual, ou outro exemplo, 98% do preço atual. Se o desenvolvedor tiver alguma sugestão melhor, também poderá ajudar nessa definição.
d) Criar opção de stop loss móvel, cujo valor oscila para cima (quando estiver comprado) ou para baixo (quando estiver vendido). O valor do stop loss deve ser pré-estabelecido numa variável input.
Abaixo estão relacionados os indicadores que serão os insumos para o desenvolvimento e os links onde podem ser baixados.
1 - Moving Average MA - https://www.mql5.com/pt/docs/indicators/ima
2 - Triple Exponential Moving Average - TEMA - https://www.mql5.com/pt/docs/indicators/itema
3 - Relative Strength Index - RSI - https://www.mql5.com/pt/code/47
4 - T3 Velocity - https://www.mql5.com/pt/code/16765
5 - Normalized Smothed MACD - https://www.mql5.com/en/code/22769
Para evitar informações e processamentos desnecessários, objetivando otimização na velocidade de resposta, os buffers e as variáveis de cada indicador internalizado no EA, incluindo as do tipo input, que devem ser incluídas, são as que seguem:
Moving Average:
Inputs:
int ma_period=14,
ENUM_MA_METHOD ma_method,
ENUM_APPLIED_PRICE applied_price);
Número de buffers: 1.
OBS:
a) Não é necessária a informação de Shift, que deverá ser considerada sempre zero.
b) Para evitar que o tamanho dos buffers cresça indefinidamente, as posições mais antigas podem ser excluídas, mantendo um tamanho máximo de 500. Esta quantidade deve ser configurável.
TEMA:
Inputs:
int ma_period=14,
ENUM_APPLIED_PRICE applied_price);
Número de buffers: 1.
OBS:
a) Não é necessária a informação de Shift, que deverá ser considerada sempre zero.
b) Para evitar que o tamanho do buffer cresça indefinidamente, as posições mais antigas podem ser excluídas, mantendo um tamanho máximo de 500. Esta quantidade deve ser configurável.
RSI:
Inputs:
int ma_period=14,
ENUM_APPLIED_PRICE applied_price=close;
Número de Buffers: 1.
OBS.: Para evitar que o tamanho do buffer cresça indefinidamente, as posições mais antigas podem ser excluídas, mantendo um tamanho máximo de 500. Esta quantidade deve ser configurável.
T3_Velocity:
Inputs:
T3Period=14,
T3Hot=1,
T3Original=false,
Price ENUM_APPLIED_PRICE applied_price=close);
Buffers:
Número de buffers: 1 buffer principal ( vel[] ) e mais dois buffers auxiliares para cálculos ( workT3[][12] e workT3Coeffs[][12] );
OBS:
a) Os buffers velh, colorBuffer e colorBufferh não são necessários, nem os seus cálculos.
b) Este indicador utiliza informações armazenadas relativos a barras anteriores, que vai se ajustando aos poucos à medida que aumenta o número de barras calculadas. Por conta disso, devem ser feitos cálculos iniciais de pelo menos 100 barras anteriores, e depois devem ser continuados os cálculos a cada nova barra. Só assim o valor desse indicador na primeira barra do dia em que se inicia as operações será correto, ou seja, igual ao valor que está no indicador real anexado ao gráfico para conferência.
c) Para evitar que o tamanho dos buffers cresça indefinidamente, as posições mais antigas podem ser excluídas, mantendo um tamanho máximo de 500. Esta quantidade deve ser configurável.
Normalized Smothed MACD:
Inputs:
inpFastPeriod // MACD fast period
inpSlowPeriod // MACD slow period
inpMacdSignal // Signal period
ENUM_APPLIED_PRICE inpPrice // Price
inpSmoothPeriod // Smoothing period
inpNormPeriod // Normalization period
Buffers:
Número de buffers: 2 com as informações principais ( val[] e sig[] ) mais 3 adicionais com informações para cálculo ( macd[], emaf[], emas[] ).
Os buffers que estão no indicador original, valc[] e sigc[], não são necessários.
OBS.:
a) Assim como o indicador descrito no item anterior, este indicador também utiliza informações armazenadas relativos a barras anteriores, que vai se ajustando aos poucos à medida que aumenta o número de barras calculadas. Por conta disso, devem ser feitos cálculos iniciais de pelo menos 100 barras anteriores, e depois devem ser continuados os cálculos a cada nova barra. Só assim o valor desse indicador na primeira barra do dia em que se inicia as operações será correto, ou seja, igual ao valor que está no indicador real anexado ao gráfico para conferência.
b) Para evitar que o tamanho dos buffers cresça indefinidamente, as posições mais antigas podem ser excluídas, mantendo um tamanho máximo de 500 (configurável).
Para conferência do produto final, o EA deverá ter funções Prints programados para apresentar os valores das três últimas barras em tempo de execução na B3 para cada tipo de indicador internalizado no EA, que poderão ser conferidas facilmente com indicadores reais anexados ao gráfico. Antes da entrega deve ser feito um teste on line para verificar se os valores calculados pelo EA estão iguais aos que são calculados pelos indicadores originais anexados ao gráfico.
O código fonte completo deve ser enviado para mim, pois ainda terei que trabalhar nele para incluir os sinais de compra e venda.
Abaixo estão relacionados os indicadores originais que deverão ser utilizados na construção dos indicadores a serem internalizados no EA, bem como os links de onde podem ser baixados.
1 - Moving Average iMA - https://www.mql5.com/pt/docs/indicators/ima
2 - Triple Exponential Moving Average - https://www.mql5.com/pt/docs/indicators/itema
3 - RSI - https://www.mql5.com/pt/code/47
4 - T3 Velocity - https://www.mql5.com/pt/code/16765
5 - Normalized Smothed MACD - https://www.mql5.com/en/code/22769