Neo traderBot

Neo traderBot

Você sabia?

Confira os nossos eBooks, Snippets e Fóruns produzidos para cada plataforma!

leaf leftleaf right
Notifications
Clear all

Linha contínua em um Plot

5 Posts
2 Usuários
0 Reactions
218 Visualizações
(@alfredo-goulart)
Membro ativo
Registrou: 2 anos atrás
Posts: 3
Iniciador do tópico  

Ola Jonh. Boa tarde aos membros! Mando esse código simples.  Nesse ex. ele só evita que a linha seja continua e  assim que uma nova condição seja compilada ela para de plotar a anterior.  Gostaria de melhorar o código,  plotando a linha ate que um fechamento ocorra acima dela,  sendo essa a ordem de não plotar. Ou seja, gostaria que plotasse todas as condições do codigo na forma de uma linha continua. Tipo horizontalLine. Grato!

Var
ma1: float;
precoA: float;

inicio
inicio // calculo maior maxima
Se ((maxima[0] < maxima[1]) e (maxima[1] > maxima[2])) then
ma1:= maxima[1];
Se (maxima[0] < maxima[1]) then precoA :=ma1
Senão precoA := precoA[1];
Se precoA <> precoA[1] then noplot(1); SetPlotcolor(1,rgb(250,128,114)); SetPlotStyle(1,psdash); //
Plot(ma1);
fim;
end;


   
Citar
(@admin)
Membro Admin
Registrou: 2 anos atrás
Posts: 216
 

Oi @alfredo-goulart!

Deixa eu entender melhor o que precisa para te ajudar...Em um exemplo, estendi os plots do seu código até que houvesse um candle com fechamento acima do valor de cada linha. É isso que deseja? Multiplas linhas horizontais estendendo até que haja um candle com fechamento acima de cada uma?

 

Abs!

 

 


   
ReplyCitar
(@alfredo-goulart)
Membro ativo
Registrou: 2 anos atrás
Posts: 3
Iniciador do tópico  

Perfeito John. Tentei fazer de varias formas, inclusive c/ "while...Do". Mas ficou num loop, minha formação agronômica pouco ajuda...hehe. Parabéns pelo trabalho que estas fazendo e pela defesa de tese, vi no grupo do Profit. Sucesso sempre! Estou fazendo na maxima..mas quero replicar p minimas tbm..depois de entender o conceito. 


   
ReplyCitar
(@admin)
Membro Admin
Registrou: 2 anos atrás
Posts: 216
 

Obrigado, @alfredo-goulart!

Então, sobre sua pergunta...você está querendo fazer algo que em termos de ideia é simples...mas em termos de programação em NTSL já é mais complicado.

Vou te explicar porque entendo ser complicado, talvez você possa simplificar a ideia para tornar mais fácil a implementação, ainda que não seja o mais ideal.

  • Todos os plots em NTSL precisam estar alocados em um número. O profit aceita até 99 plots em um gráfico...mas nem sei te dizer se ele aguenta isso;
  • A quantidade de plots pode se tornar grande para gerenciar...talvez algo mais viável seja fazer isso em uma janela histórica recente (ex: desde o início do dia, ou da semana, dependendo do tempo gráfico)
  • Eu pensaria em usar um array circular para armazenar os valores e fazer a verificação se houve fechamento acima dos valores. Mas isto consome muito recurso no Profit porque a NTSL não é otimizada para uso de variáveis realmente globais (ele acaba criando cópias ao longo do processamento)
  • Utilizando um array circular, precisaria definir a quantidade máxima de linhas que deseja plotar aguardando o rompimento
  • Em todo processamento eu teria que verificar nesse array circular o que já foi rompido, ou qual é a linha mais antiga para substituir o plot.

 

Mas já lhe adianto...esse código vai dar um trabalhinho para fazer e ainda corre o risco do profit achar muito pesado (apesar de ser algo simples em teoria...rsrsrs).

Se você conseguir simplificar definindo a quantidade máxima de linhas que deseja plotar, eu poderia tentar gerar um código para isso...só não posso prometer muita celeridade, porque já disse que exigiria um pouco de esforço para garantir o correto funcionamento nessa implementação.

 

Abs!

 

 


   
ReplyCitar
(@alfredo-goulart)
Membro ativo
Registrou: 2 anos atrás
Posts: 3
Iniciador do tópico  

Ola John. Entendo quanto ao excesso de plots e uso de memória no Profit. Tenho usado sempre limitação de dias de plotagem em alguns códigos e mudo de acordo c tempo gráfico a ser utilizado.

Qto a esse código que solicitei, creio que os rompimentos de topos e fundos (Close acima ou abaixo da linha como condição para parar de plotar), também ajudara na limitação das linhas de plotagem. Ja qto ao array circular não tenho conhecimento p opinar. Até vou mandar mesmo ex. acima c/ um array.

Outra forma, em vez utilizar as máximas, seria utilizar detector topos e fundos c/ ajuste do período para limitar os plots.

Mas de qualquer forma não resolve o objetivo que é estender as linhas.

Input
Dias(10);
Var
ma1: float;
precoA: float;
x1,x2,x3,x4 : real;
numero: Array[1..4] of Real;
Result: Real;
Result2: Real;
miv1, miv2, miv3, miv4: Real;
mav1, mav2, mav3, mav4: Real;
i: Inteiro;

inicio
Se (LastCalcdate > Calcdate(Currentdate, - (Dias))) entao

Se ((maxima[0] < maxima[1]) e (maxima[1] > maxima[2])) then
ma1:= maxima[1];
miv1:= ma1;
miv2:= ma1;
miv3:= ma1;
miv4:= ma1;
numero[1]:= miv1;
numero[2]:= miv2;
numero[3]:= miv3;
numero[4]:= miv4;
PAra i:= 1 ate 4 faca
inicio
Se (i=1) entao result:= numero[i];
Se (numero[i] >= result) entao result:= numero[i];

// Se ((maxima[0] < maxima[1]) e (maxima[1] > maxima[2]))
Se (result = numero[i]) then precoA:= result
senao precoA := precoA[1];
Se precoA <> precoA[1] then noplot(1);

// while (close < result) do
Plot(result);
fim;
end;

Grato e se puder ajudar agradeço John. Abç


   
ReplyCitar