Outros sites Medialivre
Caldeirão da Bolsa

"Barras Cem" Revisited... em ProRealTime

Espaço dedicado a todo o tipo de troca de impressões sobre os mercados financeiros e ao que possa condicionar o desempenho dos mesmos.

por Pantone » 7/1/2012 16:35

Excelente, Quico. Parabéns pelo trabalho e pela partilha :)
 
Mensagens: 848
Registado: 4/1/2004 22:32
Localização: lx

por Quico » 7/1/2012 11:04

O serviço gratuito da ProRealTime só permite ir até gráficos diários, actualizados no final do dia. :wink:
"People want to be told what to do so badly that they'll listen to anyone." - Don Draper, Mad Men
Avatar do Utilizador
 
Mensagens: 4688
Registado: 12/5/2004 19:52

por vset » 7/1/2012 1:45

Quico,

qual é o resultado em timeframe horário?

Podes postar por favor.

Abraço.
 
Mensagens: 1029
Registado: 11/1/2004 13:37

por Pickbull » 12/12/2011 17:17

Quico Escreveu:Caro Pickbull:

No segundo gráfico, os pontinhos azuis sinalizam a posição do stop. Por exemplo, esse topo de meados de Outubro não é stop, uma vez que nesse período a posição seria longa; somente aparecem as sucessivas posições de stops em função da posição assumida ser longa ou curta. Quando um stop é atingido, obviamente a posição inverte-se e o stop passa "para o outro lado do canal.


Entendi-te.

Pensei que assinalasse todos os novos máximos/mínimos.
Mais vale perder um lucro do que ganhar um prejuízo.

É melhor um burro vivo do que um cavalo morto.

Mais vale uma alegria na vida do que um tostão no bolso.
Avatar do Utilizador
 
Mensagens: 1427
Registado: 23/1/2008 19:18
Localização: Coimbra

por Quico » 10/12/2011 21:39

Oba! O cem apareceu a comentar! :)
Não tem nada que agradecer; pelo contrário.
Obrigado pelas observações. Só contava que comentasse o novo aspecto gráfico que "arranjei" para o, digamos, indicador. Mas pode ficar para a próxima... ;)

Caro Pickbull:

No segundo gráfico, os pontinhos azuis sinalizam a posição do stop. Por exemplo, esse topo de meados de Outubro não é stop, uma vez que nesse período a posição seria longa; somente aparecem as sucessivas posições de stops em função da posição assumida ser longa ou curta. Quando um stop é atingido, obviamente a posição inverte-se e o stop passa "para o outro lado do canal.

Caro vset:

Não fiz as contas mas presumo que poderá ser como dizes.
Relativamente ao exemplo que apresentei há que referir que forcei o risco a nunca ultrapassar os 2% do capital investido, e a cada posição não ultrapassar 100% do capital.
Mas podemos ser um pouco mais agressivos: por exemplo, passando o risco para 10% (só aconselhável se negociarmos apenas um activo), e permitindo que o capital investido em cada trade possa ascender aos 500% (através de "margem"), os resultados são significativamente melhorados, como se pode ver na figura. Mas arriscar a este nível... não sei, não!
Anexos
DAX PERFORMANCE-INDEX.png
DAX PERFORMANCE-INDEX.png (33.24 KiB) Visualizado 1719 vezes
"People want to be told what to do so badly that they'll listen to anyone." - Don Draper, Mad Men
Avatar do Utilizador
 
Mensagens: 4688
Registado: 12/5/2004 19:52

Re

por Cem pt » 10/12/2011 17:33

Queria aproveitar esta ocasião para agradecer ao Quico o código deste método de negociação para o ProRealTime, aliás à semelhança de outra iniciativa anterior que apareceu aqui no Caldeirão com um código aproximado escrito em Metastock.

Por curiosidade o "Barras Cem" foi criado precisamente como um indicador com regras simples que evitassem a programação, ou seja, que fosse entendido pela maior parte do pessoal. Tem a sua piada aparecer agora programado!

