Detecção de 5 dígitos - página 2

 
7bit:
Estou tentando escrever um código infalível que não se quebre.

Se fosse infalível, então eu não apostaria na estrutura de arquivo em bruto dos símbolos. É uma estrutura de arquivo 'interna' e indocumentada. Não há garantias de que não irá mudar em versões futuras.

 

Olá 7bit,

Acho que você está certo em tentar criar código à prova de balas.......mas sempre haverá limites.

Você só tem que olhar o feed de demonstração do The Collective FX, onde eles estão testando um feed independente combinado de diferentes provedores de liquidez (em oposição a um único feed agregado de múltiplas fontes), cada um com seu próprio sufixo de par de moedas (encontramos finalmente um uso para o sufixo?), para perceber o escopo do problema. Isto significa que dentro de 1 plataforma você poderá escolher entre EURUSD_fx ou EURUSDm ou EURUSD_dbfx como quiser. Isto, por si só, vai abrir um enorme buraco em sua estratégia, pois alguns destes são preços de 4 dígitos e outros 5 dígitos...

O "se (Dígitos == 3 || Dígitos == 5)" é tão abrangente quanto você vai encontrar, pois funciona com a simples premissa de que você só tem 2 tipos de corretores, ou seja, aqueles que têm pip feeds inteiros e aqueles que têm 1/10º pips feeds. Este caso cobre os 2/3/4/5 pares de moedas e corretores.

Para minha própria informação, você já viu algum caso que seria uma exceção? No caso do Gold, sempre foi uma cotação de 2 dígitos e os novos corretores de 1/10º pip a cotam como 3 dígitos, portanto, mesmo este caso está bem coberto.

Eu sugeriria simplesmente tratar quaisquer exceções que você encontre como tal e talvez código duro que problema particular, em vez de tentar encontrar uma solução de retenção.

 
kennyhubbard:


No caso do Gold, sempre foi uma cotação de 2 dígitos e os novos corretores de 1/10º pip a citam como 3 dígitos, portanto, mesmo este caso está bem coberto.

Já vi GOLD cotado com 1 dígito em um corretor de 4 dígitos. Não sei o nome do corretor porque isto foi quando estávamos testando meu gerador de sinais IRC em algum canal IRC, mas um de meus testadores fez negócios com GOLD e as citações vieram com 1 dígito. Perguntei a ele e ele disse que seu corretor era de 4 dígitos.

Este foi o momento exato em que decidi que a abordagem "3 ou 5" deveria ser fundamentalmente defeituosa e comecei a procurar algo melhor.
 
7bit:
Já vi GOLD cotado com 1 dígito em um corretor de 4 dígitos. [...] Este foi o momento exato em que decidi que a abordagem "3 ou 5" deve ser fundamentalmente imperfeita e comecei a procurar algo melhor.

Na Alpari UK, que geralmente é um corretor de 3/5 dígitos, o ouro é cotado a 2DP com um tick size de 0,05. Vi uma referência em algum lugar neste fórum a alguém que negociava tesouros americanos que eram cotados a 3DP. Entretanto, em tal caso, o tamanho do tick não teria sido 0,001.

Um caminho possível é verificar se a precisão em um símbolo é de 3/5 dígitos e também se o tamanho do tick é 0,001/0,00001. Alternativamente, dependendo exatamente do que você está tentando alcançar, você poderia tentar detectar pares de moedas, verificando se os primeiros seis caracteres consistem de dois símbolos de moeda conhecidos (isto é, usando uma lista de moedas reconhecidas com código rígido). Você também pode ser capaz de usar MODE_PROFITCALCMODE como uma forma de detectar símbolos forex, ao contrário de futuros/equities/etc, mas suspeito que isso pode não ser confiável entre corretores.

 
Em algum lugar entre LotSize, TickSize, TickValue, Point, Margin, etc... pode haver uma relação para resolver isso...
Eu sou muito ADD agora para descobrir isso :)), mas se alguém está interessado aqui são alguns links que eu refiro

- de Ais : LotSize,
- de fbj : Alavancagem, margem etc
 
A teoria da solução está no final da página 1, a menos que todos vocês pensem que é tão estúpido que não se deram ao trabalho de comentar.
 
