Boa tarde,
não existe uma função pronta para isso, mas a ideia é essa mesmo, utilizar a CopyTicks e analisar tick a tick.
O delta ou qualquer indicador que utiliza agressão, será mais custoso que a grande maioria dos indicadores encontrados por aqui, não tem jeito.
De qualquer forma tem como você otimizar isso sim.
Abs.
Boa tarde,
não existe uma função pronta para isso, mas a ideia é essa mesmo, utilizar a CopyTicks e analisar tick a tick.
O delta ou qualquer indicador que utiliza agressão, será mais custoso que a grande maioria dos indicadores encontrados por aqui, não tem jeito.
De qualquer forma tem como você otimizar isso sim.
Abs.
Muito obrigado pela contribuição, como eu já suspeitava, não tem pra onde fugir, ao trabalho então.
acho que esse código é um bom inicio...Se rodar e achar alguma melhoria nos de um feedback.
Obs.: ele busca a informação dos ultimos 10 ticks, por questões de teste/performance. Para o uso real eu vejo que deve ser consolidado dentro de um tempo delta, porem isso pode ser um pouco demorado, mas uma outra alternativa é implementar um Walk Forward no momento de receber esses ticks.
imagine:
0,1,2,3,4,5,6,7,8,9
0,1,2,3,4,5,6,7,8,9
0,1,2,3,4,5,6,7,8,9
0,1,2,3,4,5,6,7,8,9
.....
ulong start=0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { double x; start=0; start=GetMicrosecondCount(); funcX(x); Print("Time (MicroSecond): ",GetMicrosecondCount()-start); //--- } //+------------------------------------------------------------------+ void funcX(double &net_volume) { MqlTick ticks[]; int size = CopyTicks(_Symbol, ticks, COPY_TICKS_TRADE, 0, 10); if(size > 0) { for(int i=0; i<size; i++) { if((ticks[i].flags & TICK_FLAG_BUY) == TICK_FLAG_BUY) { net_volume += ticks[i].volume_real; } else if((ticks[i].flags & TICK_FLAG_SELL) == TICK_FLAG_SELL) { net_volume -= ticks[i].volume_real; } } } }
No meu caso acabou sendo suficiente calcular a agressão somente para o último candle de um timeframe, segue o código da função que retorna o volume acumulado da agressão de compra.
double GetAgressionVolumeBuy(ENUM_TIMEFRAMES timeframe = PERIOD_M1) { double volumeBuy = 0; MqlTick ticks[]; int size = CopyTicksRange(_Symbol, ticks, COPY_TICKS_TRADE, iTime(_Symbol, timeframe, 0) *1000, TimeCurrent()*1000); if(size > 0) { for(int i = 0; i < size; i++) { if((ticks[i].flags & TICK_FLAG_BUY) == TICK_FLAG_BUY) volumeBuy += ticks[i].volume_real; } } return volumeBuy; }
Pessoal implementei o meu código com base no disponibilizado pelo Jonathan.
No meu caso acabou sendo suficiente calcular a agressão somente para o último candle de um timeframe, segue o código da função que retorna o volume acumulado da agressão de compra.
Apenas uma sugestão, no último parâmetro você pode colocar 0 para simplificar.
veja se ajuda
https://www.mql5.com/en/articles/3708
sds
- www.mql5.com
Fala pessoal tudo bem com vocês?
Publiquei agora há pouco no CodeBase um indicador que fiz com base nesse e outros tópicos. Acredito que já sirva de ponto de partida pra muita gente.
Sinceramente adoraria ver esse projeto crescendo e se tornando robusto aqui na comunidade.
Link: https://www.mql5.com/pt/code/32914
- www.mql5.com
Pessoal,
E no caso, de eu querer trabalhar dentro de uma janela.
Basicamente, dentro de uma janela de X segundos se subir acumulado X ticks, abre uma posição.
O mesmo para ticks de queda.
No caso ele contaria dentro de uma janela somente os ticks de uma mesma direção, alguem teria alguma dica?
Pessoal,
E no caso, de eu querer trabalhar dentro de uma janela.
Basicamente, dentro de uma janela de X segundos se subir acumulado X ticks, abre uma posição.
O mesmo para ticks de queda.
No caso ele contaria dentro de uma janela somente os ticks de uma mesma direção, alguem teria alguma dica?
Usa a função CopyTicksRange.
- 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
Será que alguém conhece uma forma de obter o volume de agressão de compra e de venda separados?
A forma que pensei em fazer é utilizar a função CopyTicks e analisar cada um dos ticks, mas isso me parece muito custoso do ponto de vista computacional e um tanto complexo de implementar também.