Sistemas mecânicos de trading
16 mensagens
|Página 1 de 1
rsacramento Escreveu:não te estou a perceber:
posso usar o teu código tal qual, com um or dentro do LE - aqui o latch já está a funcionar (e já verifiquei e o erro persiste)
se não é isso, não entendo, pois o que dizes não eexplica a disparidade de alguns sinais de stoop (1998, 2007)
podes explicar melhor?
nope. não ganhas nada com isso.
tem solução e é engraçada. devia bastar-te isso.
se não conseguires chegar lá, também não valerá de nada dar-te a solução.
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
queria dizer que tens que usar a função latch não só para o display dos sinais.
repara que a condição de entrada pode repetir-se durante bastante tempo.
e a função valuewhen retorna somente a última ocorrência.
é um bom exercício de lógica. e tem solução.
get to work
e depois mostra a solução à gente e aos babacas da equis
repara que a condição de entrada pode repetir-se durante bastante tempo.
e a função valuewhen retorna somente a última ocorrência.
é um bom exercício de lógica. e tem solução.
get to work

e depois mostra a solução à gente e aos babacas da equis
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
mas estou a usá-la
no expert:
no indicator builder:
repara que o stop signal de 2007 é totalmente disparatado, assim como o de finais de 1998:
no expert:
- Código: Selecionar todos
{ COMPRA }
ema150:=Mov(C, 150, E);
ema50:=Mov(C, 50, E);
ema15:=Mov(C, 15, E);
ema10:=Mov(C, 10, E);
ema5:=Mov(C, 5, E);
LE:= (ema150 > Ref(ema150, -1)
AND
ema50 > ema150)
AND
(ema15 >= ema5)
AND
ema5 >= ema10;
LX:= (ema150 < Ref(ema150, -1)
AND
ema50 < ema150);
SE:= 0;
SX:= 0;
B:= ExtFml("ForumDll.Latch",LE,LX,SE,SX);
B > 0 AND Ref(B,-1) <= 0
{ VENDA }
ema150:=Mov(C, 150, E);
ema50:=Mov(C, 50, E);
ema15:=Mov(C, 15, E);
ema10:=Mov(C, 10, E);
ema5:=Mov(C, 5, E);
LE:= (ema150 > Ref(ema150, -1)
AND
ema50 > ema150)
AND
(ema15 >= ema5)
AND
ema5 >= ema10;
LX:= (ema150 < Ref(ema150, -1)
AND
ema50 < ema150);
SE:= 0;
SX:= 0;
B:= ExtFml("ForumDll.Latch", LE, LX, SE, SX);
B = 0 AND Ref(B, -1) > 0
no indicator builder:
- Código: Selecionar todos
ema150:= Mov(C, 150, E);
ema50:= Mov(C, 50, E);
ema15:= Mov(C, 15, E);
ema10:= Mov(C, 10, E);
ema5:= Mov(C, 5, E);
compra:= (ema150 > Ref(ema150, -1)
AND
ema50 > ema150)
AND
(ema15 > ema5)
AND
ema5 > ema10;
LongEntryValue:=ValueWhen(1,compra,C - 3 * ATR(20));
StopLongCondition:=Ref(C,-1)<LongEntryValue;
StopLongCondition
repara que o stop signal de 2007 é totalmente disparatado, assim como o de finais de 1998:
- Anexos
-
- dwer.png (15.03 KiB) Visualizado 1164 vezes
obrigadíssimo , dwer
como calcularás fui a correr testar (antes de falar com a ms
)
usei este código no stop signal:
sempre com com histórico desde o século passado funciona bem no tal caso de 2004, , mas no ano de 2003 o stop aparece muito acima do sinal de compra (2º gráfico);
também acontece o mesmo (stop muito acima do valor de entrada) em 2006/07 (ver 4º gráfico)
para despistar anomalias, acrescentei este código (para o 3º gráfico):
... e o stop volta a não aparecer... - deveria aparecer a 18/5/04 - entretanto o sinal de venda (das MM) aparece só a 11/8/04
como calcularás fui a correr testar (antes de falar com a ms

usei este código no stop signal:
- Código: Selecionar todos
ema150:= Mov(C, 150, E);
ema50:= Mov(C, 50, E);
ema15:= Mov(C, 15, E);
ema10:= Mov(C, 10, E);
ema5:= Mov(C, 5, E);
compra:= (ema150 > Ref(ema150, -1)
AND
ema50 > ema150)
AND
(ema15 > ema5)
AND
ema5 > ema10;
venda:= (ema150 < Ref(ema150, -1)
AND
ema50 < ema150)
AND
(ema15 < ema5)
AND
ema5 < ema10;
LongEntryValue:=ValueWhen(1,compra,C- 3 * ATR(20));
StopLongCondition:=Ref(C,-1)<LongEntryValue;
StopLongCondition
sempre com com histórico desde o século passado funciona bem no tal caso de 2004, , mas no ano de 2003 o stop aparece muito acima do sinal de compra (2º gráfico);
também acontece o mesmo (stop muito acima do valor de entrada) em 2006/07 (ver 4º gráfico)
para despistar anomalias, acrescentei este código (para o 3º gráfico):
- Código: Selecionar todos
LongEntryValue:=ValueWhen(1,compra,C- 3 * ATR(20));
StopLongCondition:=Ref(C,-1)<LongEntryValue;
****** BarsSince(COMPRA) < BarsSince(VENDA)AND *****
StopLongCondition
... e o stop volta a não aparecer... - deveria aparecer a 18/5/04 - entretanto o sinal de venda (das MM) aparece só a 11/8/04
- Anexos
-
- 2 abril 2004.png (12.02 KiB) Visualizado 1210 vezes
-
- 27 março 2003.png (9.9 KiB) Visualizado 1209 vezes
-
- com filtro.png (16.04 KiB) Visualizado 1204 vezes
-
- 4º gráfico.png (10.73 KiB) Visualizado 1204 vezes
Re: Re
rsacramento Escreveu:
- Código: Selecionar todos
ema150:= Mov(C, 150, E);
ema50:= Mov(C, 50, E);
ema15:= Mov(C, 15, E);
ema10:= Mov(C, 10, E);
ema5:= Mov(C, 5, E);
ENTRADA_LONGA:= (ema150 > Ref(ema150, -1)
AND
ema50 > ema150)
AND
(ema15 > ema5)
AND
ema5 > ema10;
SAÍDA_LONGA:= (ema150 < Ref(ema150, -1)
AND
ema50 < ema150)
AND
(ema15 < ema5)
AND
ema5 < ema10;
O sistema está catita, mas falta-lhe o famigerado stop loss!
ou seja, quero que o meu sistema mecânico incorpore stop losses
vou definir as condições do meu stop loss: (apenas um exemplo)
C_inicial = valor de fecho ao dia da entrada
ATR_inicial = valor do ATR ao dia da entrada
quero que apareça um sinal de saída (o tal stop) também sempre que:
C < C_inicial - ATR_inicial
inicialmente tentei usar a função ValueWhen, mas rapidamente me apercebi de que ela não servia para este caso
após várias conversas com o pessoal técnico da ms, chegou-se a este código:
LongEntryValue:=valuewhen(1,EntradaLonga,c-atr(how many periods?));
StopLongCondition:=ref(c,-1)<LongEntryValue;
condições para sair do trade longo:
SaidaLonga or StopLongCondition
pergunta lá aos toscos da equis se precisam de pessoal para assistir os clientes

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
Re: Re
Cem pt Escreveu:Amigo Sacramento:
A tua questão é um pouco confusa mas se bem percebi queres saber como introduzes um stop no programa, é isso? Funciona como ordem normal de anulação ou abertura de nova posição.
Por exemplo,
A) Se estiveres comprado ou longo um stop funciona como uma venda para ficares neutro: programas para um output positivo passar a zero.
B) Se estiveres vendido ou curto um stop funciona como uma compra para ficares neutro: programas para passar o resultado do output de negativo para zero.
C) Se estiveres neutro e for accionado um stop de compra passas de neutro a comprado ou longo: programas o output da posição para passar de zero a positivo (+1, por exemplo).
D) Se estiveres neutro e for accionado um stop de venda passas de neutro a vendido ou curto: programas o output da posição para passar de zero a negativo (-1, por exemplo).
Espero ter ajudado, a solução parece-me tão simples que provavelmente a tua dúvida será diferente e o mais provável será não ter ajudado a resolver o problema.![]()
Cem
infelizmente não, Cem, mas obrigado na mesma
vou dar um exemplo concreto:
por um momento imaginem que o meu sistema mecânico é um de médias móveis, assim:
- Código: Selecionar todos
ema150:= Mov(C, 150, E);
ema50:= Mov(C, 50, E);
ema15:= Mov(C, 15, E);
ema10:= Mov(C, 10, E);
ema5:= Mov(C, 5, E);
ENTRADA_LONGA:= (ema150 > Ref(ema150, -1)
AND
ema50 > ema150)
AND
(ema15 > ema5)
AND
ema5 > ema10;
SAÍDA_LONGA:= (ema150 < Ref(ema150, -1)
AND
ema50 < ema150)
AND
(ema15 < ema5)
AND
ema5 < ema10;
O sistema está catita, mas falta-lhe o famigerado stop loss!
ou seja, quero que o meu sistema mecânico incorpore stop losses
vou definir as condições do meu stop loss: (apenas um exemplo)
C_inicial = valor de fecho ao dia da entrada
ATR_inicial = valor do ATR ao dia da entrada
quero que apareça um sinal de saída (o tal stop) também sempre que:
C < C_inicial - ATR_inicial
inicialmente tentei usar a função ValueWhen, mas rapidamente me apercebi de que ela não servia para este caso
após várias conversas com o pessoal técnico da ms, chegou-se a este código:
- Código: Selecionar todos
bc := { your trade entry signal } ;
sla := { stop loss amount } ;
trade := If( PREV <= 0, If( bc, C - sla, 0 ),
If( C < PREV, -1, PREV ) );
stop:= Cross( trade = -1, 0.5 );
stop
mas após testes num histórico alargado, concluíu-se que este código também não funcionava
no primeiro gráfico do BES, reparem que (quando o histórico se inicia em 8/2003) aparece um sinal de compra (a 2 de abril) e poucos dias depois lá está o stop loss
mas se eu alargar o histórico um ano, (desde 2002), o sinal de stop já não aparece (onde devia!) (2º gráfico)
espero ter sido claro agora
PS: @Cem há algumas semanas deixei-te uma msg privada - quando puderes responder...
- Anexos
-
- 2003.png (9.52 KiB) Visualizado 1308 vezes
-
- 2002.png (11.39 KiB) Visualizado 1311 vezes
Re
Amigo Sacramento:
A tua questão é um pouco confusa mas se bem percebi queres saber como introduzes um stop no programa, é isso? Funciona como ordem normal de anulação ou abertura de nova posição.
Por exemplo,
A) Se estiveres comprado ou longo um stop funciona como uma venda para ficares neutro: programas para um output positivo passar a zero.
B) Se estiveres vendido ou curto um stop funciona como uma compra para ficares neutro: programas para passar o resultado do output de negativo para zero.
C) Se estiveres neutro e for accionado um stop de compra passas de neutro a comprado ou longo: programas o output da posição para passar de zero a positivo (+1, por exemplo).
D) Se estiveres neutro e for accionado um stop de venda passas de neutro a vendido ou curto: programas o output da posição para passar de zero a negativo (-1, por exemplo).
Espero ter ajudado, a solução parece-me tão simples que provavelmente a tua dúvida será diferente e o mais provável será não ter ajudado a resolver o problema.
Cem
A tua questão é um pouco confusa mas se bem percebi queres saber como introduzes um stop no programa, é isso? Funciona como ordem normal de anulação ou abertura de nova posição.
Por exemplo,
A) Se estiveres comprado ou longo um stop funciona como uma venda para ficares neutro: programas para um output positivo passar a zero.
B) Se estiveres vendido ou curto um stop funciona como uma compra para ficares neutro: programas para passar o resultado do output de negativo para zero.
C) Se estiveres neutro e for accionado um stop de compra passas de neutro a comprado ou longo: programas o output da posição para passar de zero a positivo (+1, por exemplo).
D) Se estiveres neutro e for accionado um stop de venda passas de neutro a vendido ou curto: programas o output da posição para passar de zero a negativo (-1, por exemplo).
Espero ter ajudado, a solução parece-me tão simples que provavelmente a tua dúvida será diferente e o mais provável será não ter ajudado a resolver o problema.

