Neo traderBot

Neo traderBot

Você sabia?

Abordamos o tema de automatização de estratégias em NTSL, MQL5 e NinjaScript!

leaf leftleaf right
Notifications
Clear all

Erro de Compilação - "Código deve começar com begin"

1 Posts
1 Usuários
0 Reactions
13 Visualizações
(@pulgasp)
Novo membro
Registrou: 1 semana atrás
Posts: 1
Iniciador do tópico  

Tinha um indicador (coloração) e decidi transformar em automação, com auxilio dos seus posts.

Mas depois de atualizar, colocar a programação para ordens, e até funcionar, começou a dar erro de compilação de sintaxe.

Parser[3,1]: O código deve começar com begin
Erro de Sintaxe

Segue o código: 

input
TakeProfitPontos(400); // Valor padrão de 400 pontos para o Take Profit
  StopLossPontos(200); // Valor padrão de 200 pontos para o Stop Loss
  cStopOffsetEmpontos(10);
bGestaoDeRiscoPelaEstrategia(true);
iHorarioInicioAberturaPosicao(0905);
iHorarioFimAberturaPosicao(1630);
iHorarioEncerramentoDaytrade(1645);

VAR
  xEma52,
  xVWAP,
  xOBV,
  xEma52OBV,
  xEma200OBV : float;
  xSelect     : integer;
  nStopPoints : float;
  nTargetPoints : float;
  nContracts : integer;
  bPosicionado: boolean;
  fPrecoStop, fPrecoAlvo, fPrecoStopOffset: float;
  bConfigurouRisco: boolean;

BEGIN
  nStopPoints := StopLossPontos;
  nTargetPoints := TakeProfitPontos;

  begin
    // Cálculo do OBV
    if Close > Close[1] then
      xOBV := xOBV[1] + QuantityVol(false)
    else if Close < Close[1] then
      xOBV := xOBV[1] - QuantityVol(false)
    else
      xOBV := xOBV[1];
  end;

  // Cálculo dos indicadores
  xEma52    := MediaExp(52, Close);
  xVWAP     := VWAP(1);
  xEma52OBV := MediaExp(52, xOBV);
  xEma200OBV := MediaExp(200, xOBV);

  // Reset da variável de seleção
  xSelect := 0;

  // Condição de Compra (Long)
  if ((Close[1] < xEma52[1]) or (Close[1] < xVWAP[1]) or (xOBV[1] < xEma200OBV[1]))
     and (Close > xEma52)
     and (Close > xVWAP)
     and (Close - xEma52 < 450)
     and (xOBV > xEma52OBV)
     and (xOBV > xEma200OBV) then
  begin
    xSelect := 1;
  end;

  // Condição de Venda (Short)
  if ((Close[1] > xEma52[1]) or (Close[1] > xVWAP[1]) or (xOBV[1] > xEma200OBV[1]))
     and (Close < xEma52)
     and (xEma52 - Close < 450)
     and (Close < xVWAP)
     and (xOBV < xEma52OBV)
     and (xOBV < xEma200OBV) then
  begin
    xSelect := -1;
  end;

// Lógica de Execução de Ordens
 begin
  if xSelect = 1 then
  begin
   BuyAtMarket;

   if bGestaoDeRiscoPelaEstrategia then
  begin
    //POSIÇÃO COMPRADA
    //Código responsável pela configuração das ordens de stoploss e take profit NA ENTRADA
    fPrecoStop := BuyPrice - StopLossPontos * MinPriceIncrement;
    fPrecoAlvo := BuyPrice + TakeProfitPontos * MinPriceIncrement;
    fPrecoStopOffset := fPrecoStop - cStopOffsetEmpontos * MinPriceIncrement;

    SetStopLoss(fPrecoStop, fPrecoStopOffset);
    SetProfitTarget(fPrecoAlvo);
  end;
  end
  else if xSelect = -1 then
  begin
   SellShortAtMarket;
   if bGestaoDeRiscoPelaEstrategia then
  begin
   //POSIÇÃO VENDIDA
    //Código responsável pela configuração das ordens de stoploss e take profit NA ENTRADA
    fPrecoStop := SellPrice + StopLossPontos * MinPriceIncrement;
    fPrecoAlvo := SellPrice - TakeProfitPontos * MinPriceIncrement;
    fPrecoStopOffset := fPrecoStop + cStopOffsetEmpontos * MinPriceIncrement;

    SetStopLoss(fPrecoStop, fPrecoStopOffset);
    SetProfitTarget(fPrecoAlvo);
  end;
  end;

  // Encerramento Daytrade
  if Time >= iHorarioEncerramentoDaytrade and isPositionOpen then
  begin
    ClosePosition;
  end;
