Resposta

Profit Trailing (no fechamento) ... como converter tick by tick?

23 respostas

Gaudio Fx

Assinante, bbp_participant, comunidade, 22 respostas.

Perfil da visita

8 anos atrás #115026

Entendo que ter um estudo empírico para ser relatado na negociação ao vivo é ótimo para ter a função SQ, mas deveríamos ter a capacidade de trabalhar melhor na estratégia, uma vez que você encontre um bom
Essas funções permitem que você use profit-trailing, breakeven, trailing stop-etc etc., mas para muitas estratégias, especialmente as mais agressivas, esperar pelo fechamento do candle é uma função que não precisamos.
Todas essas funções (para algumas estratégias) são inúteis se eu tiver que esperar até o fechamento da vela!
Afirmo que trabalho somente com tick-real!
mas cada um dos parâmetros de ponto de equilíbrio e de rastreamento está definido aguardando o fechamento da vela de entrada... por quê?
Centenas e centenas de estratégias implementadas por mim são definidas com o "trailing on close"... e seriam muito mais eficientes com um trailing tick por tick desde a entrada no mercado
Certamente, aguardar o fechamento do candle ajudará a não cair em overfitting ou ver boas estratégias que não funcionam ao vivo
mas deve ter a possibilidade de eliminar esse recurso quando você encontrar uma boa estratégia e, em seguida, trabalhar com melhor resultado no trailing, sem esperar pelo fechamento do candle
Alguém sabe como fazer? Preciso alterar o arquivo mql? Preciso excluir ou substituir algum código interno? Preciso definir o SQ?
Obrigado a todos
Giorgio

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

8 anos atrás #136500

//+------------------------------------------------------------------+
/**
 * Gerenciar a negociação - mover o SL para o ponto de equilíbrio ou trailing stop
 */
void manageStop() {

    if(!sqIsBarOpen) return;

... restante do código

Se você comentar o:

 

Se(!sqIsBarOpen) retornar;

 

linha como:

 

// se(!sqIsBarOpen) retornar;

 

Em seguida, a função manageStop será executada para cada tick, e todos os tipos de movimento de stop loss ocorrerão a cada tick, quando necessário. No entanto, isso aumentará muito a carga da CPU no computador.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

8 anos atrás #136504

.... e isso arruinará sua estratégia. Você verá que em 99% dos casos a execução de uma estratégia com trailing por tick em vez de barra aberta (como foi criada pela SQ) resultará em uma curva de patrimônio líquido negativa. Isso se deve simplesmente ao fato de a estratégia ter sido encontrada pelo SQ com um trailing na barra e ter sido criada dessa forma. Acelerar o trailing dessa forma mudará completamente toda a estratégia e não lhe trará nenhum benefício, mas você verá o que quero dizer quando fizer seus testes no MT4 com trailing por tick em vez de barra aberta;)


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Gaudio Fx

Assinante, bbp_participant, comunidade, 22 respostas.

Perfil da visita

8 anos atrás #136505

//+------------------------------------------------------------------+
/**
 * Gerenciar a negociação - mover o SL para o ponto de equilíbrio ou trailing stop
 */
void manageStop() {

    if(!sqIsBarOpen) return;

... restante do código

Se você comentar o:

Se(!sqIsBarOpen) retornar;

linha como:

// se(!sqIsBarOpen) retornar;

Em seguida, a função manageStop será executada para cada tick, e todos os tipos de movimento de stop loss ocorrerão a cada tick, quando necessário. No entanto, isso aumentará muito a carga da CPU no computador.

Obrigado pela resposta, amigo... então, comentei "if(!sqlsBarOpen) return;" com " // " e o resultado é este:

deste código padrão ...

 

neste momento:

 

mas depois dessa mudança nada mudou
Preciso mudar mais alguma coisa? Tentei configurar um trailing simples de 1 pip, mas não funciona!  :angry:
Tentei e tentei várias vezes ao alterar o tipo de trailing... de jeito nenhum!
o trailing só é ativado com o fechamento da vela.
Tenho certeza de que você pode resolver esse problema 😀 .  😀 ... por favor
obrigado novamente 
Giorgio

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

8 anos atrás #136510

Somente o getProfitTrailingByTick terá algum efeito se for definida com um número de pips como valor de retorno (essa função está em branco, portanto, não faz nada).

double getProfitTrailingByTick() {
   if (OrderType() == OP_BUY) {
      // valor longo aqui
   } else if (OrderType() == OP_SELL) {
      // valor curto aqui
   }

   return(0);
}

O outro tipo de stop trailing (que usa um ou mais indicadores) ainda será rastreado no fechamento, porque o valor do indicador só muda a cada barra:

double getStopTrailingByClose() {
   double value = 0;
   Se (OrderType() == OP_BUY) {
      value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1) + (0.8) * (MathAbs(iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, 1) - iMA(NULL, 0, 1872, 0, MODE_LWMA, PRICE_CLOSE, 1)));

   } else if (OrderType() == OP_SELL) {
      value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1) + (-0.8) * (MathAbs(iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, 1) - iMA(NULL, 0, 1872, 0, MODE_LWMA, PRICE_CLOSE, 1)));
   }

   return(value);
}

