ajuda para calcular indicador do fogueiro (metastock)
20 mensagens
|Página 1 de 1
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 (16.79 KiB) Visualizado 912 vezes
Abraço,
Dwer
There is a difference between knowing the path and walking the path
Dwer
There is a difference between knowing the path and walking the path
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?![]()
Abraço.
é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

Bons negocios,
arnie
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
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 (5.78 KiB) Visualizado 985 vezes
-
- ixic.png (5.43 KiB) Visualizado 974 vezes
-
- mlo.png (5.28 KiB) Visualizado 991 vezes
-
- nya.png (6.4 KiB) Visualizado 984 vezes
-
- sml.png (5.28 KiB) Visualizado 978 vezes
- 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 (9.75 KiB) Visualizado 1005 vezes
Bons negocios,
arnie
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
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
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
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%:
mais uma vez, comentários e críticas são bem-vindos
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
ola rsacramento,
experimenta assim:
um abraço,
arnie
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
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
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
Dwer
There is a difference between knowing the path and walking the path
quebra da mais baixa das duas:
ou seja, a menor das MMs atravessa o fecho
parece-te errado?
- 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?
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)
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
Dwer
There is a difference between knowing the path and walking the path
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
Dwer
There is a difference between knowing the path and walking the path
caso resolvido
contudo apreciava críticas e comentários
um exemplo:

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 (5.46 KiB) Visualizado 1471 vezes
ajuda para calcular indicador do fogueiro (metastock)
o indicador é visual e diz o seguinte:
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:
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);
20 mensagens
|Página 1 de 1
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 e 134 visitantes