Caldeirão da Bolsa

ajuda para calcular indicador do fogueiro (metastock)

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 LS » 15/6/2008 20:06

rsacramento Escreveu:espero que sirva:

é isto mesmo. obrigado.
Avatar do Utilizador
 
Mensagens: 975
Registado: 8/10/2006 16:14

por Dwer » 15/6/2008 19:44

Comparamos cada Índice com as suas MM25 e MM50. Consideramos positiva a permanência acima da MM mais baixa das duas, passando a negativo quando a quebra em fecho. Inversamente volta a positiva apenas quando quebrar, em fecho, a MM mais alta das duas.


Penso que este enunciado se aplica às entradas longas.

O enunciado para curtas seria:

Comparamos cada Índice com as suas MM25 e MM50. Consideramos negativa a permanência abaixo da MM mais alta das duas, passando a positivo quando a quebra em fecho. Inversamente volta a negativo apenas quando quebrar, em fecho, a MM mais baixa das duas.

Temos uma contradição nos enunciados: numa situação em que a cotação se encontre entre as duas MMs, teremos um sinal positivo e negativo ao mesmo tempo.

maior que a mais baixa => sinal longo;
menor que a mais alta => sinal curto;

Para resolver esta contradição penso que é de assumir que quando a cotação se encontra entre as duas MMs o sinal é neutro => fora do mercado.

Código: Selecionar todos
MLO:= Security("online:MLO", C);
mm25:=Mov(mlo,25,S);
mm50:=Mov(mlo,50,S);
maisalta:=If(mm25>mm50,mm25,mm50);
maisbaixa:=If(mm25>mm50,mm50,mm25);
positivo:=mlo>maisalta;
negativo:=mlo<maisbaixa;
mlo:=positivo-negativo;
ixic:= Security("online:COMP", C);
mm25:=Mov(ixic,25,S);
mm50:=Mov(ixic,50,S);
maisalta:=If(mm25>mm50,mm25,mm50);
maisbaixa:=If(mm25>mm50,mm50,mm25);
positivo:=ixic>maisalta;
negativo:=ixic<maisbaixa;
ixic:=positivo-negativo;
NYA:= Security("online:NYA", C);
mm25:=Mov(nya,25,S);
mm50:=Mov(nya,50,S);
maisalta:=If(mm25>mm50,mm25,mm50);
maisbaixa:=If(mm25>mm50,mm50,mm25);
positivo:=nya>maisalta;
negativo:=nya<maisbaixa;
nya:=positivo-negativo;
SML:= Security("online:SML", C);
mm25:=Mov(sml,25,S);
mm50:=Mov(sml,50,S);
maisalta:=If(mm25>mm50,mm25,mm50);
maisbaixa:=If(mm25>mm50,mm50,mm25);
positivo:=sml>maisalta;
negativo:=sml<maisbaixa;
sml:=positivo-negativo;
GSPC:= Security("online:SPX", C);
mm25:=Mov(gspc,25,S);
mm50:=Mov(gspc,50,S);
maisalta:=If(mm25>mm50,mm25,mm50);
maisbaixa:=If(mm25>mm50,mm50,mm25);
positivo:=gspc>maisalta;
negativo:=gspc<maisbaixa;
gspc:=positivo-negativo;

MedioPrazo:=mlo+ixic+nya+sml+gspc;
Status:=If(MedioPrazo<=-3,-1,If(MedioPrazo>=3,1,0));
Status
Anexos
fogueiro.png
fogueiro.png (16.79 KiB) Visualizado 911 vezes
Abraço,
Dwer

There is a difference between knowing the path and walking the path
Avatar do Utilizador
 
Mensagens: 3414
Registado: 4/11/2002 23:16

por arnie » 15/6/2008 19:09

Cubriclas Escreveu:Olhando para o titulo deste tópico há uma pergunta que me vem logo à cabeça: porque não perguntar ao próprio fogueiro? :lol:
Abraço. :wink:


épá, quando li a tua pergunta a 1ª coisa que me veio à cabeça foi.....

ele não sabe nada sobre a linguagem do metastock por isso torna-se um pouco dificil perguntar seja o que for sobre o assunto, néh :!:

ele deu o mais importante, as regras :idea:
Bons negocios,
arnie
 
Mensagens: 3094
Registado: 4/11/2002 23:09
Localização: Viras à esq, segues em frente, viras à dir, segues em frente e viras novamente à dir. CHEGASTE

por Cubriclas » 15/6/2008 18:59

Olhando para o titulo deste tópico há uma pergunta que me vem logo à cabeça: porque não perguntar ao próprio fogueiro? :lol:
Abraço. :wink:
Uma boa análise é 90% do sucesso...os outros 10% é pura sorte...
Avatar do Utilizador
 
