Confira os nossos eBooks, Snippets e Fóruns produzidos para cada plataforma!
Boa noite galera, vou enviar aqui um código q um amigo fez de GRADIENTE LINEAR, mas identifiquei um erro e não conseguimos corrigir. essa estrategia é para o grafico de pontos 10p (50pts). O erro: percebi que em algumas operações o GAIN está acima dos 50 pts, e em outros momentos o LOSS está menor saindo no preço de entrada (5 pts de diferença), sendo que se o box subisse (como fez nos exemplos em anexo) deveria fazer outra venda. Na maior parte do código funciona perfeitamente, mas em alguns casos acontece esse erro. Segue anexo arquivos de imagem com exemplo dos erros. input hora_inicio(0900); hora_fim(1800); Inicio_Abertura_b3(0950); Fim_Abertura_b3(1010); Inicio_Abertura_DJ(1020); Fim_Abertura_DJ(1040); distanciaOrdens(50.0); // 50 take(50.0); // 50 n_ordens(12); // 12 Qnt_Max_Ctr (11); // 35 // com MACD histo = 11 OrdemAumentoMao(5); // 5 var compra, venda, horarioOK, Horario_B3_ok, Horario_DJ_ok : boolean; precoUltEnt,precoSaida: float; indice,ordensPend: inteiro; stopDia, stopDiaVenda:inteiro; Alt_Min_Venda_ifr : float; Alt_Max_Venda_ifr : float; Ifr_Venda_ok : boolean; begin /////////// Formula IFR /////////// Alt_Max_Venda_ifr := 90 ; Alt_Min_Venda_ifr := 20 ; Ifr_Venda_ok := ((ifr(9)>=Alt_Min_Venda_ifr) and (ifr(9)<=Alt_Max_Venda_ifr)); if(Date<>Date[1]) then begin stopDia:=0; stopDiaVenda:=0; end; venda := (Ifr_Venda_ok); { ////////////// REGRA DE COLORAÇÃO ///////////////// PaintBar(clbranco); if (venda) e (horarioOK) e (stopDiaVenda=0) then begin PaintBar(clVermelho); end; } ///////////////// CONDIÇÃO PARA VENDA ///////////////// Horario_B3_ok := (Time>Inicio_Abertura_b3) e (Time<Fim_Abertura_b3) ; Horario_DJ_ok := (Time>Inicio_Abertura_DJ) e (Time<Fim_Abertura_DJ) ; horarioOK := ((time>hora_inicio) e (time<hora_fim)) e (not Horario_B3_ok) e (not Horario_DJ_ok); if((horarioOK) e (venda) e (stopDiaVenda=0)) then begin ordensPend := n_ordens + (n_ordens - OrdemAumentoMao) - SellPosition; for indice:=1 to ordensPend do begin precoUltEnt := close + distanciaOrdens*indice; SellShortLimit(precoUltEnt,1); if(SellPosition>=OrdemAumentoMao) then SellShortLimit(precoUltEnt,1); end; end; if(isSold) and (Sellposition <= Qnt_Max_Ctr + (n_ordens - OrdemAumentoMao)) then begin precoSaida := close - take; if(venda) and (precoSaida<precoUltEnt) then begin BuyToCoverLimit(precoSaida,1); if(SellPosition>OrdemAumentoMao) then BuyToCoverLimit(precoSaida,1); end else if(not venda) and (sellPosition >= 1) then begin closePosition; // stopDiaVenda:=1; end; end else if(isSold) and (Sellposition > Qnt_Max_Ctr + (n_ordens - OrdemAumentoMao)) then begin closePosition; stopDiaVenda:=1; PlotText("StopDia", clamarelo, -1, 20); end; if(not horarioOK) then begin closePosition; end; end;