0

Gaudio Fx

Assinante, bbp_participant, comunidade, 22 respostas.

Perfil da visita

8 anos atrás #136513

Somente o getProfitTrailingByTick terá algum efeito se for definida com um número de pips como valor de retorno (essa função está em branco, portanto, não faz nada).

double getProfitTrailingByTick() {
   if (OrderType() == OP_BUY) {
      // valor longo aqui
   } else if (OrderType() == OP_SELL) {
      // valor curto aqui
   }

   return(0);
}

O outro tipo de stop trailing (que usa um ou mais indicadores) ainda será rastreado no fechamento, porque o valor do indicador só muda a cada barra:

double getStopTrailingByClose() {
   double value = 0;
   Se (OrderType() == OP_BUY) {
      value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1) + (0.8) * (MathAbs(iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, 1) - iMA(NULL, 0, 1872, 0, MODE_LWMA, PRICE_CLOSE, 1)));

   } else if (OrderType() == OP_SELL) {
      value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1) + (-0.8) * (MathAbs(iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, 1) - iMA(NULL, 0, 1872, 0, MODE_LWMA, PRICE_CLOSE, 1)));
   }

   return(value);
}

Desculpe... mas não executar por tick 🙁 eu compilo dessa forma, mas não tenho um trailing by tick... isso não está correto?

 

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

8 anos atrás #136514