Mensagens: 457
Registado: 23/7/2007 20:55
Localização: Reino do Dragão

por rsacramento » 15/6/2008 18:53

espero que sirva:
Anexos
mlo.TXT
(157.14 KiB) Transferido 142 Vezes
Avatar do Utilizador
 
Mensagens: 10503
Registado: 29/11/2007 12:50

por LS » 15/6/2008 18:17

Queria fazer uns testes com estes indicadores mas não tenho dados históricos do MLO. Estive a procurar no Yahoo e eles não têm histórico para este indice. Alguèm sabe onde posso conseguir estes dados pelo menos para 100 dias para poder fazer testes?
Avatar do Utilizador
 
Mensagens: 975
Registado: 8/10/2006 16:14

por rsacramento » 15/6/2008 12:05

arnie Escreveu:tens que simplificar essa formula, esgotaste o limite das variáveis

limita os sinais a +1 e a -1

enquanto não tiveres seguro do sinais estarem a ser correctos, não compliques a formula

coloca uma m25 e uma mm50 num gráfico e depois coloca a formula numa nova janela

os sinais da formula têm que coincidir com os fechos acima das mm's

já tinha aplicado quase todas essas ideias, excepto reduzir a coisa a +1/-1, e foi através da visualização dos gráficos que me apercebi que tinha isto mal

ainda não tive tempo de verificar cuidsadosamente, vela a vela, se agora isto está bem, mas pelo menos já eliminei alguns erros gritantes

de facto tinha 20 variáveis (o limite) e como descobri como alargar esse número, eis agora o meu código, o qual pode ainda ser depurado/melhorado
(nota: criei dois indicadores)
Código: Selecionar todos
MLO:= Security("D:\novos indices\.MLO", C);
IXIC:= Security("D:\novos indices\.IXIC", C);
NYA:= Security("D:\novos indices\.NYA", C);
SML:= Security("D:\novos indices\.SML", C);
GSPC:= Security("D:\Índices\.GSPC", C);

MM50MLO:= Mov(MLO, 50, S);
MM25MLO:= Mov(MLO, 25, S);

MM50IXIC:= Mov(IXIC, 50, S);
MM25IXIC:= Mov(IXIC, 25, S);

MM50NYA:= Mov(NYA, 50, S);
MM25NYA:= Mov(NYA, 25, S);

MM50SML:= Mov(SML, 50, S);
MM25SML:= Mov(SML, 25, S);

MM50GSPC:= Mov(GSPC, 50, S);
MM25GSPC:= Mov(GSPC, 25, S);

MAISALTO:= If((MLO > (If(MM50MLO > MM25MLO, MM50MLO, MM25MLO))), 1, 0)
    +
    If((IXIC > (If(MM50IXIC > MM25IXIC, MM50IXIC, MM25IXIC))), 1, 0)   
    +
    If((NYA > (If(MM50NYA > MM25NYA, MM50NYA, MM25NYA))), 1, 0)     
    +
    If((SML > (If(MM50SML > MM25SML, MM50SML, MM25SML))), 1, 0)     
    +
    If((GSPC > (If(MM50GSPC > MM25GSPC, MM50GSPC, MM25GSPC))), 1, 0);

 
MAISBAIXO:=
    If(MLO < (If(MM50MLO < MM25MLO, MM50MLO, MM25MLO)), 1, 0)
    +   
    If(IXIC < (If(MM50IXIC < MM25IXIC, MM50IXIC, MM25IXIC)), 1, 0)
    +   
    If(NYA < (If(MM50NYA < MM25NYA, MM50NYA, MM25NYA)), 1, 0) 
    +   
    If(SML< (If(MM50SML < MM25SML, MM50SML, MM25SML)), 1, 0)
    +   
    If(GSPC < (If(MM50GSPC < MM25GSPC, MM50GSPC, MM25GSPC)), 1, 0);
   
   
MAISALTOQUEMENOR:= If((MLO > (If(MM50MLO < MM25MLO, MM50MLO, MM25MLO))), 1, 0)
    +
    If((IXIC > (If(MM50IXIC < MM25IXIC, MM50IXIC, MM25IXIC))), 1, 0)   
    +
    If((NYA > (If(MM50NYA < MM25NYA, MM50NYA, MM25NYA))), 1, 0)     
    +
    If((SML > (If(MM50SML < MM25SML, MM50SML, MM25SML))), 1, 0)     
    +
    If((GSPC > (If(MM50GSPC < MM25GSPC, MM50GSPC, MM25GSPC))), 1, 0);