O que aqui foi sendo dito pelo Quico tem toda a razão de ser em relação ao facto dos gráficos diários transportarem consigo demasiado "ruído" que necessita de ser filtrado com uma escala temporal mais longa para se obterem melhores resultados.

Curiosamente, aqui há cerca de meia dúzia de anos atrás, detectei numa revista do "Stocks and Commodities", quase de boca aberta de espanto, um artigo interessante acerca dum método de trading praticamente igual ao que propus, desenvolvido nos inícios do século passado pelo famoso W. D. Gann em futuros de cerealíferas, creio que se tratava das Soybeans! Com uma significativa diferença porém em relação ao meu plano: o Gann considerava cada barra o conjunto de 2 sessões, ou seja, já há cerca de 100 anos atrás ele tinha detectado que uma barra de 1 dia não era muito efectivo em termos de performances, uma diferença significativa entre a aplicação de regras de negociação entre um tuga curioso e um mito mundial do trading, como agora comprovou o Quico!

Thanks pela pachorra e pela inciativa.

Abraço,

Cem
Editado pela última vez por Cem pt em 11/12/2011 11:28, num total de 5 vezes.
O autor não assume responsabilidades por acções tomadas por quem quer que seja nem providencia conselhos de investimento. O autor não faz promessas nem oferece garantias nem sugestões, limita-se a transmitir a sua opinião pessoal. Cada um assume os seus riscos, incluindo os que possam resultar em perdas.


Citações que me assentam bem:


Sucesso é a habilidade de ir de falhanço em falhanço sem perda de entusiasmo – Winston Churchill

Há milhões de maneiras de ganhar dinheiro nos mercados. O problema é que é muito difícil encontrá-las - Jack Schwager

No soy monedita de oro pa caerle bien a todos - Hugo Chávez


O day trader trabalha para se ajustar ao mercado. O mercado trabalha para o trend trader! - Jay Brown / Commodity Research Bureau
 
Mensagens: 3199
Registado: 4/3/2008 17:21
Localização: 16

por vset » 10/12/2011 13:16

Quico este último de 3d parece ter um DD de 20%, portanto poder-se-ia usar uma alavancagem de 2x.

Daria 7-8% ao ano nos testes.

Confirmas?


abraço.
 
Mensagens: 1029
Registado: 11/1/2004 13:37

por Pickbull » 9/12/2011 21:44

@Quico:

Obrigado pelo código.

Olhando para o gráfico dos stops do post inicial parece que há qualquer coisa que não bate certo.

Por exemplo aquele topo em meados de outubro não está assinalado apesar de aparecer na mancha rosa.

E isso acontece várias vezes ... :S
Mais vale perder um lucro do que ganhar um prejuízo.

É melhor um burro vivo do que um cavalo morto.

Mais vale uma alegria na vida do que um tostão no bolso.
Avatar do Utilizador
 
Mensagens: 1427
Registado: 23/1/2008 19:18
Localização: Coimbra

por Quico » 9/12/2011 12:03

vset Escreveu:Viva Quico,

podes experimentar com barras de 3 dias, penso que o Red tinha simulado assim em vez de semanal+diário.

Abraço.


Aqui vai:
Anexos
DAX PERFORMANCE-INDEX_3.png
DAX PERFORMANCE-INDEX_3.png (31.4 KiB) Visualizado 1985 vezes
"People want to be told what to do so badly that they'll listen to anyone." - Don Draper, Mad Men
Avatar do Utilizador
 
Mensagens: 4688
Registado: 12/5/2004 19:52

por vset » 9/12/2011 11:33

Viva Quico,

podes experimentar com barras de 3 dias, penso que o Red tinha simulado assim em vez de semanal+diário.

Abraço.
 
Mensagens: 1029
Registado: 11/1/2004 13:37

por Quico » 9/12/2011 11:01

