Coloque esse código aqui, acho mais simples.
Agora basta por um if antes de enviar uma ordem.
if(possonegociar())
{
rotina de abertura...
}
//+------------------------------------------------------------------+ //| Função aut.negociar - www.toolstotrader.com | //+------------------------------------------------------------------+ bool possonegociar() { bool liberado = false; static int trade ; if(trade== 0 || trade != Bars(_Symbol,PERIOD_CURRENT)) { liberado= true; trade = Bars(_Symbol,PERIOD_CURRENT); } return(liberado); }
So vou comentar uma coisa uma coisa que aconteceu comigo, eu usava algo parecido com isso de testar usando o Bars, mas quando passei a limitar as barras no historico. Acabou que toda a vela nova ficava com o mesmo numero retornado de Bars e isso me obrigou a mudar...
Uma outra solução seria verificar quando possui uma nova vela. Para isso eu utilizo a seguinte função que retorna true quando tem uma nova vela.
bool HasNewBar() { static datetime horaAntiga = 0; datetime horaAtual = (datetime)SeriesInfoInteger(_Symbol, _Period, SERIES_LASTBAR_DATE); if(horaAntiga == 0) { horaAntiga = horaAtual; return false; } else if(horaAntiga != horaAtual) { horaAntiga = horaAtual; return true; } else { return false; } }
So vou comentar uma coisa uma coisa que aconteceu comigo, eu usava algo parecido com isso de testar usando o Bars, mas quando passei a limitar as barras no historico. Acabou que toda a vela nova ficava com o mesmo numero retornado de Bars e isso me obrigou a mudar...
Realmente é um problema, afinal nesse caso chega a um numero em que sempre vai ficar limitado, mas tem um jeito fácil de resolver:
//+------------------------------------------------------------------+ //| Função aut.negociar - www.toolstotrader.com | //+------------------------------------------------------------------+ bool possonegociar() { bool liberado = false; static datetime trade ; if(trade== 0 || trade != iTime(_Symbol,PERIOD_CURRENT,Bars(_Symbol,PERIOD_CURRENT))) { liberado= true; } return(liberado); } //+------------------------------------------------------------------+a verificação trade ==0 no fundo é irrelevante, já que ela sempre será diferente, nesse caso, do resultado do iTime.
Quando for assim Eliseu, coloca a solução que você achou aqui que ajuda a quem vir pesquisar o tópico no futuro.
Grande abraço
Olá.
//+------------------------------------------------------------------+ //| VERIFICAR SE JÁ ABRIU OPERAÇÃO NO CANDLE ATUAL | //+------------------------------------------------------------------+ TIME_Abertura_Ultimo_Candle=TimeToString((SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE)),TIME_SECONDS); if(Hora_Ultimo_Negocio < TIME_Abertura_Ultimo_Candle) { Operamos_Nesta_Vela=false; } if(Hora_Ultimo_Negocio > TIME_Abertura_Ultimo_Candle) { Operamos_Nesta_Vela=true; }
Na condição vai:
Operamos_Nesta_Vela=false
E se abrir posição nas { } vai:
Operamos_Nesta_Vela=true;
Time_Abertura_Ultimo_Candle
Não esquecer de criar as var's globais.
Espero que ajude!
Forte Abraço.

- 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
Olá pessoal, tudo bem ?
Preciso de ajuda para limitar a abertura de posições no mesmo candle, meu EA abre várias posições no mesmo candle, eu usava o como paliativo Sleep(); para impedir isso,
porém com alguns testes descobri que está interferindo no funcionamento do EA, pesquisando no fórum descobri esse código...
O que agradeço muito o Vinicius de oliveira, tentei implementar no código, mas ainda em alguns candles abre mais de uma posição.
Alguém poderia me ajudar ?
Desde já obrigado!