Código: Selecionar todos
MLO:= Security("D:\novos indices\.MLO", C);
IXIC:= Security("D:\novos indices\.IXIC", C);
NYA:= Security("D:\novos indices\.NYA", C);
SML:= Security("D:\novos indices\.SML", C);
GSPC:= Security("D:\Índices\.GSPC", C);

MM50MLO:= Mov(MLO, 50, S);
MM25MLO:= Mov(MLO, 25, S);

MM50IXIC:= Mov(IXIC, 50, S);
MM25IXIC:= Mov(IXIC, 25, S);

MM50NYA:= Mov(NYA, 50, S);
MM25NYA:= Mov(NYA, 25, S);

MM50SML:= Mov(SML, 50, S);
MM25SML:= Mov(SML, 25, S);

MM50GSPC:= Mov(GSPC, 50, S);
MM25GSPC:= Mov(GSPC, 25, S);


POSITIVO:=(
   If(Ref( FmlVar("ALTURAS","MAISALTOQUEMENOR") , -1) >= 3 AND REF( FmlVar("ALTURAS","MAISBAIXO") , -1) <= 3,
        (
            If((MLO > (If(MM50MLO < MM25MLO, MM50MLO, MM25MLO))),  1, 0)
            +
            If((IXIC > (If(MM50IXIC < MM25IXIC, MM50IXIC, MM25IXIC))),  1, 0)
            +
            If((NYA > (If(MM50NYA < MM25NYA, MM50NYA, MM25NYA))),  1, 0)
            +
            If((SML > (If(MM50SML < MM25SML, MM50SML, MM25SML))),  1, 0)
            +
            If((GSPC > (If(MM50GSPC < MM25GSPC, MM50GSPC, MM25GSPC))),  1, 0)
        ),  FmlVar("ALTURAS","MAISALTO")));
       
   
NEGATIVO:=   
    If(POSITIVO < 3 AND REF(FmlVar("ALTURAS","MAISALTO"), -1) < 3, If(MLO < (If(MM50MLO > MM25MLO, MM50MLO, MM25MLO)), 1, 0), 0)
    +   
    If(POSITIVO < 3 AND REF(FmlVar("ALTURAS","MAISALTO"), -1) < 3, If(IXIC < (If(MM50IXIC > MM25IXIC, MM50IXIC, MM25IXIC)), 1, 0), 0)
    +   
    If(POSITIVO < 3 AND REF(FmlVar("ALTURAS","MAISALTO"), -1) < 3, If(NYA < (If(MM50NYA > MM25NYA, MM50NYA, MM25NYA)), 1, 0),0)
    +   
    If(POSITIVO < 3 AND REF(FmlVar("ALTURAS","MAISALTO"), -1) < 3, If(SML< (If(MM50SML > MM25SML, MM50SML, MM25SML)), 1, 0), 0)
    +   
    If(POSITIVO < 3 AND REF(FmlVar("ALTURAS","MAISALTO"), -1) < 3, If(GSPC < (If(MM50GSPC > MM25GSPC, MM50GSPC, MM25GSPC)), 1, 0),  FmlVar("ALTURAS","MAISBAIXO"));


If(POSITIVO >= 3, 1, 0);
If(NEGATIVO >= 3, -1, 0);
Anexos
gspc.png
gspc.png (5.78 KiB) Visualizado 984 vezes
ixic.png
ixic.png (5.43 KiB) Visualizado 973 vezes
mlo.png
mlo.png (5.28 KiB) Visualizado 990 vezes
nya.png
nya.png (6.4 KiB) Visualizado 983 vezes
sml.png
sml.png (5.28 KiB) Visualizado 977 vezes
Avatar do Utilizador
 
Mensagens: 10503
Registado: 29/11/2007 12:50

por arnie » 15/6/2008 10:17

Código: Selecionar todos
{Input User}
shortMM:=Input("shortMM periods",1,30,25);
longMM:=Input("longMM periods",31,100,50);

{Index Data}
spx:=Security("C:\Trading Data\Stocks\US\Indices\S&P\$SPX",C);

{Entry and Exit Signals}
entry:=spx>Max(Mov(spx,shortMM,S),Mov(spx,longMM,S));
exit:=spx<Min(Mov(spx,shortMM,S),Mov(spx,longMM,S));

{Plot in own window}
entry-exit
Anexos
spx_fogueiro.png
spx_fogueiro.png (9.75 KiB) Visualizado 1004 vezes
Bons negocios,
arnie
 
Mensagens: 3094
Registado: 4/11/2002 23:09
Localização: Viras à esq, segues em frente, viras à dir, segues em frente e viras novamente à dir. CHEGASTE