SpecialX Escreveu:Quico,

Já agora qual seria o ganho numa estratégia de buy and hold no dax para os mesmos 20 anos ?

Ab


Eh, pá! Agora é que me lixaste! :)

Estou a ver o teu ponto: se tivesse mantido desde 1992 uma estratégia de buy & hold, a valorização neste momento seria (5874.44-1609.6)/1609.6=264.9%! :shock:
Isto contra uns "miseráveis" 66% obtidos, por exemplo no timeframe semanal. :cry:

Mas deixa-me que te diga que a comparação é injusta. Repara: como disse, no que testei, nunca ficava investido a 100% do capital; cada posição é dimensionada de forma a não colocar em risco mais de 2% do mesmo quando é activado o stop inicial.
Vamos então ver o que dava se cada posição fosse aberta com todo o capital disponível (ver gráfico a azul):

Imagem

Nesta comparação "mais justa" verifica-se que a valorização passa para uns competitivos 310089/100000=310%. :wink:
Mais: parece-me que os drawdowns que se obteriam seriam significativamente bem mais suportáveis. Por ex., entre Março de 2000 e Março de 2003, o DAX veio desde os 8000 até aos 2400!!! :shock:
Daí que também seja interessante comparar o que se passaria se o teste tivesse início em Março de 2000:

Imagem

Uma desvalorização de 8000 para 5800, face a ganhos aplicando o método.

Claro que, como disse, isto é uma mera ferramente que funciona bem quando há um bom trend em curso, mas que "sofre penosamente" quando o mercado lateraliza, mesmo que ligeiramente (veja-se o caso dos últimos 2 anos).

Abraço.
"People want to be told what to do so badly that they'll listen to anyone." - Don Draper, Mad Men
Avatar do Utilizador
 
Mensagens: 4688
Registado: 12/5/2004 19:52

por vset » 9/12/2011 10:55

Bom dia Quico,

em 20 anos não duplica :?

3% ao ano?

Qual foi o maior Drawdownwm termos percentuais?

Abraço.
 
Mensagens: 1029
Registado: 11/1/2004 13:37

por Specialx » 9/12/2011 0:32

Quico,

Já agora qual seria o ganho numa estratégia de buy and hold no dax para os mesmos 20 anos ?



Ab
 
Mensagens: 203
Registado: 11/5/2007 22:56
Localização: Quarteira

por Quico » 8/12/2011 23:41

Quanto ao código para gerar os indicadores, aqui estão:
Se querem os canais e os pontinhos superiores e inferiores vermelhos é este:

Barras_Cem
Código: Selecionar todos

if high>high[i] and low>=low[i] then
   alto=high
elsif  high<=high[i] and low<low[i] then
   baixo=low
elsif high>=high[i] and low<=low[i] then
   if high[i]>=alto[i] then
      alto=high
   elsif low[i]<=baixo[i] then
      baixo=low
   endif
endif


if high<high[i] and low>low[i] then
   i=i[1]+1
else
   i=1
endif


if alto=alto[i] then
   barra=alto
   barraalto=alto
elsif baixo=baixo[i] then
   barra=baixo
   barrabaixo=baixo
endif

if high>barra and barra=alto then
   barra=high
   barraalto=high
   alto=high
elsif low<barra and barra=baixo then
   barra=low
   barrabaixo=low
   baixo=low
endif

return barra,barraalto,barrabaixo


Se quiserem com os stops (o dos pontinhos azuis)...

Barras_Cem_com_stops
Código: Selecionar todos
if high>high[i] and low>=low[i] then
   alto=high
elsif  high<=high[i] and low<low[i] then
   baixo=low
elsif high>=high[i] and low<=low[i] then
   if high[i]>=alto[i] then
      alto=high
   elsif low[i]<=baixo[i] then
      baixo=low
   endif
endif


if high<high[i] and low>low[i] then
   i=i[1]+1
else
   i=1
