Fabiano,
o erro está na lógica do trailing, então se você postar o código completo eu poderia lhe ajudar.
PS: Por favor insira o código usando o Alt-S.
Obrigado pela ajuda Rogerio. O TP tamabém não está funcionando. essa á a função de compra: void Compra() { double precocompra = simbolo.Ask(); double stopcompra = simbolo.NormalizePrice((precocompra * (100-stop) / 100)); double takecompra = simbolo.NormalizePrice((precocompra * (100+take) / 100)); Print("Preço de compra: ", precocompra," Stop Loss: ", stopcompra," Take Profit: ", takecompra); //se houver ordem pendente, cancela antes de enviar nova ordem int ordemcancelada = CancelaOrdem(); Print ("quantidade de ordens canceladas: ", ordemcancelada); // verifica se existe posição, se existe posição de compra, não executa nova compra double posicaoatual = Posicao(); if (posicaoatual > 0) { Print("Posição de compra: ", posicaoatual,". Nova compra não enviada"); return; } // se existe posicao de venda, dobra o lote para compra, assim inverte a posição // se não existe posição nenhuma, envia compra com o lote parametrizado double lotenegociacao = 0; /* if(posicaoatual < 0) { lotenegociacao = -posicaoatual + lote; } else { lotenegociacao = lote; } negocio.Buy(lote, NULL, precocompra, stopcompra, takecompra,"compra com preco, sl e tp"); // negocio.Buy(lotenegociacao,NULL,0,0,0,"compra a mercado sem sl e tp"); */ //--- se a posição for fechada, aguardo 10 minutos para fazer nova operação if (posicaoatual < 0) { negocio.Buy(lote, NULL, 0, 0, 0,"compra para fechar posição"); } else { negocio.Buy(lote, NULL, precocompra, stopcompra, takecompra,"compra com preco, sl e tp"); // negocio.BuyStop(lote, precocompra, NULL, stopcompra, takecompra,0,0,"compra stop"); } hrultimaoper = TimeCurrent(); }
--conforme o preço vai subindo, também vou subindo o stoploss,
Anexe o código do trailing.
precoatual é a última cotação do papel.
precoatual = simbolo.Last();
Os valores estão todos corretos, o trigger que está sendo acionado em momento errado. Já olhei todo o diário, em diferentes datas, não dá erro nenhum.
Na configuração do testador você DIGITOU a moeda BRL ( Brasil Real ) ?
Rogerio,
no testador não aparece a opção de BRL, veja em anexo.
Rogerio,
no testador não aparece a opção de BRL, veja em anexo.
Então você digita BRL e bota para rodar!
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Estou fazendo backtest com dados históricos, e o stop loss não está funcionando. Tem dois casos:
1 – quando estou comprado, conforme o preço vai subindo, também vou subindo o stoploss, quando chega no valor de compra eu zero o stoploss, porém quando chega próximo do valor de compra, o trigger é acionado. Veja exemplo:
Comprei PETR4 à 25,63, no percurso cheguei com o stoploss em 25,62, o trigger foi acionado e vendeu à 25,89. É claro que tive lucro, porém poderia ter sido maior.
2 – O preço chega no stoploss mas o trigger não é acionado. Veja exemplo:
Comprei PETR4 à 26,85 (ticket 8), com stoploss em 26,58 às 13:37h. às 15:34h o preço fechou em 26,50, mas não fez a venda.
Código: estou usando o CTrade.
Lote = 100 (é parâmetro)
Stop = 1 (é parâmetro e tratado como percentual)
Take = 2 (é parâmetro e tratado como percentual)
double precocompra = simbolo.Ask();
double stopcompra = simbolo.NormalizePrice((precocompra * (100-stop) / 100));
double takecompra = simbolo.NormalizePrice((precocompra * (100+take) / 100));
negocio.Buy(lote, NULL, precocompra, stopcompra, takecompra,"compra com preco, sl e tp");