por arnie » 15/6/2008 10:01

rsacramento Escreveu:olá Arnie: o teu código funciona, embora não reproduza o indicador do fogueiro...


não?

vê lá isso bem pois quando tu dizes que

Código: Selecionar todos
if((MLO > (If(MM50MLO > MM25MLO, MM50MLO, MM25MLO))), 1, 0)


o resultado é idêntico quando eu digo

Código: Selecionar todos
mlo>Max(Mov(mlo,shortMM,S),Mov(mlo,longMM,S))


tens que simplificar essa formula, esgotaste o limite das variáveis

limita os sinais a +1 e a -1

enquanto não tiveres seguro do sinais estarem a ser correctos, não compliques a formula

coloca uma m25 e uma mm50 num gráfico e depois coloca a formula numa nova janela

os sinais da formula têm que coincidir com os fechos acima das mm's
Bons negocios,
arnie
 
Mensagens: 3094
Registado: 4/11/2002 23:09
Localização: Viras à esq, segues em frente, viras à dir, segues em frente e viras novamente à dir. CHEGASTE

por rsacramento » 15/6/2008 1:43

olá Arnie: o teu código funciona, embora não reproduza o indicador do fogueiro...

bom, estou quase a atirar a toalha para o chão: não estou nada certo que esta nova versão esteja a 100%:
Código: Selecionar todos
MLO:= Security("D:\novos indices\.MLO", C);
IXIC:= Security("D:\novos indices\.IXIC", C);
NYA:= Security("D:\novos indices\.NYA", C);
SML:= Security("D:\novos indices\.SML", C);
GSPC:= Security("D:\Índices\.GSPC", C);

MM50MLO:= Mov(MLO, 50, S);
MM25MLO:= Mov(MLO, 25, S);

MM50IXIC:= Mov(IXIC, 50, S);
MM25IXIC:= Mov(IXIC, 25, S);

MM50NYA:= Mov(NYA, 50, S);
MM25NYA:= Mov(NYA, 25, S);

MM50SML:= Mov(SML, 50, S);
MM25SML:= Mov(SML, 25, S);

MM50GSPC:= Mov(GSPC, 50, S);
MM25GSPC:= Mov(GSPC, 25, S);

POSITIVO:= 2;

MAISALTO:= if((MLO > (If(MM50MLO > MM25MLO, MM50MLO, MM25MLO))), 1, 0)
    +
    if((IXIC > (If(MM50IXIC > MM25IXIC, MM50IXIC, MM25IXIC))), 1, 0)   
    +
    if((NYA > (If(MM50NYA > MM25NYA, MM50NYA, MM25NYA))), 1, 0)     
    +
    if((SML > (If(MM50SML > MM25SML, MM50SML, MM25SML))), 1, 0)     
    +
    if((GSPC > (If(MM50GSPC > MM25GSPC, MM50GSPC, MM25GSPC))), 1, 0);
   

POSITIVO:=(
    if(REF(POSITIVO, -1) >= 3,
        (
            If((MLO > (If(MM50MLO < MM25MLO, MM50MLO, MM25MLO))),  1, 0)
            +
            If((IXIC > (If(MM50IXIC < MM25IXIC, MM50IXIC, MM25IXIC))),  1, 0)
            +
            If((NYA > (If(MM50NYA < MM25NYA, MM50NYA, MM25NYA))),  1, 0)
            +
            If((SML > (If(MM50SML < MM25SML, MM50SML, MM25SML))),  1, 0)
            +
            If((GSPC > (If(MM50GSPC < MM25GSPC, MM50GSPC, MM25GSPC))),  1, 0)
        ), MAISALTO));
 
 
MAISBAIXO:=
    If(MLO < (If(MM50MLO < MM25MLO, MM50MLO, MM25MLO)), 1, 0)
    +   
    If(IXIC < (If(MM50IXIC < MM25IXIC, MM50IXIC, MM25IXIC)), 1, 0)
    +   
    If(NYA < (If(MM50NYA < MM25NYA, MM50NYA, MM25NYA)), 1, 0) 
    +   
    If(SML< (If(MM50SML < MM25SML, MM50SML, MM25SML)), 1, 0)
    +   
    If(GSPC < (If(MM50GSPC < MM25GSPC, MM50GSPC, MM25GSPC)), 1, 0);
 
   
