
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
posso perguntar se PositionSelect() verifica o lado do cliente ou o lado da corte?
Tenho a forte sensação de que o problema é causado pelo atraso onde o servidor (lado do corretor) está processando a solicitação e não atualizou o lado do cliente, por isso PositionSelect() é executado novamente.
Eu sinto fortemente que não há diferença quando usamos o modo cTrade vs MqlTradeRequest e a função Sleep deve ajudar a atrasar tudo para que nosso lado cliente seja "atualizado" antes que o PositionSelect() seja executado novamente, causando uma entrada dupla. Verificando na minha ficha de diário, >2013.12.20 08:35:00 Negociações '800****': compra de câmbio 0.01 EURUSD no mercado colocado para execução em 313 ms <
colocar o sono mais de 400 deve ser seguro????
O que você acha?
"Tenho a forte sensação de que o problema é causado pelo atraso onde o servidor (lado do corretor) está processando a solicitação e não atualizou o lado do cliente, por isso PositionSelect() funciona novamente".
Também acho que esta é a causa para a entrada dupla. Em meu código é teoricamente impossível enviar uma nova ordem se o tamanho da posição atual for igual ou maior que o tamanho máximo permitido da posição, portanto, quando a PositionSelect() não receber a tempo o status da posição atual, minha EA enviará uma nova ordem novamente.
"colocar o sono mais de 400 deve ser seguro???".
Quanto maior o intervalo de tempo, melhor, mas há um problema. Se você virar sua posição, em duas etapas (LONG to SHORT ou SHORT to LONG), este atraso de tempo extra pode ser a causa de um preço de execução ruim, especialmente durante um evento macroeconômico.
"Tenho a forte sensação de que o problema é causado pelo atraso onde o servidor (lado do corretor) está processando a solicitação e não atualizou o lado do cliente, por isso PositionSelect() funciona novamente".
Também acho que esta é a causa para a entrada dupla. Em meu código é teoricamente impossível enviar uma nova ordem se o tamanho da posição atual for igual ou maior que o tamanho máximo permitido da posição, portanto, quando a PositionSelect() não receber a tempo o status da posição atual, minha EA enviará uma nova ordem novamente.
"colocar o sono mais de 400 deve ser seguro???".
Quanto maior o intervalo de tempo, melhor, mas há um problema. Se você virar sua posição, em duas etapas (LONG to SHORT ou SHORT to LONG), este atraso de tempo extra pode ser a causa de um preço de execução ruim, especialmente durante um evento macroeconômico.
Não sei se o corretor joga à parte aqui, mas parece que nosso corretor é o mesmo. Alpari.
Tive mais 1 entrada dupla desde 03-10-2013. Eu utilizo os dois métodos para enviar meu pedido. Veja meu post anterior.
isto é o que acabei de implementar. espero que possa adorar o problema
isto é o que acabei de implementar. espero que possa adorar o problema
Acho que é muito importante encontrar a razão por trás desta questão, é claro que também é importante ter uma solução (Dormir ?) até que possamos entender completamente o que está acontecendo. Por isso, tento retomar a situação:
Concordo com a snella_moda que a melhor explicação é:
I think the problem is the (to slow) execution of the PositionSelect(Symbol()) function. Maybe, the new ticks come in so fast, the EA sends in a new order before it receives a response of the PositionSelect(Symbol()). So the current position size is not calculated properly. In my code, its theoretically impossible to send in a new/double order if the current position size is equal or greater than the max allowed position size, see code.
Mas é difícil de verificar.
Acho que o melhor a fazer é pedir conselhos à Metaquotes. Vou tentar isso.
A linha referente a "cada tick" pode ser o motivo pelo qual isso não acontece mais.
A função só é executada, quando uma nova barra aparece. Portanto, muito provavelmente, apenas o primeiro tick de uma barra pode executar uma troca. Após a primeira barra, o código recebe um "retorno" até que uma nova barra apareça. Talvez isso tenha sido resolvido para mim.
Acho que este pedaço de código é dos artigos:
A linha referente a "cada carrapato" pode ser a razão pela qual isso não acontece mais.
A função só é executada, quando aparece uma nova barra. Portanto, muito provavelmente, apenas o primeiro tique de uma barra pode executar uma negociação. Após a primeira barra, o código recebe um "retorno" até que uma nova barra apareça. Talvez isso tenha sido resolvido para mim.
Acho que este pedaço de código é dos artigos:
correção. Há uma dupla"Posição aberta em..." e 2 trocas foram abertas.