1. Tipos de enum (enumJnsSignal, enumOrderType)
- enumJnsSignal Essa enumeração define o tipo de sinal usado no EA. Há duas opções de sinal:
- `eTypeCrossMA`: Usa o sinal de Cross 2 MA(o cruzamento de duas médias móveis).
- `eTypeTrend`: Segue a tendência usando as médias móveis e o estocástico.
- enumOrderType Esse enum define o tipo de ordem:
- `eBuy`: Uma ordem de compra .
- `eSell`: Uma ordem de venda .
- `eNone`: Nenhuma ordem executada.
2. Parâmetros de entrada
- inMagicNumber Um número mágico exclusivo usado para distinguir ordens desse EA.
- inLotSize O tamanho inicial do lote para cada ordem.
- inMultiply O fator multiplicador usado na estratégia de tamanho de lote.
- inJarakLayer A distância de pip entre as posições de negociação na estratégia de grade/camada.
- inMAPeriodFast & inMAPeriodSlow Os períodos para médias móveis rápidas e lentas.
- inSTOKPeriod, inSTODPeriod, inSTOSlowing Parâmetros para o Oscilador Estocástico.
- inTakeProfit & inStopLoss As configurações para Take Profit e Stop Loss.
3. Struct dataTrades
- Essa estrutura é usada para armazenar dados relacionados a posições de negociação abertas, como o número total de posições (`ttlPos`), o preço médio das posições (`hargaTA`, `hargaTB`) e o volume total (`ttlLot`).
4. Função OnInit()
- Essa função lida com a inicialização do EA, incluindo a validação dos parâmetros de entrada (por exemplo, garantir que o período MA rápido seja menor do que o período MA lento) e a criação de identificadores para os indicadores MA e estocástico.
5. Função OnTick()
- A função principal é executada toda vez que o preço se move (tick).
- Ela chama a função para verificar se há um novo sinal com GetSignal() e, se for encontrado um sinal, manageTrading() é usada para executar negociações.
- Ele também chama setTPSL() para garantir que o Take Profit e o Stop Loss sejam sempre atualizados.
6. Função isNewCandle()
- Essa função detecta se um novo candle foi formado. Isso é importante porque o EA verifica se há sinais somente em formações de novos candles.
7. Função GetSignal()
- Essa função determina se existe um sinal de negociação válido com base na estratégia selecionada:
- Para eTypeCrossMA, o sinal é determinado pelo cruzamento das médias móveis rápida e lenta.
- Para eTypeTrend, o sinal usa a confirmação da MA e do estocástico.
8. Função manageTrading()
- Essa função gerencia a execução de negociações.
- Se um sinal válido for detectado, o EA abrirá uma posição com o tamanho do lote determinado por meio da função getLotSize().
- Uma estratégia de grade/camada também é aplicada para abrir posições adicionais com base na distância do preço (`inJarakLayer`).
9. Função updateDataTrades()
- Essa função atualiza os dados relacionados às posições de negociação em andamento, como o cálculo do preço médio e do volume total das posições abertas.
10. Função openTrade()
- Essa função abre uma nova posição de negociação com base no sinal gerado e no tamanho do lote calculado. Ela usa OrderSend() para executar a ordem.
11. Função setTPSL()
- Esta função define ou atualiza o Take Profit e o Stop Loss para cada posição aberta.
12. Função modifTPSL()
- Essa função modifica o Take Profit e o Stop Loss das posições existentes se os valores forem diferentes dos que foram definidos anteriormente.
13. Função validateLot()
- Esta função garante que o tamanho do lote utilizado esteja dentro do intervalo mínimo e máximo permitido, bem como em linha com a etapa mínima do lote (`gLotStep`).
14. Função getLotSize()
- Essa função calcula o tamanho do lote a ser usado com base no tamanho do lote inicial e no número de posições já abertas, levando em conta o fator multiplicador (`inMultiply`).
Esse código foi desenvolvido para capturar tendências de mercado e gerenciar posições de negociação automaticamente usando sinais técnicos de médias móveis e estocásticos.