NEGATIVO:=   
    if(REF(POSITIVO, -1) < 3, If(MLO < (If(MM50MLO > MM25MLO, MM50MLO, MM25MLO)), 1, 0), 0)
    +   
    if(REF(POSITIVO, -1) < 3, If(IXIC < (If(MM50IXIC > MM25IXIC, MM50IXIC, MM25IXIC)), 1, 0), 0)
    +   
    if(REF(POSITIVO, -1) < 3, If(NYA < (If(MM50NYA > MM25NYA, MM50NYA, MM25NYA)), 1, 0),0)
    +   
    if(REF(POSITIVO, -1) < 3, If(SML< (If(MM50SML > MM25SML, MM50SML, MM25SML)), 1, 0), 0)
    +   
    if(REF(POSITIVO, -1) < 3, If(GSPC < (If(MM50GSPC > MM25GSPC, MM50GSPC, MM25GSPC)), 1, 0), MAISBAIXO);


If(POSITIVO >= 3, 1, 0);
If(NEGATIVO >= 3, -1, 0);


mais uma vez, comentários e críticas são bem-vindos
Avatar do Utilizador
 
Mensagens: 10503
Registado: 29/11/2007 12:50

por arnie » 14/6/2008 18:36

ola rsacramento,

experimenta assim:

Código: Selecionar todos
{Input User}
shortMM:=Input("shortMM periods",1,30,25);
longMM:=Input("longMM periods",31,100,50);


{Index Data}
mlo:=Security("C:\Trading Data\Stocks\US\Indices\AMEX\$MLO",C);
nya:=Security("C:\Trading Data\Stocks\US\Indices\NYSE\$NYA",C);
comp:=Security("C:\Trading Data\Stocks\US\Indices\NASDAQ\$COMP",C);
spx:=Security("C:\Trading Data\Stocks\US\Indices\S&P\$SPX",C);
sml:=Security("C:\Trading Data\Stocks\US\Indices\S&P\$SML",C);

{Entry and Exit Signals}
entry:=mlo>Max(Mov(mlo,shortMM,S),Mov(mlo,longMM,S))
AND nya>Max(Mov(nya,shortMM,S),Mov(nya,longMM,S))
AND comp>Max(Mov(comp,shortMM,S),Mov(comp,longMM,S))
AND spx>Max(Mov(spx,shortMM,S),Mov(spx,longMM,S))
AND sml>Max(Mov(sml,shortMM,S),Mov(sml,longMM,S));

exit:=mlo<Min(Mov(mlo,shortMM,S),Mov(mlo,longMM,S))
AND nya<Min(Mov(nya,shortMM,S),Mov(nya,longMM,S))
AND comp<Min(Mov(comp,shortMM,S),Mov(comp,longMM,S))
AND spx<Min(Mov(spx,shortMM,S),Mov(spx,longMM,S))
AND sml<Min(Mov(sml,shortMM,S),Mov(sml,longMM,S));

{Plot in own window}
entry-exit


um abraço,
arnie
Bons negocios,
arnie
 
Mensagens: 3094
Registado: 4/11/2002 23:09
Localização: Viras à esq, segues em frente, viras à dir, segues em frente e viras novamente à dir. CHEGASTE

por rsacramento » 14/6/2008 15:02

oops

o meu código não está bem!

quando tiver vagar venho cá tentar corrigi-lo
Avatar do Utilizador
 
Mensagens: 10503
Registado: 29/11/2007 12:50

por rsacramento » 9/6/2008 14:27

realmente isto não estava optimizado...

ao princípio usei vars como dizes, mas só que o ms não deixa ter mais de 20, de maneira que voltei ao extenso

nem imaginas o trabalhão que isto me deu!... é que sou muito verdinho... assim estivessem os mercados

obrigado, dwer
Avatar do Utilizador
 
Mensagens: 10503
Registado: 29/11/2007 12:50

por Dwer » 8/6/2008 22:21

rsacramento Escreveu:quebra da mais baixa das duas:
Código: Selecionar todos
NEGATIVO:=
    If(cross(If(MM50MLO < Ref(MM25MLO, 0), MM50MLO, MM25MLO), MLO), 1, 0)

ou seja, a menor das MMs atravessa o fecho
parece-te errado?


está certo. mas tenta simplificar um bocadinho primeiro:

negativo-> o fecho é menor que a menor das duas MMs.

MenorDasDuasMMs:=If(MM50MLO<MM25MLO,MM50MLO,MM25MLO);
(não precisas de usar a função REF(); REF(MM25MLO,0) é a mesma coisa que MM25MLO)

negativo:=MLO<MenorDasDuasMMs;
(não precisas de usar a função cross(). A primeira vez que o fecho for menor que a menor das duas MMS, negativo=1. Dá o mesmo resultado que usando o cross e é mais simples.)
Editado pela última vez por Dwer em 9/6/2008 15:23, num total de 1 vez.
Abraço,
Dwer

