Página 1 de 1

MensagemEnviado: 15/6/2008 20:06
por LS
rsacramento Escreveu:espero que sirva:

é isto mesmo. obrigado.

MensagemEnviado: 15/6/2008 19:44
por Dwer
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

MensagemEnviado: 15/6/2008 19:09
por arnie
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:

MensagemEnviado: 15/6/2008 18:59
por Cubriclas
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:

MensagemEnviado: 15/6/2008 18:53
por rsacramento
espero que sirva:

MensagemEnviado: 15/6/2008 18:17
por LS
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?

MensagemEnviado: 15/6/2008 12:05
por rsacramento
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);

MensagemEnviado: 15/6/2008 10:17
por arnie
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

MensagemEnviado: 15/6/2008 10:01
por arnie
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

MensagemEnviado: 15/6/2008 1:43
por rsacramento
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

MensagemEnviado: 14/6/2008 18:36
por arnie
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

MensagemEnviado: 14/6/2008 15:02
por rsacramento
oops

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

quando tiver vagar venho cá tentar corrigi-lo

MensagemEnviado: 9/6/2008 14:27
por rsacramento
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

MensagemEnviado: 8/6/2008 22:21
por Dwer
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.)

MensagemEnviado: 8/6/2008 20:45
por rsacramento
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?

MensagemEnviado: 8/6/2008 20:37
por rsacramento
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

Re: ajuda para calcular indicador do fogueiro (metastock)

MensagemEnviado: 8/6/2008 19:58
por Dwer
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;

MensagemEnviado: 8/6/2008 19:49
por Dwer
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.

MensagemEnviado: 8/6/2008 15:26
por rsacramento
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:

ajuda para calcular indicador do fogueiro (metastock)

MensagemEnviado: 8/6/2008 14:42
por rsacramento
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);