Um backtesting adequado deve buscar simular situações práticas do mercado (slippage, custo de operação, etc...)
Pessoal,
Gostaria da ajuda de vocês para resolver um dilema . Estou desenvolvendo uma estratégia e caso a operação vá pegar o stoploss, gostaria de fazer uma reversão da posição e ao mesmo tempo aumentar a posição.
Como poderia fazer isso?
Ja tentei algumas formas e não consegui.
if (IsBought) and (BuyPrice-200) then SellShortAtMarker(BuyPosition*3);
No exemplo acima, se vc está comprado e seu preço de entrada cair 200 pontos, ele vai vender a mercado com a quantidade que vc estava posicionado, multiplicando por 3x.
OBS: lembre-se que, se vc estava com 10 contratos comprados e multiplicar por 3x então vc vai ficar com 20 vendidos, uma vez que dos 30 contratos, 10 foram pra liquidar os 10 comprados.
abs
Obrigado @masker pela ajuda. Vou implementar e testar.
Abraços
Meu caro amigo, não funcionou.
Veja só como estou implementando
// REVERSÃO DE MÃO EM SITUAÇÃO DE LOSS DE 250 PONTOS
if (IsBought) and (Price <= BuyPrice-cAlvoReversaoEmPontos) then
begin
SellShortAtMarket(BuyPosition*3);
if isSold then
begin
StopV := SellPrice + cStopEmTicks*MinPriceIncrement;
StopValvo := SellPrice - cAlvoEmTicks*MinPriceIncrement;
StopVoffset := stopV + cStopOffsetEmTicks*MinPriceIncrement;
BuyToCoverStop(StopV,StopVoffset);
BuyToCoverLimit(StopValvo);
end;
end;
if (IsSold) and (Price >= SellPrice+cAlvoReversaoEmPontos) then
Begin
BuyAtMarket(BuyPosition*3);
if isBought then
begin
stopC := BuyPrice - cStopEmTicks*MinPriceIncrement;
StopCalvo := BuyPrice + cAlvoEmTicks*MinPriceIncrement;
StopCoffset := stopC - cStopOffsetEmTicks*MinPriceIncrement;
SellToCoverStop(StopC,StopCoffset);
SellToCoverLimit(StopCalvo);
end;
end;
Para explicar melhor o meu desejo é:
Compro e coloco um stopgain de 100 pontos e um stoploss de 125 pontos, eu quero que ao chegar nos 125 pontos (LOSS) eu reverta a posicao e dobre a mao
Ex: Comprado com 10 contratos, reverto a mao e fico vendido com 20 contratos e reajusto os stops loss e gain
tente assim:
// REVERSÃO DE MÃO EM SITUAÇÃO DE LOSS DE 250 PONTOS if isSold then begin StopV := SellPrice + cStopEmTicks*MinPriceIncrement; StopValvo := SellPrice - cAlvoEmTicks*MinPriceIncrement; StopVoffset := stopV + cStopOffsetEmTicks*MinPriceIncrement; BuyStop(StopV,0,SellPosition*3); BuyToCoverLimit(StopValvo); end; if isBought then begin stopC := BuyPrice - cStopEmTicks*MinPriceIncrement; StopCalvo := BuyPrice + cAlvoEmTicks*MinPriceIncrement; StopCoffset := stopC - cStopOffsetEmTicks*MinPriceIncrement; SellShortStop(stopC,0,BuyPosition*3); SellToCoverLimit(StopCalvo); end;
Obrigado amigo.
Para concluir, só uma coisa que ainda não consegui:
- Eu preciso saber se o preço está chegando no STOPLOSS que é 250 pontos, ou entao como eu excluo a ordem do stop loss e abro essa nova operação de reversão.
Estou tentando pegar o preço atual e verificar se ele é maior que o preço de venda + 250 pontos (alvo stoploss)
Não consigo fazer essa condição, a estratégia esta sempre pegando o meu STOPLOSS e encerrando a posição.
Veja só a minha condição que estou tentando:
// REVERSÃO DE MÃO EM SITUAÇÃO DE LOSS DE 250 PONTOS
if (IsBought) and (Price <= BuyPrice-cAlvoReversaoEmPontos*MinPriceIncrement) then
begin
stopC := BuyPrice - cStopEmTicks*MinPriceIncrement;
StopCalvo := BuyPrice + cAlvoEmTicks*MinPriceIncrement;
StopCoffset := stopC - cStopOffsetEmTicks*MinPriceIncrement;
SellShortStop(stopC,0,BuyPosition*3);
SellToCoverLimit(StopCalvo);
end;
if (IsSold) and (Price >= SellPrice+cAlvoReversaoEmPontos*MinPriceIncrement) then
begin
StopV := SellPrice + cStopEmTicks*MinPriceIncrement;
StopValvo := SellPrice - cAlvoEmTicks*MinPriceIncrement;
StopVoffset := stopV + cStopOffsetEmTicks*MinPriceIncrement;
BuyStop(StopV,0,SellPosition*3);
BuyToCoverLimit(StopValvo);
end;