There is a difference between knowing the path and walking the path
Avatar do Utilizador
 
Mensagens: 3414
Registado: 4/11/2002 23:16

por rsacramento » 8/6/2008 20:45

quebra da mais baixa das duas:
Código: Selecionar todos
NEGATIVO:=
    If(cross(If(MM50MLO < Ref(MM25MLO, 0), MM50MLO, MM25MLO), MLO), 1, 0)

ou seja, a menor das MMs atravessa o fecho

parece-te errado?
Avatar do Utilizador
 
Mensagens: 10503
Registado: 29/11/2007 12:50

por rsacramento » 8/6/2008 20:37

Dwer Escreveu:
rsacramento Escreveu:Consideramos positiva a permanência acima da MM mais baixa das duas.
Volta a positiva apenas quando quebrar, em fecho, a MM mais alta das duas, passando a negativo quando a quebra em fecho.


Parece-me que há aí um gato qualquer.

É positivo se estiver acima da mais baixa das duas.
É negativo se quebrar a mais alta das duas.

Mas ao quebrar a mais alta das duas pode encontrar-se na primeira situação - acima da mais baixa das duas. O que é positivo.

o texto não é meu - é citação do fogueiro
Avatar do Utilizador
 
Mensagens: 10503
Registado: 29/11/2007 12:50

Re: ajuda para calcular indicador do fogueiro (metastock)

por Dwer » 8/6/2008 19:58

rsacramento Escreveu:Comparamos cada Índice com as suas MM25 e MM50. Consideramos positiva a permanência acima da MM mais baixa das duas, passando a negativo quando a quebra em fecho. Inversamente volta a positiva apenas quando quebrar, em fecho, a MM mais alta das duas.


Olhando para o enunciado original do Fogueiro:

É positivo se estiver acima da mais baixa das duas.
É negativo se quebrar a mais baixa das duas.

MLO:= Security("D:\novos indices\.MLO", C);
IXIC:= Security("D:\novos indices\.IXIC", C);
NYA:= Security("D:\novos indices\.NYA", C);
SML:= Security("D:\novos indices\.SML", C);
GSPC:= Security("D:\Índices\.GSPC", C);
MM50MLO:= Mov(MLO, 50, S);
MM25MLO:= Mov(MLO, 25, S);
MM50IXIC:= Mov(IXIC, 50, S);
MM25IXIC:= Mov(IXIC, 25, S);
MM50NYA:= Mov(NYA, 50, S);
MM25NYA:= Mov(NYA, 25, S);
MM50SML:= Mov(SML, 50, S);
MM25SML:= Mov(SML, 25, S);
MM50GSPC:= Mov(GSPC, 50, S);
MM25GSPC:= Mov(GSPC, 25, S);
{Consideramos positiva a permanência acima da MM mais baixa das duas.
Consideramos negativa a permanência abaixo da MM mais alta das duas.
Volta a positiva apenas quando quebrar, em fecho, a MM mais alta das duas.
Volta a negativa apenas quando quebrar, em fecho, a MM mais baixa das duas. }

MaisBaixaDasDuas:=if(mm50mlo< mm25mlo,mm50mlo,mm25mlo);
MaisAltaDasDuas:=if(mm50mlo> mm25mlo,mm50mlo,mm25mlo);

PositivoRegular:=mlo>MaisBaixaDasDuas;
PositivoBreakOut:=PositivoRegular and barssince(mlo>MaisAltaDasduas)<barssince(mlo<MaisBaixaDasDuas);

PositivoMLO:=PositivoRegular or PositivoBreakOut;

NegativoRegular:=mlo<MaisAltaDasDuas;
NegativoBreakOut:=NegativoRegular and barssince(mlo<MaisBaixaDasduas)< barssince(mlo>MaisAltaDasDuas);

NegativoMLO:=NegativoRegular or NegativoBreakOut;

{O Indicador de Médio Prazo está positivo se, pelo menos, 3 dos 5 Índices estiverem positivos, e negativo se, pelo menos, 3 dos 5 Índices estiverem negativos. }

Positivo:=(PositivoMLO+PositivoIXIC+PositivoNYA+PositivoSML+PositivoGSPC)>=3;
Negativo:=(NegativoMLO+NegativoIXIC+NegativoNYA+NegativoSML+NegativoGSPC)>=3;
Editado pela última vez por Dwer em 8/6/2008 22:23, num total de 2 vezes.
Abraço,
Dwer

There is a difference between knowing the path and walking the path
Avatar do Utilizador
 
Mensagens: 3414
Registado: 4/11/2002 23:16