endif


if alto=alto[i] then
   barra=alto
   barraalto=alto
elsif baixo=baixo[i] then
   barra=baixo
   barrabaixo=baixo
endif

if high>barra and barra=alto then
   barra=high
   barraalto=high
   alto=high
elsif low<barra and barra=baixo then
   barra=low
   barrabaixo=low
   baixo=low
endif

if high>barraalto[1] then
   lc=1
elsif low<barrabaixo[1] then
   lc=-1
else
   lc=lc[1]
endif

if lc=1 then
   stopp=barrabaixo
else
   stopp=barraalto
endif

return barra,barraalto,barrabaixo,stopp


Atenção, que isto só vai gerar linhas. Depois têm de as formatar (pontinhos, canais) a gosto.

Para o backtest, o que tenho está um bocado tosco. Quando tiver alguma coisa apresentável...
"People want to be told what to do so badly that they'll listen to anyone." - Don Draper, Mad Men
Avatar do Utilizador
 
Mensagens: 4688
Registado: 12/5/2004 19:52

por Quico » 8/12/2011 23:29

vset Escreveu:Muito bem Quico.

E consegues testar isso no histórico do DAX?

Abraço.


O sistema proposto pelo cem era bastante diferente disto. Consistia em compor 2 contratos de futuros, um a seguir o diário e outro a seguir o gráfico semanal. Isto acabava por resultar numa filtragem das posições diárias pelo semanal (cada vez que ambas eram contraditórias estávamos na prática fora do mercado; quando eram coincidentes tínhamos dois contratos a valorizar...ou não :mrgreen:).

Para já não tive tempo para pensar como programar esta combinação (diário-semanal, ou outras). O que apresento é apenas baseado num só timeframe.

Fiz os seguintes backtests para vários timeframes:
- Capital inicial: 100000
- Cada posição é calculada de forma a gerar um risco de 2% (se atingir o stop inicial)
- Estamos sempre investidos.
- Os ganhos são reinvestidos.
- Data inicial: 1 Jan 1992 (quase 20 anos).

Assim, as conclusões que se pode tirara assim de repente são estas (poderão tirar outras):

No diário, os resultados são desanimadores. Mas não era nada de que não estivesse à espera. Basta uma olhada ao gráfico que vê-se logo que a coisa se presta a grande número de entradas e saídas em falso (como disse o Pickbull) e facilmente a valorização descamba.

Imagem

Os resultados até eram interessantes até à data em que o cem apresentou o método (2003). A partir daí a coisa começou a colapsar. Curioso, não?! :-k

Mas adiante. Como disse, isto poderá ser uma mera ferramenta para construir um sistema um pouco mais elaborado. Se se puder complementar com qualquer coisa que filtre o ruído que provoca entradas e saídas em falso, parece-me que o resultado melhora grandemente.

Se não, reparem: quando se quer filtrar o ruído do timeframe em que estamos, o que se faz? Aumenta-se o timeframe, certo? :wink: Olhemos então para os resultados com gráficos semanais ou mensais:

Imagem

Imagem

Bem melhor, não?! :)

Mas deixei o mais curioso para o fim. E que tal fazer uma filtragem ao diário mais "suave", i.e., aumentar o timeframe para bi-diário (cada vela representa 2 sessões diárias):

Imagem

Surpreendente como a melhoria foi radical! :wink:
Já agora, e só para terminar: porque não os resultados do quinzenal (bi-semanal)?

Imagem

Espero que gostem! :wink:
Editado pela última vez por Quico em 8/12/2011 23:45, num total de 1 vez.
"People want to be told what to do so badly that they'll listen to anyone." - Don Draper, Mad Men
Avatar do Utilizador
 
Mensagens: 4688
Registado: 12/5/2004 19:52

por Supermann » 8/12/2011 22:25

Podes partilhar backtests e código? :mrgreen:

