
rsacramento Escreveu:espero que sirva:
é isto mesmo. obrigado.
Fórum dedicado à discussão sobre os Mercados Financeiros - Bolsas de Valores
http://teste.caldeiraodebolsa.jornaldenegocios.pt/
http://teste.caldeiraodebolsa.jornaldenegocios.pt/viewtopic.php?f=3&t=62953
rsacramento Escreveu:espero que sirva:
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.
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
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.
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
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);
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);
{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
rsacramento Escreveu:olá Arnie: o teu código funciona, embora não reproduza o indicador do fogueiro...
if((MLO > (If(MM50MLO > MM25MLO, MM50MLO, MM25MLO))), 1, 0)
mlo>Max(Mov(mlo,shortMM,S),Mov(mlo,longMM,S))
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);
{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
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?
NEGATIVO:=
If(cross(If(MM50MLO < Ref(MM25MLO, 0), MM50MLO, MM25MLO), MLO), 1, 0)
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.
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.
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.
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);
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.
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);