por Dwer » 8/6/2008 19:49

rsacramento Escreveu:Consideramos positiva a permanência acima da MM mais baixa das duas.
Volta a positiva apenas quando quebrar, em fecho, a MM mais alta das duas, passando a negativo quando a quebra em fecho.


Parece-me que há aí um gato qualquer.

É positivo se estiver acima da mais baixa das duas.
É negativo se quebrar a mais alta das duas.

Mas ao quebrar a mais alta das duas pode encontrar-se na primeira situação - acima da mais baixa das duas. O que é positivo.
Abraço,
Dwer

There is a difference between knowing the path and walking the path
Avatar do Utilizador
 
Mensagens: 3414
Registado: 4/11/2002 23:16

por rsacramento » 8/6/2008 15:26

caso resolvido :lol:
contudo apreciava críticas e comentários

Código: Selecionar todos
MLO:= Security("D:\novos indices\.MLO", C);
IXIC:= Security("D:\novos indices\.IXIC", C);
NYA:= Security("D:\novos indices\.NYA", C);
SML:= Security("D:\novos indices\.SML", C);
GSPC:= Security("D:\Índices\.GSPC", C);



MM50MLO:= Mov(MLO, 50, S);
MM25MLO:= Mov(MLO, 25, S);

MM50IXIC:= Mov(IXIC, 50, S);
MM25IXIC:= Mov(IXIC, 25, S);

MM50NYA:= Mov(NYA, 50, S);
MM25NYA:= Mov(NYA, 25, S);

MM50SML:= Mov(SML, 50, S);
MM25SML:= Mov(SML, 25, S);

MM50GSPC:= Mov(GSPC, 50, S);
MM25GSPC:= Mov(GSPC, 25, S);



{ Consideramos positiva a permanência acima da MM mais baixa das duas
   volta a positiva apenas quando quebrar, em fecho, a MM mais alta das duas }

POSITIVO:=
    If((MLO > (If(MM50MLO < Ref(MM25MLO, 0), MM50MLO, MM25MLO)))
    OR
    (CROSS(MLO, (If(MM50MLO > Ref(MM25MLO, 0), MM50MLO, MM25MLO)))), 1, 0)
+
    If((IXIC > (If(MM50IXIC < Ref(MM25IXIC, 0), MM50IXIC, MM25IXIC)))
    OR
    (CROSS(IXIC, (If(MM50IXIC > Ref(MM25IXIC, 0), MM50IXIC, MM25IXIC)))), 1, 0)   
+
    If((NYA > (If(MM50NYA < Ref(MM25NYA, 0), MM50NYA, MM25NYA)))
    OR
    (CROSS(NYA, (If(MM50NYA > Ref(MM25NYA, 0), MM50NYA, MM25NYA)))), 1, 0)     
+
    If((SML > (If(MM50SML < Ref(MM25SML, 0), MM50SML, MM25SML)))
    OR
    (CROSS(SML, (If(MM50SML > Ref(MM25SML, 0), MM50SML, MM25SML)))), 1, 0)     
+
    If((GSPC > (If(MM50GSPC < Ref(MM25GSPC, 0), MM50GSPC, MM25GSPC)))
    OR
    (CROSS(GSPC, (If(MM50GSPC > Ref(MM25GSPC, 0), MM50GSPC, MM25GSPC)))), 1, 0);
   
   

{ passando a negativo quando a quebra em fecho }

NEGATIVO:=
    If(cross(If(MM50MLO < Ref(MM25MLO, 0), MM50MLO, MM25MLO), MLO), 1, 0)
+   
    If(cross(If(MM50IXIC < Ref(MM25IXIC, 0), MM50IXIC, MM25IXIC), IXIC), 1, 0)
+   
    If(cross(If(MM50NYA < Ref(MM25NYA, 0), MM50NYA, MM25NYA), NYA), 1, 0) 
+   
    If(cross(If(MM50SML < Ref(MM25SML, 0), MM50SML, MM25SML), SML), 1, 0)
+   
    If(cross(If(MM50GSPC < Ref(MM25GSPC, 0), MM50GSPC, MM25GSPC), GSPC), 1, 0);
   


{ O Indicador de Médio Prazo está positivo se, pelo menos, 3 dos 5 Índices estiverem positivos,
    e negativo se, pelo menos, 3 dos 5 Índices estiverem negativos. } 

If(Ref(POSITIVO, 0) >= 3, 1, 0);
If(Ref(NEGATIVO, 0) >= 3, -1, 0);


um exemplo:
Anexos
sp.png
sp.png (5.46 KiB) Visualizado 1470 vezes
Avatar do Utilizador
 