Ok, é um pouco mais complicado pelo fato de que a função manageStop usa Close[1] como o preço atual. É claro que esse preço só muda a cada barra, portanto, o stop só é movido a cada barra.

         //------------------------------
         // lucro com trailing no TICK!!!!!
         trailingStopValue = getProfitTrailingByTick();
         se (trailingStopValue > 0) {
            if(OrderType() == OP_BUY) {
               tsLevel = Bid - trailingStopValue;
            } else {
  	            tsLevel = Ask + trailingStopValue;
            }

Altere o código conforme mostrado acima, substituindo close por Bid e Ask.

0

Gaudio Fx

Assinante, bbp_participant, comunidade, 22 respostas.

Perfil da visita

8 anos atrás #136515

Ok, é um pouco mais complicado pelo fato de que a função manageStop usa Close[1] como o preço atual. É claro que esse preço só muda a cada barra, portanto, o stop só é movido a cada barra.

         //------------------------------
         // lucro com trailing no TICK!!!!!
         trailingStopValue = getProfitTrailingByTick();
         se (trailingStopValue > 0) {
            if(OrderType() == OP_BUY) {
               tsLevel = Bid - trailingStopValue;
            } else {
  	            tsLevel = Ask + trailingStopValue;
            }

Altere o código conforme mostrado acima, substituindo close por Bid e Ask.

Eu mudei o Bid & Ask ... mas nunca mudei... não o rastro 🙁

pode ser que eu tenha que alterar "double close = Close [1]" ??
obrigado por toda a ajuda que vocês estão me dando 🙂

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

8 anos atrás #136516

Fiz essas alterações e o trailing by tick funcionou para mim:

 

211 2015.08.24 02:45 buy 11 1.00 1.56723 0.00000 0.00000 0.00000 0.00 9788.26
212 2015.08.24 02:45 modify 11 1.00 1.56723 1.54657 0.00000 0.00 9788.26
213 2015.08.24 02:50 modify 11 1.00 1.56723 1.56723 0.00000 0.00 9788.26
214 2015.08.24 02:52 modify 11 1.00 1.56723 1.56724 0.00000 0.00 9788.26
215 2015.08.24 02:52 modify 11 1.00 1.56723 1.56725 0.00000 0.00 9788.26
216 2015.08.24 02:52 modify 11 1.00 1.56723 1.56726 0.00000 0.00 9788.26
217 2015.08.24 02:52 modify 11 1.00 1.56723 1.56727 0.00000 0.00 9788.26
218 2015.08.24 02:52 modify 11 1.00 1.56723 1.56728 0.00000 0.00 9788.26
219 2015.08.24 02:53 modify 11 1.00 1.56723 1.56729 0.00000 0.00 9788.26
220 2015.08.24 02:53 modify 11 1.00 1.56723 1.56732 0.00000 0.00 9788.26
221 2015.08.24 02:53 modify 11 1.00 1.56723 1.56734 0.00000 0.00 9788.26
222 2015.08.24 02:53 modify 11 1.00 1.56723 1.56737 0.00000 0.00 9788.26
223 2015.08.24 02:53 modify 11 1.00 1.56723 1.56739 0.00000 0.00 9788.26
224 2015.08.24 02:53 modify 11 1.00 1.56723 1.56740 0.00000 0.00 9788.26
225 2015.08.24 02:56 s/l 11 1.00 1.56740 1.56740 0.00000 10.73 9798.99
 

0

Gaudio Fx

Assinante, bbp_participant, comunidade, 22 respostas.

Perfil da visita

8 anos atrás #136519

Tentei várias vezes, mas nada!
Pensei que talvez o problema fosse o fato de minhas ordens serem buystop e sellstop, mas percebi que suas ordens são ordens de mercado
Essa poderia ser a causa?
para definir o comando exato para ordens buystop e sellstop, talvez eu deva alterar outras coisas?
 
Mais uma vez, obrigado
 
Giorgio

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

8 anos atrás #136530

Você também precisa remover a linha "if (OrderOpenTime() >= Time[0])...", pois ela sai da função nesse ponto, desde que a ordem não tenha sido aberta por pelo menos uma barra. Portanto, ele só começará a rastrear (por tick, no seu caso) uma barra após a abertura da ordem. Se você remover essa linha, ele começará imediatamente 1 tick após a abertura da ordem.

 

Continuo dizendo: isso não resultará em nada mais lucrativo do que sua estratégia original; será pior, muito pior, se a estratégia for criada com trailing na barra. Dessa forma, você mata toda a estratégia, pois as próximas ordens também serão afetadas pelo fechamento antecipado das ordens anteriores. Essa é a maneira perfeita de se livrar de seu dinheiro, mas parece que você terá que aprender da maneira mais difícil:)


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

8 anos atrás #136532

//+------------------------------------------------------------------+
/**
 * Gerenciar a negociação - mover o SL para o ponto de equilíbrio ou trailing stop
 */
void manageStop() {

    //se(!sqIsBarOpen) return;
      
   double trailingStopValue, moveSLValue;
   double orderSL, normalOrderSL, orderOpen;
   double close = Close[0];
   double tsLevel, newSL;

   for(int i=0; i= Time[0]) continue; // saia se a ordem tiver acabado de ser aberta

         //------------------------------
         // lucro com trailing no fechamento
         trailingStopValue = getProfitTrailingByTick();
         se(trailingStopValue > 0) {
            if(OrderType() == OP_BUY) {
               tsLevel = close - trailingStopValue;
            } else {
  	            tsLevel = close + trailingStopValue;
            }
            orderSL = OrderStopLoss();
            normalOrderSL = getNormalSL(orderSL);
            newSL = getSpecialSL(tsLevel);

            Se (OrderType() == OP_BUY) {
               if(isSLCorrect(tsLevel) && (orderSL == 0 || normalOrderSL tsLevel) && !doublesAreEqual(orderSL, newSL)) {
     	            rettmp = OrderModify(OrderTicket(), OrderOpenPrice(), newSL, OrderTakeProfit(), 0);
     	         }
            }
         }

			//--------------------------------------------------------
   		// gerenciar o stop trailing no fechamento
         trailingStopValue = getStopTrailingByClose();
         se (trailingStopValue > 0) {
            orderOpen = OrderOpenPrice();
            orderSL = OrderStopLoss();
            normalOrderSL = getNormalSL(orderSL);
            newSL = getSpecialSL(trailingStopValue);

            Se (OrderType() == OP_BUY) {
              	if(isSLCorrect(trailingStopValue) && (orderSL == 0 || normalOrderSL trailingStopValue) && !doublesAreEqual(orderSL, newSL)) {
	           		rettmp = OrderModify(OrderTicket(), OrderOpenPrice(), newSL, OrderTakeProfit(), 0);
	           	}
	         }
         }

         //--------------------------------------------------------
         // gerenciar SL 2 BE (por tick)
         moveSLValue = getMoveSLValueByTick();
         se (moveSLValue > 0) {
            orderSL = OrderStopLoss();
            normalOrderSL = getNormalSL(orderSL);
            orderOpen = OrderOpenPrice();
            newSL = getSpecialSL(orderOpen);

            Se (OrderType() == OP_BUY) {
               if(isSLCorrect(orderOpen) && (close - orderOpen >= moveSLValue) && (orderSL == 0 || normalOrderSL = moveSLValue) && (orderSL == 0 || normalOrderSL > orderOpen) && !doublesAreEqual(orderSL, newSL)) {
                  rettmp = OrderModify(OrderTicket(), orderOpen, newSL, OrderTakeProfit(), 0);
               }
            }
         }
      }
   }
}
//+------------------------------------------------------------------+

