Discussão do artigo "Implementando uma Estratégia de Negociação com Bandas de Bollinger usando MQL5: Um Guia Passo a Passo"
O EA tem vários erros de compilação.
Esse código tem muitos erros. Corrigi os erros e estou publicando o código atualizado aqui. De nada!
//+------------------------------------------------------------------+ //|BollingerBands.mq5 //|Copyright 2024, MetaQuotes Ltd. | //| https://www.mql5.com //+------------------------------------------------------------------+ #property copyright "Copyright 2024, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #include <Trade\Trade.mqh> // Incluir a biblioteca comercial CTrade trade; // Criar uma instância da classe CTrade // Parâmetros de entrada para a estratégia Bollinger Bands input int BandPeriod = 30; input double BandDeviation = 2.0; input double LotSize = 0.2; input int Slippage = 3; input double StopLoss = 70; input double TakeProfit = 140; int Bb_Handle; // Alça para o indicador Bollinger Bands //+------------------------------------------------------------------+ //| Função de inicialização especializada| //+------------------------------------------------------------------+ int OnInit() { // Criar a alça do indicador Bollinger Bands Bb_Handle = iBands(_Symbol, PERIOD_CURRENT, BandPeriod, 0, BandDeviation, PRICE_CLOSE); if(Bb_Handle == INVALID_HANDLE) { Print("Error creating Bollinger Bands indicator"); return(INIT_FAILED); } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Função de desinicialização de especialista| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // Liberar a alça do indicador Bollinger Bands IndicatorRelease(Bb_Handle); } //+------------------------------------------------------------------+ //| Função de tique de especialista| //+------------------------------------------------------------------+ void OnTick() { double upperBand[], lowerBand[], middleBand[]; // Copiar os valores do Bollinger Bands em matrizes if(CopyBuffer(Bb_Handle, 0, 0, 1, upperBand) <= 0 || CopyBuffer(Bb_Handle, 1, 0, 1, middleBand) <= 0 || CopyBuffer(Bb_Handle, 2, 0, 1, lowerBand) <= 0) { Print("Error copying band values"); return; } double upper = upperBand[0]; double lower = lowerBand[0]; double middle = middleBand[0]; double price = SymbolInfoDouble(_Symbol, SYMBOL_LAST); double Ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); double Bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); // Sinal de compra: o preço está abaixo da banda inferior e não há posições abertas if(price < lower && !IsPositionOpen(_Symbol)) { double sl, tp; CalculateSLTP(sl, tp, Ask, true); if(trade.Buy(LotSize, _Symbol, Ask, sl, tp, "Buy Order")) Print("Buy order opened at price: ", Ask); else Print("Error opening BUY order:", trade.ResultRetcode()); } // Sinal de venda: o preço está acima da banda superior e não há posições abertas else if(price > upper && !IsPositionOpen(_Symbol)) { double sl, tp; CalculateSLTP(sl, tp, Bid, false); if(trade.Sell(LotSize, _Symbol, Bid, sl, tp, "Sell Order")) Print("Sell order opened at price:", Bid); else Print("Error opening SELL order:", trade.ResultRetcode()); } } //+------------------------------------------------------------------+ //| Verificar se há uma posição aberta para um símbolo //+------------------------------------------------------------------+ bool IsPositionOpen(string symbol) { for(int i = 0; i < PositionsTotal(); i++) { if(PositionGetSymbol(i) == symbol) return true; } return false; } //+------------------------------------------------------------------+ //| Fechar todas as posições de um símbolo| //+------------------------------------------------------------------+ void CloseAllPositions(string symbol) { for(int i = PositionsTotal() - 1; i >= 0; i--) { if(PositionGetSymbol(i) == symbol) { ulong ticket = PositionGetTicket(i); if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) trade.PositionClose(ticket, Slippage); else if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) trade.PositionClose(ticket, Slippage); // Aguarde o processamento do pedido antes de continuar Sleep(1000); } } } //+------------------------------------------------------------------+ //| Calcular os níveis de Stop Loss e Take Profit //+------------------------------------------------------------------+ void CalculateSLTP(double &sl, double &tp, double price, bool isBuy) { if(isBuy) { sl = price - StopLoss * _Point; tp = price + TakeProfit * _Point; } else { sl = price + StopLoss * _Point; tp = price - TakeProfit * _Point; } }
O índice do buffer do copybuffer está incorreto para a banda superior e média; deve ser usado UPPER_BAND, BASE_LINE, LOWER_BAND para iBands.
O artigo é excelente. Agradeço ao autor. Vou experimentá-lo em minhas negociações com spreads fixos.
É exatamente isso que eu faço....
Estude o código e aplique-o à sua estratégia específica para obter os melhores resultados.
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Novo artigo Implementando uma Estratégia de Negociação com Bandas de Bollinger usando MQL5: Um Guia Passo a Passo foi publicado:
Os traders podem criar um Expert Advisor (EA) que usa as Bandas de Bollinger para executar ordens de compra e venda com base em condições específicas do mercado, seguindo este tutorial passo a passo. Tópicos importantes, incluindo a configuração do indicador Bandas de Bollinger, controle das posições de negociação e o gerenciamento da execução de ordens e erros, serão abordados. Independentemente do seu nível de experiência com desenvolvimento ou familiaridade com a negociação algorítmica, este tutorial fornecerá uma base sólida para os traders desenvolverem e aprimorarem seus métodos de negociação.
Esta jornada abordará os seguintes tópicos:
Resultados:
De 2016 a 2019, a estratégia executou 1425 negociações, 857 fechadas com lucro, o que representa 20,28% a mais do que as negociações com perdas.
Autor: Kikkih25