Neo traderBot

Neo traderBot

Você sabia?

A NeoTraderBot é a primeira comunidade aberta no Brasil com foco em compartilhar informações sobre automatização de estratégias

leaf leftleaf right
Notifications
Clear all

[Solucionado] Limitar gain e loss no dia

4 Posts
3 Usuários
2 Reactions
179 Visualizações
(@leandro-silva)
Membro ativo
Registrou: 2 anos atrás
Posts: 4
Iniciador do tópico  

boa noite!!! se alguém souber e puder ajudar, gostaria de saber se é possível limitar o gain e loss diário na automação através do código?


   
Citar
(@admin)
Membro Admin
Registrou: 2 anos atrás
Posts: 216
 

Oi @leandro-silva!

De forma consistente que funcione em todas as situações não é possível atualmente controlar isso via código.

Os problemas que impactam uma possível solução é execução de mais de uma ordem no mesmo candle e aumento/redução de posição ou saídas parciais. Com o atual funcionamento da NTSL (e funções disponíveis) é difícil calcular com precisão (digo, corretamente) o preço médio nessas situações.

A maneira mais simples mesmo é configurar pela interface gráfica esses limites no Módulo de Automação.

 

Abs!


   
ReplyCitar
(@leandro-silva)
Membro ativo
Registrou: 2 anos atrás
Posts: 4
Iniciador do tópico  

Opa valeu pela resposa mestre, eu ia usar para fazer os backtest o jeito e continuar manualmene.

 

Obrigado !!!


   
Johnathas reacted
ReplyCitar
(@jacksonalves)
Novo membro
Registrou: 2 anos atrás
Posts: 1
 

Olá!

Como o Johnathas falou, realmente hoje não tem como de forma exata e correta determinar o Gain ou o Loss, principalmente quando se faz uso de ordens "ToCover" do tipo "limit" e "stop".

Eu tentei criar algo pra tentar chegar perto do resultado esperado, vou deixar aqui apenas como ideia, talvez para o seu objetivo te atenda de alguma forma.

 

Basicamente, eu entro no trecho abaixo se eu estiver posicionado, validando com HasPosition, depois se estiver posicionado em compra, calculo as variáveis, e depois de entrar nesse trecho, no final, novamente valido se existe posição aberta, caso não exista, é porque fechou em algum dos meus alvos (STOP ou GAIN).
Com isso eu calculo a diferença (variáveis nDifLOSS, nDifGAIN) do preço atual em prelação as variáveis nLOSS e nGAIN, se o preço estiver mais perto do nGAIN eu conto um gain, se estiver mais perto da nLOSS, eu conto loss.

Fiz dessa forma pois notei que em Backtest, em modo debug, notei que ele analisa o candle atual e fecha com a ordem ToCover no Candle seguinte, sendo assim, nunca bateria em cima do preço determinado, já que o preço quando executado em tempo real, ainda não foi atingido.

Em Backtest, funcionou muito bem esse código, porém em tempo real não funciona corretamente, pois ele conta Loss e Gain por proximidade, ou seja, o preço chega perto, ele já conta apenas de ter a validação do "Not HasPosition".

O Código em si é mais complexo, estou enviando um exemplo apenas, aqui eu uso Breakeven, e com isso tenho que checar se pegou no Loss com lucro, rsrs.

Quem sabe com essa ideia, alguém consiga desenvolver uma solução melhor. Mas realmente falta recursos do Profit para isso.

 

(Desculpem o código, ainda estou aprendendo).

if (HasPosition) then
  begin
    if (Position > 0) then
      begin
        nPrecoAtual := CLOSE;
        nPrecoEntrada := BuyPrice; 
        //CALCULO DO GAIN E LOSS QUANDO NAO ATINGIU O GATILHO
        nGAIN := (nPrecoEntrada + ALVO_GAIN);
        nLOSS := (nPrecoEntrada - ALVO_LOSS);
        //GAIN
        SellToCoverLimit(nGAIN);
        //STOP
        SellToCoverStop(nLOSS,nLOSS);
        //CHECANDO SE DEU GAIN OU LOSS
        if ( not (HasPosition)) then
          begin
            nDifGAIN := (CLOSE - nGAIN);
            nDifLOSS := (CLOSE - nLOSS);
            if (nDifGAIN < 0) then
              nDifGAIN := (nDifGAIN * ( - 1));
            if (nDifLOSS < 0) then
              nDifLOSS := (nDifLOSS * ( - 1));
            if (nDifGAIN < nDifLOSS) then
              iContaGain := (iContaGain + 1)
            else if (nDifLOSS < nDifGAIN) then
              iContaLoss := (iContaLoss + 1);
            if (LastBarOnChart) then
              plottext("T: " + iContaOperacoesTotal + "| G: " + iContaGain + " | L: " + iContaLoss,clAmarelo,2,7);
            bContouOperacao := false;
          end;
      end;
  end


   
Johnathas reacted
ReplyCitar