Esse é o código completo a ser substituído, que rastreará seu pedido tick a tick.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Gaudio Fx

Assinante, bbp_participant, comunidade, 22 respostas.

Perfil da visita

8 anos atrás #136542

Muito obrigado, geektrader 😀 ... Vou tentar fazer isso uma vez e depois lhe informo

Mais uma vez, obrigado

0

Gaudio Fx

Assinante, bbp_participant, comunidade, 22 respostas.

Perfil da visita

8 anos atrás #136545

então:
Tentei de todas as formas, seja alterando o código dentro da estratégia (conforme indicado por você) e até mesmo criando uma estratégia manualmente, pelo StrategyQuant, no "Strategy Editor", mas não consigo obter o trailing nesun tick-by-tick
De fato, notei que, mesmo que eu crie qualquer estratégia simples com o StrategyQuant, se eu inserir um simples "profit-trailing", será criada automaticamente a configuração do trailing "on close" candle e nunca tick-by-tick.
Mesmo que você use a opção "Build Strategies", ao definir o tique real, nunca encontrará nenhum tique a tique
sempre, sempre, sempre "(no fechamento)"... de qualquer forma, não consigo ter o rastreamento mais rápido no preço tick-by-tick.
é incrível 🙁
Algum de vocês pode me dizer o que está errado? Vocês já criaram uma estratégia com trailing tick-by-tick?
Meu "StrategyQuant" nunca criou nenhuma estratégia com trailing tick-by-tick ... mas somente "on close"
Por quê?

0

Gaudio Fx

Assinante, bbp_participant, comunidade, 22 respostas.

Perfil da visita

8 anos atrás #136616

Ninguém pode me ajudar?
Alguém pode confirmar se o STRATEGYQUANT cria estratégias com rastreamento dinâmico tick-by-tick?
por que ele nunca criou uma trilha com tick-by-tick?
Não pretendo forçar a lucratividade, mesmo que não seja lucrativa... nunca criei nenhuma estratégia com trailing que não fosse "trailing (on close)"
Por quê?
if i tray to create manually ,it’s always the same (ON CLOSE)!! 🙁

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

8 anos atrás #136634

NÃO, o SQ só criará estratégias com trailing no BAR CLOSE, conforme explicado várias vezes aqui e em outros tópicos. A única coisa que você pode fazer é exportar um EA para o MT4 que faça o trailing ON TICK modificando o código MQL4 da maneira que já postamos para você várias vezes neste tópico. Isso NÃO mudará em nada o fato de que o SQ AINDA criará estratégias com trailing somente no fechamento da barra. E o motivo disso também foi explicado no fórum (por mim e por outros) algumas vezes.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Visualizando 15 respostas - 1 até 15 (de um total de 23)

1 2