Mensagens: 10503
Registado: 29/11/2007 12:50

ajuda para calcular indicador do fogueiro (metastock)

por rsacramento » 8/6/2008 14:42

o indicador é visual e diz o seguinte:
Indicador de Médio Prazo

É composto por 5 Índices: S&P 500, NYSE Composite, Nasdaq Composite, S&P 600 Small Cap e Merrill Lynch Tech Index, que atribui igual peso a 100 tecnológicas leaders de Mercado.
Comparamos cada Índice com as suas MM25 e MM50. Consideramos positiva a permanência acima da MM mais baixa das duas, passando a negativo quando a quebra em fecho. Inversamente volta a positiva apenas quando quebrar, em fecho, a MM mais alta das duas. A vantagem é detectar movimentos importantes do Mercado, evitando oscilações atípicas. A desvantagem é a oportunidade perdida nos primeiros dias de um uptrend. Mas penso que é um preço que vale a pena pagar.
O Indicador de Médio Prazo está positivo se, pelo menos, 3 dos 5 Índices estiverem positivos, e negativo se, pelo menos, 3 dos 5 Índices estiverem negativos.
É o que também se designa por tendência intermédia ou secundária.


só tenho código para valores positivos, por enquanto

o que se passa é que ele devia dar positivo para sexta-feira (dia 6), mas porém não dá
o que estará mal? alguém tentou isto antes?

eis o meu código:

Código: Selecionar todos
MLO:= Security("D:\novos indices\.MLO", C);
IXIC:= Security("D:\novos indices\.IXIC", C);
NYA:= Security("D:\novos indices\.NYA", C);
SML:= Security("D:\novos indices\.SML", C);
GSPC:= Security("D:\Índices\.GSPC", C);



MM50MLO:= Mov(MLO, 50, S);
MM25MLO:= Mov(MLO, 25, S);

MM50IXIC:= Mov(IXIC, 50, S);
MM25IXIC:= Mov(IXIC, 25, S);

MM50NYA:= Mov(NYA, 50, S);
MM25NYA:= Mov(NYA, 25, S);

MM50SML:= Mov(SML, 50, S);
MM25SML:= Mov(SML, 25, S);

MM50GSPC:= Mov(GSPC, 50, S);
MM25GSPC:= Mov(GSPC, 25, S);



{ Consideramos positiva a permanência acima da MM mais baixa das duas
   volta a positiva apenas quando quebrar, em fecho, a MM mais alta das duas }

POSITIVO:= 0;

POSITIVO:=
    If((MLO > (If(MM50MLO < Ref(MM25MLO, 0), MM50MLO, MM25MLO)))
    OR
    (CROSS(MLO, (If(MM50MLO > Ref(MM25MLO, 0), MM50MLO, MM25MLO)))), POSITIVO + 1, 0);
   
POSITIVO:=
    If((IXIC > (If(MM50IXIC < Ref(MM25IXIC, 0), MM50IXIC, MM25IXIC)))
    OR
    (CROSS(IXIC, (If(MM50IXIC > Ref(MM25IXIC, 0), MM50IXIC, MM25IXIC)))), POSITIVO + 1, 0); 
   
POSITIVO:=
    If((NYA > (If(MM50NYA < Ref(MM25NYA, 0), MM50NYA, MM25NYA)))
    OR
    (CROSS(NYA, (If(MM50NYA > Ref(MM25NYA, 0), MM50NYA, MM25NYA)))), POSITIVO + 1, 0); 
   
POSITIVO:=
    If((SML > (If(MM50SML < Ref(MM25SML, 0), MM50SML, MM25SML)))
    OR
    (CROSS(SML, (If(MM50SML > Ref(MM25SML, 0), MM50SML, MM25SML)))), POSITIVO + 1, 0);   
   
POSITIVO:=
    If((GSPC > (If(MM50GSPC < Ref(MM25GSPC, 0), MM50GSPC, MM25GSPC)))
    OR
    (CROSS(GSPC , (If(MM50GSPC > Ref(MM25GSPC, 0), MM50GSPC, MM25GSPC)))), POSITIVO + 1, 0);
   

If(Ref(POSITIVO, 0) >= 3, 1, 0);
Avatar do Utilizador
 
Mensagens: 10503
Registado: 29/11/2007 12:50


Quem está ligado:
Utilizadores a ver este Fórum: Bing [Bot], carlosdsousa, Cem pt, Google [Bot], iniciado1, Investor Tuga, Jonas74, latbal, lito, malakas, Manchini888, maturidade, O Magriço, PAULOJOAO, PMP69, silva_39, tami, trilhos2006, yggy e 185 visitantes