Criação e teste de estratégias de arbitragem - página 7

 
pronych:
Muito bem. Falaremos sobre isso quando se vai para ordens de limite com estas pernas)).
Concordo, será um pouco difícil controlar um enxame de ordens de limite ))
 

Vou começar um novo tópico.

Esta questão pode surgir quando estamos a definir a liquidez para a posição de arbitragem.
Como recalcular correctamente a liquidez de um par cruzado em unidades USD sobre uma banda melhor (e porquê)?

1) directamente através da maioria na moeda base
2) via major em moeda cotada

Exemplo: O volume no EURCHF Best Bund é de 2 milhões de unidades. Tem de verificar este volume em USD. O que devemos fazer? Olhamos para o ticker EURUSD e estimamos quanto é de 2 milhões de euros. Ou, estimamos o volume em CHF à taxa de câmbio actual e depois usamos o tenge USD/DCHF para determinar o volume em USD?

 
GaryKa:

Vou começar um novo tópico.

Esta questão pode surgir quando estamos a definir a liquidez para a posição de arbitragem.
Como recalcular correctamente a liquidez de um par cruzado em unidades USD sobre uma banda melhor (e porquê)?

1) directamente através da maioria na moeda base
2) via major em moeda cotada

Exemplo: O volume no EURCHF Best Bund é de 2 milhões de unidades. Tem de verificar este volume em USD. O que devemos fazer? Olhamos para o ticker EURUSD e estimamos quanto é de 2 milhões de euros. Ou, estimamos o volume em CHF à taxa de câmbio actual e depois usamos o tenge USD/DCHF para determinar o volume em USD?

E através do valor do tick, não?
 

Vi a solução através do TickValue. Mas o caso é geral (não MT) e além disso, vou ser honesto, manipular o TickValue dá-me uma dor de cabeça. Gostaria de uma explicação simples, que seria fácil de lembrar.

Até agora, é assim:

Em Ask gangs, temos uma oferta para venda, pelo que os vendedores têm a mercadoria(moeda base) disponível. Apenas calculamos o seu custo noutra moeda de cotação (USD). No lado oposto do banco de licitação não temos nenhum produto disponível para comprar, mas temos fundos (na moeda cotada). Através do major correspondente, recalcular estes fundos.

Total:

  • por Ask gangs contar (1) maneira
  • Para os gangs de licitação calculamos de (2) forma
 
Estás a brincar... Ou não compreendo o que está a dizer. Então pensa que 1 volume de lote por exemplo no EURUSD é igual a 1 volume de lote em qualquer outro símbolo?
 
GaryKa: ... Então, pensa que 1 volume de lote por exemplo em EURUSD é igual a 1 lote em qualquer outro símbolo?

Para pares com a mesma moeda base, a comparação por lotes é aceitável, porque as unidades são as mesmas. Por exemplo, volumes para EURCHF e EURUSD.


papaklass:

Alguns vendedores da banda EURUSD ASK = 2,0 milhões, ou seja, os vendedores querem vender 2 000 000 / 100000 = 20 lotes de EUR e comprar 2 000 000 / 136345 = 14,67 lotes de USD.

Outros vendedores de GBPUSD ASK-band = 3,5 milhões, ou seja, os vendedores querem vender 3 500 000 / 100000 = 35 lotes de GBP e comprar 3 500 000 / 164349 = 21,3 lotes de USD.

Como resultado temos que no momento querem comprar 14,67 + 21,3 = 35,97 lotes USD por euro e libra. Pode-se calcular qualquer moeda desta forma.

Neste exemplo, tem pares importantes que têm a mesma moeda de cotação. A simples comparação por lotes não é aceitável: 20 lotes de eur e 35 lotes de libra esterlina. Por conseguinte, converter e obter volumes em lotes USD: 14,67 e 21,3, que já podem ser comparados.


A questão era um pouco diferente? Como se calcula o volume para um par de cruzes? Mostrar-me com ou sem lotes. Por exemplo, como comparar o volume de EURCHF e AUDNZD?

GaryKa: ... Como recalcular correctamente a liquidez na melhor banda de um par cruzado em unidades USD (e porquê)?
 

Aqui está outra opção para a posição de arbitragem, para calcular lotes para cada símbolo para negociar o máximo de liquidez possível sem conversão para unidades comuns.

Suponha que temos uma arbitragem triangular do tipo A/B, B/C, C/A

1) Começar do primeiro símbolo até ao último. Tomar o volume A no primeiro par (lembrar como tamanho de ordem A/B) e calcular o volume B (converter A para B). Se o volume obtido for maior do que o de B/C, vamos ao ponto 2. Se for menor, memorizamos este volume (como tamanho de encomenda para B/C), calculamos C, comparamo-lo, etc. Chegámos com sucesso ao fim da cadeia -> já temos volumes para encomendas, saída.

