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...