Ruptor:
A teoria para a solução está no final da página 1, a menos que todos vocês pensem que é tão estúpido que não se deram ao trabalho de comentar.

Falando pessoalmente, eu não entendi seu cargo anterior. Acho que a pergunta original da 7bit é perguntar como lidar com cenários como os seguintes: "Há um parâmetro externo onde o usuário insere um valor em pips. Em alguns casos, o tamanho do pip que o usuário tem em mente é diferente do MODE_TICKSIZE informado pelo corretor - por exemplo, o corretor tem um tick size de 0,00001 mas o usuário está chamando um pip 0,0001. Existe uma maneira confiável de ler a mente do usuário e de trabalhar quando o valor do pip que ele entrou precisa ser ajustado, e por quanto?" Não existe uma resposta puramente matemática para isto, na linha que você parece estar sugerindo. É uma questão de uma convenção semi-arbitrária que um pip em, por exemplo, EURUSD é geralmente considerado como 0,0001, apesar de a maioria dos corretores citarem o símbolo a 5DP.

EDIT: ...que é por isso que o ouro etc. são tão complicados, porque há menos convenção acordada. Na Alpari UK, o ouro se move em incrementos de 0,05. Se você fizesse uma pesquisa de mercado e perguntasse quantos pips isso representava, eu acho que você obteria um número razoável de votos para cada uma das quatro respostas a seguir: 5, 1, 0,5 e 0,05.

 
Ruptor:
Não é apenas uma questão simples (talvez não tão simples em termos matemáticos) de se saber qual é um ponto relativo a um determinado preço e depois decidir qual é o dígito em comparação com os dígitos do preço?
Uma maneira simples de conseguir isso poderia ser pegar um preço adicionar um ponto e compará-lo com seu multiplicador + o mesmo preço se seu resultado não for o mesmo aumentar seu mutiplicador em um laço até que eles correspondam.

Ruptor,

Você o colocou de forma tão sutil que acho que não o recebi da primeira vez que o li. Eu ainda não :))). Você poderia, por favor, elaborar?

Alguns corretores como a GCI também listam futuros símbolos como S&P 500, IBM, Intel até a Disney... como isto se aplicaria então?

 
Olá cameofx
Uma imagem pinta mil palavras ou código neste caso. pipx é o que você tem que multiplicar Ponto por 1/10000 para obter um ponto que é o valor usual para negociar.
   double tmpx=MathCeil((Ask/10000)/Point);
   double pipx=1;
   while (tmpx>=10.0){
      pipx*=10;
      tmpx/=10;
   }
Ainda não é uma prova tola se a moeda se move para cima ou para baixo 10 vezes seu valor contra seu par, mas é impermeável aos dígitos da corretora em moeda estrangeira, penso eu.
 
Ruptor:
[...] Ainda não é uma prova tola se a moeda sobe ou desce 10 vezes seu valor contra seu par, mas é impermeável aos dígitos da corretora em moeda estrangeira, penso eu.

Estou francamente perplexo com isto. Por exemplo, se o preço do USDJPY caísse abaixo de 90, então este código começaria a reportar valores pipx diferentes em um corretor 3/5DP.

No momento, com USDJPY em cerca de 92,5, e com um corretor 3/5DP onde Point = 0,001, então tmpx/pipx são avaliados da seguinte forma:

  • 92.5 / 10000 = 0.00925
  • 0.00925 / 0.001 = 9.25
  • MathCeil() arredonda tmpx até 10
  • pipx é fixado em 10

Se o preço do USDJPY caísse abaixo de 90 (por exemplo, 89,5), a avaliação seria feita da seguinte forma:

  • 89.5 / 10000 = 0.00895
  • 0.00895 / 0.001 = 8.95
  • MathCeil() arredonda tmpx até 9
  • pipx permanece ajustado para 1, não 10

Em outras palavras, por razões que não entendo completamente, a definição deste código de um pip é sensível às mudanças de preço, e seu multiplicador passa de uma ordem de grandeza para outra com base no preço, e não (apenas) com base nas configurações do corretor. Ele teria dado resultados diferentes em momentos diferentes durante a semana passada. Em um corretor de 2/4DP, o pipx ficaria em 1 durante todo o tempo, em vez de variar entre 1 e 10.