2) Fazer um turno cíclico (era A/B, B/C, C/A tornou-se B/C, C/A, A/B ), e voltar ao ponto 1)

 
papaklass: ... Expressar os volumes para estas moedas através das garantias exigidas na abertura de posições. Assim, obtenha os volumes destas moedas em USD e compare-os.
Boa sugestão.

Vamos calcular por nós próprios a margem que nos será (obrigatoriamente) deduzida na moeda de depósito em USD se:

- Queremos comprar 1 lote de EURCHF.
Comprar EURCHF é comprar EUR por CHF. Não temos CHF. Pedimo-los emprestados ou compramo-los nós próprios (com uma alavancagem de 1:1). Por outras palavras, temos USD (depósito) e temos de comprar CHF (ou não comprar se o crédito estiver disponível em CHF) a fim de comprar EUR. Isto significa que para comprar EURCHF, temos de realmente (alavancagem 1:1) ou virtualmente vender USDCHF (vender USD do depósito, comprar CHF), a um preço de mercado (na pior das hipóteses).

- Queremos vender 1 lote de EURCHF.
A venda do EURCHF está a vender EUR por CHF. Não temos EUR (não temos nada para vender). Ou os pedimos emprestados ou compramo-los nós próprios (com uma alavancagem de 1:1). Por outras palavras, temos USD (depósito) e temos de comprar EUR (ou não comprar, se o crédito nos for concedido em EUR) para comprar CHF. Significa que para vender EURCHF, temos realmente (alavancagem 1:1) ou praticamente comprar EURUSD (vendendo USD do depósito, comprando EUR), ao preço de mercado (no pior dos casos).

Resumindo:
  • ao comprar EURCHF, a margem de crédito em USD deve ser calculada utilizando preços USDCHF
  • na venda do EURCHF, a margem de crédito em USD deve ser calculada utilizando os preços EURUSD


Agora vamos rever o seu código. Na minha opinião, falta à função um argumento que seria responsável pela direcção do negócio. Tem uma margem variávelCurrency, que é sempre definida como moeda base. Por conseguinte, a margem para a venda e compra do EURCHF é sempre calculada através do EURUSD.

   string marginCurrency = StringSubstr( StringTrimLeft( smb ), 0, 3 );

...


   if( calcCurrency == "" ){
      calcCurrency = GetSymbolByCurrencies( marginCurrency, accCurrency );
      mode = true;
     
      if( calcCurrency == "NULL" ){
         calcCurrency = GetSymbolByCurrencies( accCurrency, marginCurrency );
         mode = false;
      }
   }


P.S. Estou curioso em saber até que ponto os seus cálculos de margem agora coincidem com os da MT, especialmente porque já houve reivindicações semelhantes a eles antes.

 
papaklass:

A julgar pelo silêncio, nem tudo é claro.

Resposta com números à pergunta: "Como se calcula o volume para um par de cruzes? Mostrar-me com ou sem lotes. Por exemplo, como comparar volumes no EURCHF e AUDNZD"?

Para descobrir a diferença em lotes, divido as taxas das principais moedas no numerador. A moeda de penhor é a moeda que está no numerador.

EURUSD / AUDUSD -> 1,36368 / 0,90639 = 1,50451, ou seja, o volume da posição AUDNZD a ser aberta deve ser 1,50 vezes superior ao EURCHF.

Porque é que divido as majors?

Não compreendo este posto. Assim, contando desta forma conclui que o volume em AUDNZD (em USD) é aproximadamente 1,5 vezes maior que o volume em EURCHF (em USD). Certo?

 
papaklass: ... Agora sobre o meu código para o cálculo da margem. Comentei detalhadamente o assunto. Não é difícil de ler e compreender? A margem é calculada por outra função... Veja o código após o comentário "//receber o preço actual para a direcção especificada".

Papaklass acalme-se ou vamos entrar numa discussão. Olhei para o seu código antes de comentar, olhou para o meu comentário? Cuidadosamente?


A minha queixa ao vosso método de cálculo (pelo exemplo do cálculo do EURCHF) .

GaryKa: ... Calcula sempre a segurança tanto para vender como para comprar EURCHF através de EURUSD.

Após o comentário "//fetch o preço actual para a direcção especificada", calcula-se sempre os preços com o mesmo símbolo tanto quando se compra como quando se vende , enquanto eu acredito que se deve calculá-los com símbolos diferentes (justificação acima).

   prc = Dbl_If( dir == OP_BUY, MarketInfo( calcCurrency, MODE_ASK ),
                                MarketInfo( calcCurrency, MODE_BID ) );

No exemplo do EURCHF, tem sempre EURUSD.


P.S. que foi desnecessário, desculpe

GaryKa: ... Na minha opinião, falta à função o argumento que seria responsável pela direcção do ofício ...