Problema verificação do PositionsTotal

 

Bom dia.

Estou escrevendo uma EA e nela estou verificando a todo momento a quantidade total de posições pela função PositionsTotal(). Os testes estão todos sendo executados pelo ativo do mini-índice do BR (WINV-24), que tem como padrão o tick de 5 pontos. Acontece que enquanto o EA está rodando e a tem apenas 1 posição o  PositionsTotal() está fazendo a verificação correta, mas quando o número de posições aumenta, por exemplo passa para 3, o PositionsTotal() continua retornando o valor como se fosse 1 posição. 

Percebi que quando se aumenta a posição da conta (por ser uma conta netting) faz preço médio, e esse preço médio fica em um valor "quebrado", que seria fora do tick do ativo, poderia ser isso que está ocasionando esse erro na função  PositionsTotal() ? E se for isso, alguém teria uma ideia para solucionar a questão? 

Muito obrigado, amigos!!

 
gcmachado:

Bom dia.

Estou escrevendo uma EA e nela estou verificando a todo momento a quantidade total de posições pela função PositionsTotal(). Os testes estão todos sendo executados pelo ativo do mini-índice do BR (WINV-24), que tem como padrão o tick de 5 pontos. Acontece que enquanto o EA está rodando e a tem apenas 1 posição o  PositionsTotal() está fazendo a verificação correta, mas quando o número de posições aumenta, por exemplo passa para 3, o PositionsTotal() continua retornando o valor como se fosse 1 posição. 

Percebi que quando se aumenta a posição da conta (por ser uma conta netting) faz preço médio, e esse preço médio fica em um valor "quebrado", que seria fora do tick do ativo, poderia ser isso que está ocasionando esse erro na função  PositionsTotal() ? E se for isso, alguém teria uma ideia para solucionar a questão? 

Muito obrigado, amigos!!

Não tem problema, positionsTotal() está retornando as posições abertas conforme se espera. Acontece que quando voce abriu posição no ativo, ele criou a posição no Win, quando voce pediu pra comprar mais e a "nova" posição foi feita. A posição existente teve a quantidade e preço medio atualizado conforme voce relatou. Se voce quer ficar com posições separadas, voce tem que mudar para conta hedging e fazer esse preço medio na mão.

EDIT: e sobre a parte do preço medio estar fora do tick size do ativo, não tem problema porque é mais uma informação pro usuário.

 
Ricardo Rodrigues Lucca #:

Não tem problema, positionsTotal() está retornando as posições abertas conforme se espera. Acontece que quando voce abriu posição no ativo, ele criou a posição no Win, quando voce pediu pra comprar mais e a "nova" posição foi feita. A posição existente teve a quantidade e preço medio atualizado conforme voce relatou. Se voce quer ficar com posições separadas, voce tem que mudar para conta hedging e fazer esse preço medio na mão.

EDIT: e sobre a parte do preço medio estar fora do tick size do ativo, não tem problema porque é mais uma informação pro usuário.

Acho que agora eu estou entendendo... Quando coloco para retornar o PositionsTotal ele só me retorna se existe uma posição aberta ou não, mas sem considerar o valor total dela de acordo com o número de contratos? É isso mesmo?

No meu exemplo, assim que compra 1 contrato o PositionsTotal fica = 1. E então independente da quantidade de contratos que eu tiver (mesmo se eu comprar mais 2 contratos do mesmo ativo e ficar com um total de 3 contratos) ele vai continuar me retornando 1. Seria isso?

E ai para verificar a quantidade de contratos em questão vou precisar usar o Position_Volume?

Muito obrigado! Foi muito esclarecedor!!

 
gcmachado #:

Acho que agora eu estou entendendo... Quando coloco para retornar o PositionsTotal ele só me retorna se existe uma posição aberta ou não, mas sem considerar o valor total dela de acordo com o número de contratos? É isso mesmo?

No meu exemplo, assim que compra 1 contrato o PositionsTotal fica = 1. E então independente da quantidade de contratos que eu tiver (mesmo se eu comprar mais 2 contratos do mesmo ativo e ficar com um total de 3 contratos) ele vai continuar me retornando 1. Seria isso?

E ai para verificar a quantidade de contratos em questão vou precisar usar o Position_Volume?

Muito obrigado! Foi muito esclarecedor!!

Não, em conta netting é permitido somente uma posição por ativo por isso que tem esse comportamento. Em conta hedging, o positionTtotal retorna quantas posições voce tem que podem ser varias no mesmo ativo, já que ele mantem elas separadas. Mas em nenhum momento o PositionsTotal vai devolver numero de contratos ou volume, voce tem que selecionar a posição e recuperar, como disse o POSITION_VOLUME .

Veja o exemplo, compro 1 contrato, vendo 2 e compro mais 1. Tudo no mesmo ativo:

(i) Conta netting. PositionsTotal()=1 (é por ativo a consolidação). Total de contratos na posicao 1 do lado da venda;

(ii) Conta hedging. PositionsTotal()=3. Total de contratos: 1 comprado, 2 vendido e 1 comprado;