Cem
- Mensagens: 3200
- Registado: 4/3/2008 17:21
- Localização: 16
Pata-Hari Escreveu:Possivelmente porque queres dar uma ordem impossivel: Se o valor que gera o sinal é o de fecho, é impossivel fisicamente entrares a esse valor.
não, não
como disse, já conversei este assunto exaustivamente com a ajuda técnica do ms, e eles acabaram por atirar a toalha ao chão
dou-te um exemplo:
imagina que defines um stop loss (em longo) que seria o valor do fecho ao dia da entrada longa menos o valor do ATR(20) também ao dia da entrada
isto funciona após o primeiro sinal de compra, mas depois é o fiasco total
Sistemas mecânicos de trading
tenho o metastock
imaginem que escrevo um sistema completo
ok, testo-o num histórico adequado, etc etc
tudo bem
agora, quero colocar stops, que serão função do dia de entrada (valor do fecho e o valor de determinado indicador nesse dia)
tudo estragado - é impossível (tanto quanto me apercebi ao longo de extensas conversas com o apoio técnico do metastock) programar estes stops
de modo que os sinais que venha a ter quer no explorer, quer no expert advisor, quer nas simulações, são sinais - e valores - que não correspondem ao que eu quero realmente
já alguém passou por isto?
agradeço comentários e sugestões
imaginem que escrevo um sistema completo
ok, testo-o num histórico adequado, etc etc
tudo bem
agora, quero colocar stops, que serão função do dia de entrada (valor do fecho e o valor de determinado indicador nesse dia)
tudo estragado - é impossível (tanto quanto me apercebi ao longo de extensas conversas com o apoio técnico do metastock) programar estes stops
de modo que os sinais que venha a ter quer no explorer, quer no expert advisor, quer nas simulações, são sinais - e valores - que não correspondem ao que eu quero realmente
já alguém passou por isto?
agradeço comentários e sugestões
16 mensagens
|Página 1 de 1
Quem está ligado:
Utilizadores a ver este Fórum: Bing [Bot] e 112 visitantes