Coloca tipo um backtest em alguns activos de nomeada dos últimos anos tipo Prata, Ouro, DAX, SP500 e ve se consegues também apanhar algum com fortes lateralizações para ver como se porta, olha tipo o EURUSD nos últimos meses.

Vou ler melhor o tópico do Cem.

Zig Zag? Pergunto-me senão terá alguma coisaa a ver com Elliott? É que já vi uns gráficos do Cem com exercícios de Elliott e Gann, e à primeira vista deste sistema parece ser sobre isso mesmo.
 
Mensagens: 1750
Registado: 18/12/2009 18:54
Localização: 16

por Pickbull » 8/12/2011 22:22

Quando comecei o TF usava esse sistema. Comprava (ou vendia) quando quebrava um máximo (ou mínimo) anterior.

Mas depois deixei-me disso porque além de dar muito trabalho (não tinha nada programado) dava muitas entradas e saídas e não quero estar agarrado ao monitor a toda a hora. :S

Agora canais e MMs e está a andar .... :lol:

No entanto na escolha do stop ainda olho para os máximos/mínimos anteriores e para o ATR. E sendo assim aproveitando a tua boa vontade gostaria que partilhasses o código da parte dos stops, sff. :oops:
Mais vale perder um lucro do que ganhar um prejuízo.

É melhor um burro vivo do que um cavalo morto.

Mais vale uma alegria na vida do que um tostão no bolso.
Avatar do Utilizador
 
Mensagens: 1427
Registado: 23/1/2008 19:18
Localização: Coimbra

por Quico » 8/12/2011 21:33

Supermann Escreveu:Quico, podes elaborar mais o sistema?

Programaste o sistema para PRT ? e alteraste a representação gráfica é isso?


O sistema, embora simples, é chato de explicar. Baseia-se no traçar do tal zigzag (ou swings, como lhe chama o cem). Para poupar latim, coloco aqui o essencial da explicação do cem:

Cem Escreveu: (...)
Para traçar esta linha só temos de observar o movimento do máximo e mínimo da última barra e comparar com a anterior, mais simples que isto não podia ser!
Agora vamos ver com um pouco mais de cuidado quais as regras para saber como se vai marcando e actualizando as linhas de swing. Podemos ter 4 hipóteses possíveis de detecção:
A) Se o máximo for inferior e o mínimo for superior aos correspondentes máximo e mínimo da barra anterior, trata-se de uma barra ou sessão sem significado, é vulgarmente chamada uma barra interior ou “inside bar” e não tem interesse para este sistema de trading. Equivale ao efeito de uma perda de tempo, consolidação ou indecisão do mercado. No caso de suceder este cenário temos de ter em atenção que o comportamento da barra seguinte terá de ser comparado com a barra de referência inicial anterior e nunca com a “inside bar” que para o efeito deve ser sempre “ignorada”, como se não existisse.
B) Se o máximo e mínimo da barra actual forem superiores aos correspondentes da barra anterior, significa que nos encontramos num swing ascendente. Marcamos ou actualizamos a linha de swing de modo a que o seu novo ponto de chegada seja agora coincidente com o máximo da barra presente.
C) Se o máximo e mínimo da última barra forem inferiores aos correspondentes extremos da barra precedente, repito, desde que esta não se trate de uma barra interior, logo tratada como “inexistente”, estaremos num swing descendente. A linha de downswing passa a ter o seu terminal descendente a bater no mínimo da barra presente, “puxando-a” a partir da barra precedente que mantém o mesmo swing.
D) Finalmente, se o máximo for superior e o mínimo for inferior aos da barra anterior, teremos de considerar retroactivamente essa barra anterior como uma “inside bar” a posteriori e verificar para trás onde se encontra a 1ª barra que caia fora dos limites da barra presente. Após esta pesquisa actualizamos a linha de swing de acordo com os casos possíveis referidos em B ou C.