END;
END;

 

Como corrigir? Já procurei tudo. Em outro código semelhante, inclusive onde esse identifica erro de sintaxe, os erros são outros:

Parser[12,1]: Tem que ser identificador na declaração de variável
Parser[12,1]: O código deve começar com begin
Erro de Sintaxe

Segue o codigo (é uma variação para DOL).

INPUT
StopLossPontos(7); // Valor padrão de 7 pontos para o Stop Loss
TakeProfitPontos(21); // Valor padrão de 21 pontos para o Take Profit
cStopOffsetEmpontos(2);
bGestaoDeRiscoPelaEstrategia(true);
iHorarioInicioAberturaPosicao(0905);
iHorarioFimAberturaPosicao(1630);
iHorarioEncerramentoDaytrade(1645);

VAR
  xEma52,
  xVWAP,
  xOBV,
  xEma52OBV,
  xEma200OBV : float;
  xSelect     : integer;
  nStopPoints : float;
  nTargetPoints : float;
  nContracts : integer;
  bPosicionado: boolean;
  fPrecoStop, fPrecoAlvo, fPrecoStopOffset: float;
  bConfigurouRisco: boolean;

BEGIN
  nStopPoints := StopLossPontos;
  nTargetPoints := TakeProfitPontos;
  nContracts := NumContratos;

  begin
    // Cálculo do OBV
    if Close > Close[1] then
      xOBV := xOBV[1] + QuantityVol(false)
    else if Close < Close[1] then
      xOBV := xOBV[1] - QuantityVol(false)
    else
      xOBV := xOBV[1];
  end;

  // Cálculo dos indicadores
  xEma52   := MediaExp(52, Close);
  xVWAP    := VWAP(1);
  xEma52OBV := MediaExp(52, xOBV);
  xEma200OBV := MediaExp(200, xOBV);

  // Reset da variável de seleção
  xSelect := 0;

  // Condição de Compra (Long)
  if ((Close[1] < xEma52[1]) or (Close[1] < xVWAP[1]) or (xOBV[1] < xEma200OBV[1]))
     and (Close > xEma52)
     and (Close > xVWAP)
     and (Close - xEma52 < 450)
     and (xOBV > xEma52OBV)
     and (xOBV > xEma200OBV) then
  begin
    xSelect := 1;
  end;

  // Condição de Venda (Short)
  if ((Close[1] > xEma52[1]) or (Close[1] > xVWAP[1]) or (xOBV[1] > xEma200OBV[1]))
     and (Close < xEma52)
     and (xEma52 - Close < 450)
     and (Close < xVWAP)
     and (xOBV < xEma52OBV)
     and (xOBV < xEma200OBV) then
  begin
    xSelect := -1;
  end;

  // Lógica de Execução de Ordens
  begin
    if xSelect = 1 then
    begin
      BuyAtMarket(nContracts);
      PrecoCompra := LastTrade; // Armazena o preço de execução da compra
    end
    else if xSelect = -1 then
    begin
      SellShortAtMarket(nContracts);
      PrecoVenda := LastTrade; // Armazena o preço de execução da venda
    end;
  end;

  // Lógica para envio de Stop Loss e Take Profit APÓS a ordem principal ser executada
  if PrecoCompra > 0 then
  begin
    SetStopLoss(nStopPoints);
    SetProfitTarget(nTargetPoints);
    PrecoCompra := 0; // Reseta a variável para não enviar ordens novamente no mesmo candle
  end;

  if PrecoVenda > 0 then
  begin
    SetStopLoss(nStopPoints);
    SetProfitTarget(nTargetPoints);
    PrecoVenda := 0; // Reseta a variável para não enviar ordens novamente no mesmo candle
  end;
end

Agradeço se der uma luz. Já procurei em todo lugar aqui, IA, etc.

 

Não consigo nem testar a teoria. 

 

Obrigado.

 


   
Citar