Automação de Estrategias Meta Trader 5

 

Bom dia Pessoal tudo bem ? Estou tentando com a ajuda do ChatGPT para transferir algumas estrategias que tinha no Profit Pro para o MT5, porem a linguagem é muito diferente e não sou nem um pouco experiente com linguagem de progamação, queria conseguir fazer esse robo rodar enquanto vou terminando o curso de liguagem MQL5, vou mandar o codigo logo abaixo e o erro que esta dando, Deus abençoe cada um de nos. Segue o codigo (Pelo que o ChatGPT me passou esta em MQL4 mas quando ele tenta colocar no 5 da mais de 100 erros diferentes)

extern int PeriodoAnalisado = 2;

extern double Keltdesvio = 0.70;

extern int KeltPeriodo = 20;

extern int KelTipo = 0;



double KeltSup, KeltInf;



void OnTick()

{

    KeltSup = iKeltnerChannel(_Symbol, _Period, KeltPeriodo, Keltdesvio, KelTipo, MODE_UPPER, 0);

    KeltInf = iKeltnerChannel(_Symbol, _Period, KeltPeriodo, Keltdesvio, KelTipo, MODE_LOWER, 1);



    if (PositionSelect(_Symbol)) {

        if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) {

            OrderSend(_Symbol, OP_SELL, 1, NormalizeDouble(Highest(HIGH, 2), Digits), 3, 0, 0, "Sell To Cover Limit", 0, 0, clrRed);

        }

        else if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) {

            OrderSend(_Symbol, OP_BUY, 0.01, NormalizeDouble(Lowest(LOW, 2), Digits), 3, 0, 0, "Buy To Cover Limit", 0, 0, clrGreen);

        }

    }

    else {

        if (Close[1] > KeltSup) {

            OrderSend(_Symbol, OP_BUYLIMIT, 0.01, NormalizeDouble(Lowest(LOW, PeriodoAnalisado), Digits), 3, NormalizeDouble(KeltSup, Digits), NormalizeDouble(KeltInf, Digits), "Buy Limit", 0, 0, clrGreen);

        }

        if (Close[1] < KeltInf) {

            OrderSend(_Symbol, OP_SELLLIMIT, 0.01, NormalizeDouble(Highest(HIGH, PeriodoAnalisado), Digits), 3, NormalizeDouble(KeltSup, Digits), NormalizeDouble(KeltInf, Digits), "Sell Limit", 0, 0, clrRed);

        }


Erros : '}' - unexpected end of program MaxMinDiario.mq5  Linha 27  Coluna 9

'{' - unbalanced parentheses MaxMinDiario.mq5 Linha 9Coluna 1



Arquivos anexados:
 
Antonio Bergamo:

ChatGPT é um disparate. Não perca o seu tempo com ele e não perca o nosso.

Quando afixar código, faça-o usando o botão "Código".

 

 
Miguel Angel Vico Alba #:

ChatGPT é um disparate. Não perca o seu tempo com ele e não perca o nosso.

Quando afixar código, faça-o usando o botão "Código".

 

Opa Miguel bom dia ! Obrigado pela dica, devo refazer o post ?

 
Antonio Bergamo #Opa Miguel bom dia ! Obrigado pela dica, devo refazer o post ?

Não é necessário. Basta tê-lo em mente na próxima vez. ;-)

 

Antonio, aparentemente está faltando fechar os blocos que foram abertos com {. A sintaxe da linguagem do Profit se assemelha muito a Delphi, sendo que cada bloco se inicia com begin e termina com end. Aqui no caso, a MQL5 se assemelha mais a C e C++, em que cada bloco se inicia com { e termina com }. Perceba que, no código que você mostrou, há 7 (sete) chaves para abrir blocos, enquanto há 5 (cinco) para fechar. Faltam, portanto, as chaves para fechar os blocos

if (PositionSelect(_Symbol)) {

        (...)

    }

    else {

       (...)

        }

e para fechar a função 

void OnTick()


Em resumo, o código ficaria assim:


void OnTick()
{
   KeltSup = iKeltnerChannel(_Symbol, _Period, KeltPeriodo, Keltdesvio, KelTipo, MODE_UPPER, 0);
   KeltInf = iKeltnerChannel(_Symbol, _Period, KeltPeriodo, Keltdesvio, KelTipo, MODE_LOWER, 1);


   if (PositionSelect(_Symbol))
   {

      if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
      {
         OrderSend(_Symbol, OP_SELL, 1, NormalizeDouble(Highest(HIGH, 2), Digits), 3, 0, 0, "Sell To Cover Limit", 0, 0, clrRed);
      }
      else if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
      {
         OrderSend(_Symbol, OP_BUY, 0.01, NormalizeDouble(Lowest(LOW, 2), Digits), 3, 0, 0, "Buy To Cover Limit", 0, 0, clrGreen);
      }
   }
   else
   {
      if (Close[1] > KeltSup)
      {
         OrderSend(_Symbol, OP_BUYLIMIT, 0.01, NormalizeDouble(Lowest(LOW, PeriodoAnalisado), Digits), 3, NormalizeDouble(KeltSup, Digits), NormalizeDouble(KeltInf, Digits), "Buy Limit", 0, 0, clrGreen);
      }
      if (Close[1] < KeltInf)
      {
         OrderSend(_Symbol, OP_SELLLIMIT, 0.01, NormalizeDouble(Highest(HIGH, PeriodoAnalisado), Digits), 3, NormalizeDouble(KeltSup, Digits), NormalizeDouble(KeltInf, Digits), "Sell Limit", 0, 0, clrRed);
      }
   }
}


Já aproveitando, aconselho também a aprender C++ para criar EAs. Vai ajudar muito a ter uma noção melhor sobre programação - especialmente para programar em MQL5, que se tornará muito mais fácil. Além disso, ajudará a escrever bons códigos e reduzirá as chances de que haja bugs no seu EA (que são bastante comuns para quem não tem afinidade com a linguagem).

Razão: