O copo está meio cheio ou meio vazio - como você analisa o copo e o aplica no comércio? - página 4

 
Alexey Kozitsyn:

E uma estratégia pode ser implementada. Uma espécie de "frontrunning" é possível.

Eu não quero dizer nada sobre estratégia - ainda não sei nada sobre eles. O vidro é conveniente para o ajuste de posição e descarga de posição, mas no vidro padrão atual você não pode ver o preço de sua posição, o que é muito desconfortável, não está nem mesmo claro porque uma necessidade tão óbvia não foi implementada.

 
Alexey Kozitsyn:

Se você pode fazer tudo isso até as linhas, você também pode fazer as linhas.

Onde mais encontrar um homem tão habilidoso...

 
Aleksey Vyazmikin:

Onde mais encontrar um homem tão habilidoso...

Você pode encontrar um, mas por quê? Para escrever tudo o resto por causa de uma linha no copo?

 
Alexey Kozitsyn:

Um faz-tudo pode ser encontrado, mas por quê? Por causa de uma linha no copo para escrever tudo o resto?

Os níveis de marcação são muito importantes. Mas, é bem possível simplesmente fazer uma indicação, e colocar as linhas na tabela e tirar os níveis a partir daí.

 

Olá, tentando otimizar a representação de dados no vidro, depois de criar um posto separado os palhaços locais enviaram spam para o tópico sem permitir que ele se desenvolva, talvez seja útil para alguém aqui. Aqui está um tópico com um indicador arbitrário.

https://www.mql5.com/ru/forum/231011

A idéia é escolher as informações que podem ser usadas para a previsão a partir de todos os níveis de mudança rápida e falsa no copo. Faço isto aplicando pesos arbitrários / números ordinais a cada nível.

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1

#property indicator_label1 "Delta"
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrBlack
#property indicator_width1 1

int iStart;
double iDelta[];

void OnDeinit(const int reason)
{
  string symbol = Symbol();

  MarketBookRelease(symbol);
}

void OnInit()
{
  string symbol = Symbol();

  SetIndexBuffer(0, iDelta, INDICATOR_DATA);
  ArraySetAsSeries(iDelta, true);

  IndicatorSetString(INDICATOR_SHORTNAME, "OrderBook");
  IndicatorSetInteger(INDICATOR_DIGITS, Digits());

  MarketBookAdd(symbol);
}

int OnCalculate(
  const int bars,
  const int counted,
  const datetime& time[],
  const double& open[],
  const double& high[],
  const double& low[],
  const double& close[],
  const long& ticks[],
  const long& volume[],
  const int& spread[]
)
{
  if (iStart == 0)
  {
    iStart = 1;
    ZeroMemory(iDelta);
  }
  else if (bars != counted)
  {
    iDelta[0] = iDelta[1];
  }

  string symbol = Symbol();

  double ask = SymbolInfoDouble(symbol, SYMBOL_ASK);
  double bid = SymbolInfoDouble(symbol, SYMBOL_BID);

  MqlBookInfo levels[];

  bool book = MarketBookGet(symbol, levels);

  int indexBuy = 1;
  int indexSell = 1;
  long volumeBuy = 0;
  long volumeSell = 0;

  if (book)
  {
    int size = ArraySize(levels);

    for (int k = 0; k < size; k++)
    {
      if (levels[k].price >= ask) 
      {
        volumeSell += indexSell * levels[k].volume;
        indexSell++;
      }
    }

    for (int k = size - 1; k >= 0; k--)
    {
      if (levels[k].price <= bid) 
      {
        volumeBuy += indexBuy * levels[k].volume;
        indexBuy++;
      }
    }
  }

  iDelta[0] = (double) (volumeBuy - volumeSell);
  
  return bars;
}
 
Andy Sanders:

Não é uma boa implementação.

1. As faias são melhor recebidas em uma função dedicada, caso contrário, você receberá saltos.

2. Sim, você pode desistir dos laços mais cedo. Você terá que realizar 20 verificações extras em cada uma delas.

A respeito da idéia - por favor, explique o que ela lhe dá? O que seu indicador faz? Como ajuda a identificar níveis "não falsos"?

 
Alexey Kozitsyn: Sobre a idéia - você pode explicar o que isso faz? O que seu indicador faz? Como ajuda destacar os níveis "não falsos"?

obrigado pelo comentário, vou otimizá-lo mais tarde
os tumblers que vi parecem mais ou menos os mesmos, duas paredes em cada lado do spread, e entre eles alguns volumes


1. níveis de gordura que mudam rapidamente ao redor do spread
2. [#2 na foto] mais adiante há uma parede com volume médio, mas que pode conter uma queda acentuada para cima, uma ordem não pode ser colocada atrás desta parede porque se o movimento for gradual, ela começará a se mover
3. [nas próprias bordas é uma espécie de volume de dragão, que parece ser capaz de resistir a qualquer tipo de tendência, mas na verdade ele também começará a se mover quando tivermos um movimento gradual.
4. muito provavelmente, entre os números 1 e 2 estão os volumes de robôs que estão tentando usar a parede de alguma forma e à medida que a parede se move, estes níveis mudam de forma síncrona.

A primeira idéia que vem à mente para analisar estes níveis é que se o volume total no topo for maior, significa que o market maker demonstra sua intenção de vender e mover o mercado para baixo, a demanda é maior, respectivamente, e vice versa. Mas esta suposição não é totalmente precisa, porque.

1. A posição dessas paredes está mudando e não podemos confiar nelas como suporte ou resistência, por isso não podemos considerar esses volumes de dragões também como Open Interest, essas ordens muito provavelmente nunca serão preenchidas e se moverão, então devemos de alguma forma excluir as paredes falsas da análise de Open Interest
2. Ao mesmo tempo, o movimento é normalmente iniciado por ordens do mercado e começa em torno do spread, além disso, é arriscado para os robôs brincar com ordens falsas em torno do spread, eles também podem ser executados, daí a suposição, que as intenções mais reais do mercado só podem ser vistas em pedidos em torno do spread, se o pedido for feito, eles querem que ele seja preenchido, mas contra o fundo das paredes falsas esses movimentos podem ser imperceptíveis, mais um motivo para remover do copo os volumes pseudo-grandes que estão longe do spread

Considerando o acima exposto, não podemos simplesmente descartar as pseudo-muralhas porque não temos uma definição clara onde está uma pseudo-muralha e onde está uma grande ordem, então nós apenas atribuímos pesos aos pesos da taça para prestar atenção apenas ao movimento em torno do espalhamento.

Цена | Обьем - Стандартный стакан

20    | 5
20.5  | 200
30    | 10
30.5  | 5
40    | 20
40.5  | 1         Итого: 241 контрактов на покупку

50

50.5  | 1
60    | 40
60.5  | 10
70    | 50
70.5  | 100
80    | 5         Итого: 206 контрактов на покупку
Em outras palavras, apenas somando os volumes pensamos que há muitos vendedores, mas esses 200 vendedores do topo nunca venderão nada...
Mas, quando correspondermos aos pedidos antes das paredes, os compradores estarão à frente dos compradores.
Vamos tentar usar balanças.
Цена | Обьем - Реалистичный стакан

20    | 5     х 1
20.5  | 200   х 2
30    | 10    х 3
30.5  | 5     х 4
40    | 20    х 5
40.5  | 1     х 6         Итого: 561 контрактов на покупку

50

50.5  | 1     х 6
60    | 40    х 5
60.5  | 10    х 4
70    | 50    х 3
70.5  | 100   х 2
80    | 5     х 1        Итого: 601 контрактов на покупку
Isto é mais realista. Talvez os pesos não devam ser lineares, mas geométricos em progressão, então veremos melhor. Além disso, queremos ver a dependência das mudanças de preços nos dados da pilha, por isso a adição correta de pesos nos permite ver como o preço muda dependendo do estado da pilha em uma determinada barra
 
Andy Sanders:


Portanto, somando os volumes, pensamos que há muitos vendedores, mas esses 200 vendedores do topo nunca venderão nada.
E quando correspondermos aos pedidos antes das paredes, os compradores estarão à frente dos compradores.
Vamos tentar usar balanças.
Isto é mais realista. Talvez os pesos não devam ser lineares, mas geométricos em progressão, neste caso, veremos melhor. Além disso, queremos ver a dependência das mudanças de preços nos dados da pilha, por isso a adição correta de pesos nos permite ver como o preço muda dependendo do estado da pilha em uma determinada barra

Esta é uma idéia interessante. Mas, é preciso levar em conta que os manda-chuvas usam lances de iceberg, ou seja, aqueles que se reabastecem no caso de tentarem ser comidos. E qual é a profundidade do vidro em que os níveis são pendurados - 6 de cada lado?

 
Aleksey Vyazmikin:

Esta é uma idéia interessante. Mas, é preciso levar em conta que os manda-chuvas usam lances de iceberg, ou seja, aqueles que se reabastecem no caso de tentarem ser comidos. E qual é a profundidade do vidro em que os níveis são pendurados - 6 de cada lado?

Acabei de me dar conta de que agora isso foi feito um pouco errado.
Há agora um ciclo desde a borda do copo até o spread, o número de ordem da iteração é o peso.
Neste caso, se os volumes forem pequenos, mas os níveis forem numerosos, obteremos pesos enormes perto do spread.

Portanto, é necessário, ao contrário, estabelecer o número de níveis analisados, por exemplo, 10 de cada lado e o peso máximo, e começar a colocar os pesos a partir do spread, em vez de a partir das bordas, mais próximo dos pesos das bordas diminuirá, até zero. Nesse caso, será mais correto analisar o movimento de preços em +- 10 pips, não importa quantos níveis tenham sido estabelecidos.

Como se livrar dos icebergs - não sei, em teoria, eles serão iguais de ambos os lados, portanto, não devem afetar a análise.

 
Andy Sanders:

A idéia é clara, obrigado. E por que não olhar apenas de que nível de alto volume (> X lotes) não é removido por algum período de tempo (> atualizações do copo Y) a fim de encontrar "paredes"? E marque esse ponto no gráfico com um ponto?

Isto filtraria imediatamente os robôs que arrastam grandes volumes para frente e para trás, já que eles não ficam em um único lugar por muito tempo.

Pode parecer assim:

Cada ponto é um nível de pelo menos 500 lotes com uma duração de pelo menos 150 atualizações de copos.

Razão: