
ok, 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=64806
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?
{ 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
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
rsacramento Escreveu:expert
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
LongEntryValue:=ValueWhen(1,compra,C- 3 * ATR(20));
StopLongCondition:=Ref(C,-1)<LongEntryValue;
****** BarsSince(COMPRA) < BarsSince(VENDA)AND *****
StopLongCondition
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:
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
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;
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
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.