O que podemos então observar ou extrair do traçado da linha de swing? Fácil, uma linha quebrada que é interrompida nos chamados pontos de pivot dos swings, fazendo, nessas quebras de sentido, topos e baixas ( tops e bottoms).
Para verificar que posições devemos tomar basta comparar esses pontos de quebra, assumindo em princípio posições longas ou compradas se tivermos uma linha de swing ascendente superior ao topo anterior e adoptando posições curtas ou short se a linha de swing no sentido descendente ultrapassar a baixa do último swing de referência.
Na prática, para tomar posições, em princípio, comparamos os pontos pivots correspondentes, adoptando-se preços de stops que são colocados nos pontos limites dos topos ou baixas de referência anteriores à distância de pelo menos 1 tick para além do valor de quebra referenciado do ciclo do swing mais recente.
(...)


E é como dizes: programei o que o cem descreve (embora simples, é um pouco complicado de implementar em linguagem de programação). Optei também por uma nova representação gráfica.
"People want to be told what to do so badly that they'll listen to anyone." - Don Draper, Mad Men
Avatar do Utilizador
 
Mensagens: 4688
Registado: 12/5/2004 19:52

por vset » 8/12/2011 21:28

Muito bem Quico.

E consegues testar isso no histórico do DAX?

Abraço.
 
Mensagens: 1029
Registado: 11/1/2004 13:37

por Supermann » 8/12/2011 20:56

Quico, podes elaborar mais o sistema?

Programaste o sistema para PRT ? e alteraste a representação gráfica é isso?
 
Mensagens: 1750
Registado: 18/12/2009 18:54
Localização: 16

"Barras Cem" Revisited... em ProRealTime

por Quico » 8/12/2011 20:07

Eu sei que para alguns não se trata de nada de novo; para outros poderá ser novidade. O "Barras Cem" é uma espécie de sistema que o cem partilhou aqui há uns anos (8, se não estou em erro) de implementação muito simples e cuja a descrição podem encontrar aqui. Backtests e experiencias/evoluções posteriores podem ser vistas aqui ou aqui.
Não se trata de nenhuma panaceia; funciona muito bem para determinado tipo de activos e mal noutros (embora nestes, os resultados raramente sejam desastrosos).

Penso que pode ser mais uma ferramenta útil e interessante, que pode e deve ser complementada com outros indicadores (inventem à vontade) sobretudo para quem faz trend following.

Isto para introduzir o seguinte:
Tentei implementar o indicador deste sistema no ProRealTime. Esse indicador é do estilo "zigzag" que originalmente seria para ser traçado "à mão". Na minha opinião (sorry, cem) esta representação fica horrível nos gráficos e encobre as velas/barras da cotação. Vejam o exemplo:

Imagem

Horrível, não?! Para além do mais, eu confesso que não sei como se pode programar as linhas de "zigzag" em ProRealTime... :oops: .

Daí que optei por uma configuração mais "limpa", baseada em canais (como eu gosto :wink: ), e que fica bem mais fácil e agradável de ler.

Imagem

Assim, os últimos máximos e mínimos aparecem como limite superior e inferior do canal, aparecendo uns pontinhos a sinalizar o último pico (inferior ou superior) do indicador.

Uma outra variante de representação poderá ser a seguinte: o sistema, pelo menos na sua primeira forma, é um sistema que está "sempre no mercado", e em que o stop de inversão da posição será o limite oposto do canal. Nesta representação aparece em evidência os sucessivos stops (pontinhos azuis).

Imagem

Pronto! E é isto. Comentários são bem vindos, e caso estejam interessados poderei partilhar aqui o código. Caso queiram alguns backtests, também se arranja. :wink:

Abraço.
"People want to be told what to do so badly that they'll listen to anyone." - Don Draper, Mad Men
Avatar do Utilizador
 
Mensagens: 4688
Registado: 12/5/2004 19:52


Quem está ligado:
Utilizadores a ver este Fórum: Google [Bot], josehenry400, latbal e 276 visitantes