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 beginErro de Sintaxe
Segue o código:
inputTakeProfitPontos(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ávelParser[12,1]: O código deve começar com beginErro de Sintaxe
Segue o codigo (é uma variação para DOL).
INPUTStopLossPontos(7); // Valor padrão de 7 pontos para o Stop LossTakeProfitPontos(21); // Valor padrão de 21 pontos para o Take ProfitcStopOffsetEmpontos(2);bGestaoDeRiscoPelaEstrategia(true);iHorarioInicioAberturaPosicao(0905);iHorarioFimAberturaPosicao(1630);iHorarioEncerramentoDaytrade(1645);
BEGIN nStopPoints := StopLossPontos; nTargetPoints := TakeProfitPontos; nContracts := NumContratos;
// 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.
Melhor no dólar foi 5 renkos