Aleksey Lebedev: Em PositionGet sem a PositionSelect de antemão.
PositionSelect é chamado a cada tick e antes da última saída de informações no bloco 3, ele também funcionará. Portanto, esta não é, obviamente, a razão.
Yury Kirillov: Você está errado. PositionSelect é chamado em cada tick e antes da última saída de informações no bloco 3, ele também funcionará. Portanto, a razão obviamente não está neste caso.
Às vezes entendo errado, mas não é este o caso, claramente nisto)
Se PositionSelect(...)==falso, não há sentido em PositionGet.
Portanto: após o OrderSend a informação da posição pode ser recuperada não imediatamente... a assíncronia é um mal.
Concordo de bom grado - não tenho vergonha de admitir erros. Mas veja: antes de entrarmos no bloco 3, logo no início do manipulador OnTick() a PositionSelect() mencionada por você é chamada, e nenhuma OrderSend() é executada. No código, acrescentei intencionalmente um contador de atraso de 1000 ticks entre a execução dos blocos 1, 2 e 3 - é sobre assincronia, acho que no testador isto é mais do que suficiente para corrigir a posição. Além disso, mudei a condição no Bloco 3:
Conclusão: Você estava certo! Agora o bloco 3 não funciona, o que significa que a posição não é selecionada. Obrigado pelo diálogo! :-)
As colheres foram encontradas, mas o resíduo permanece: se não há mais posição, como o volume da posição pode ser 1?
O que não se encaixa com a documentação:
Функция PositionSelect() копирует данные о позиции в программное окружение, и последующие вызовы PositionGetDouble(), PositionGetInteger() и PositionGetString()
возвращают ранее скопированные данные. Это означает, что самой позиции может уже и не быть (или же она изменилась по объему, направлению и т.д.),
а данные этой позиции можно еще получать. Для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelect()
непосредственно перед обращением за ними.
Então chamarPositionSelect() com um resultado falso não atualiza as informações de posição? Que pena!
Em PositionGet sem a PositionSelect de antemão.
Michael, vamos ter outra "folha" com atrasos, está ficando entediante. :))))
Quando você vai para a abertura? :)))))))
Você está errado. PositionSelect é chamado em cada tick e antes da última saída de informações no bloco 3, ele também funcionará. Portanto, a razão obviamente não está neste caso.
Às vezes entendo errado, mas não é este o caso, claramente nisto)
Os valores dos dados da posição no momento em que a PositionSelect é chamada.
Os valores não são atualizados após o OrderSend.
Se PositionSelect(...)==falso, não há sentido em PositionGet.
Portanto: após o OrderSend a posição pode ser buscada não imediatamente... a assíncronia é um mal.
Às vezes entendo errado, mas não é este o caso, claramente nisto)
Os valores dos dados da posição no momento em que a PositionSelect é chamada.
Os valores não são atualizados após o OrderSend.
Se PositionSelect(...)==falso, não há sentido em PositionGet.
Portanto: após o OrderSend a informação da posição pode ser recuperada não imediatamente... a assíncronia é um mal.
Concordo de bom grado - não tenho vergonha de admitir erros. Mas veja: antes de entrarmos no bloco 3, logo no início do manipulador OnTick() a PositionSelect() mencionada por você é chamada, e nenhuma OrderSend() é executada. No código, acrescentei intencionalmente um contador de atraso de 1000 ticks entre a execução dos blocos 1, 2 e 3 - é sobre assincronia, acho que no testador isto é mais do que suficiente para corrigir a posição. Além disso, mudei a condição no Bloco 3:
{if((gTicks>3000)&&(Step==2)&&(PositionSelect())) { Print("INFO>> *** VOLUME=",PositionGetDouble(POSITION_VOLUME), " *** ID=",PositionGetInteger(POSITION_IDENTIFIER), " *** TYPE=",EnumToString((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)), " *** OrdersTotal()=",OrdersTotal()); Step=3; return; }}//if((gTicks>3000)&&(Step==2))O resultado não mudou: a ordem para fechar a posição é executada, mas o tamanho da posição permanece igual a 1.
:-(
{if((gTicks>3000)&&(Step==2)&&(PositionSelect()))não deve compilar... PositionSelect(_Símbolo)
não deve compilar... PositionSelect(_Símbolo)
não deve compilar... PositionSelect(_Símbolo
Corrigido _Símbolo.
Conclusão: Você estava certo! Agora o bloco 3 não funciona, o que significa que a posição não é selecionada. Obrigado pelo diálogo! :-)
As colheres foram encontradas, mas o resíduo permanece: se não há mais posição, como o volume da posição pode ser 1?
O que não se encaixa com a documentação:
Então chamarPositionSelect() com um resultado falso não atualiza as informações de posição? Que pena!
Então chamarPositionSelect() com um resultado falso não atualiza as informações de posição? Que pena!
Já se passaram 10 meses.....