Il bicchiere è mezzo pieno o mezzo vuoto - come analizzare il bicchiere e applicarlo nel trading? - pagina 4

 
Alexey Kozitsyn:

E una strategia può essere attuata. Una sorta di "frontrunning" è possibile.

Non voglio dire nulla sulla strategia - non la conosco ancora. Il vetro è comodo per impostare e scaricare la posizione, ma nell'attuale vetro standard non si può vedere il prezzo della propria posizione, il che è molto scomodo, non è nemmeno chiaro perché una necessità così evidente non sia stata implementata.

 
Alexey Kozitsyn:

Se puoi fare tutto fino alle linee, puoi fare anche le linee.

Dove altro trovare un simile tuttofare...

 
Aleksey Vyazmikin:

Dove altro trovare un simile tuttofare...

Puoi trovarne uno, ma perché? Scrivere tutto il resto per il gusto di una riga nel bicchiere?

 
Alexey Kozitsyn:

Si può trovare un tuttofare, ma perché? Per il gusto di una riga nel bicchiere per scrivere tutto il resto?

Segnare i livelli è molto importante. Ma è possibile fare semplicemente un'indicazione, mettere le linee sul grafico e prendere i livelli da lì.

 

Ciao a tutti, sto cercando di ottimizzare la rappresentazione dei dati nel bicchiere, dopo aver creato un post separato i pagliacci locali hanno spammato l'argomento senza permettergli di svilupparsi, forse sarà utile a qualcuno qui. Ecco un argomento con un indicatore arbitrario.

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

L'idea è quella di scegliere le informazioni che possono essere utilizzate per la previsione da tutti i livelli in rapida evoluzione e falsi nella tazza. Lo faccio applicando pesi arbitrari / numeri ordinali ad ogni livello.

#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:

Non è una buona implementazione.

1. le faggiole si ricevono meglio in una funzione dedicata, altrimenti si ottengono dei salti.

2. Sì, puoi abbandonare i cicli prima. Dovrete eseguire 20 controlli extra in ognuno di essi.

Per quanto riguarda l'idea - per favore chiarisci cosa vuoi ottenere da essa. Cosa fa il tuo indicatore? Come aiuta a identificare i livelli "non falsi"?

 
Alexey Kozitsyn: Riguardo all'idea - puoi per favore spiegare cosa fa questo? Cosa fa il tuo indicatore? In che modo aiuta a evidenziare i livelli "non falsi"?

grazie per il commento, lo ottimizzerò più tardi
Le tumbler che ho visto sembrano più o meno le stesse, due pareti su ogni lato dello spread, e tra di loro alcuni volumi


1. livelli di grasso che cambiano rapidamente intorno alla diffusione
2. [#2 nell'immagine] inoltre c'è un muro con un volume medio, ma che può contenere una forte caduta verso l'alto, un ordine non può essere piazzato dietro questo muro perché se il movimento è graduale, inizierà a muoversi
3. [ai bordi c'è una specie di volume di drago, che sembra essere in grado di resistere a qualsiasi slittamento, ma in realtà inizierà anche a muoversi quando avremo un movimento graduale.
4. Molto probabilmente, tra #1 e #2 ci sono i volumi di robot che stanno cercando di usare il muro in qualche modo e mentre il muro si muove, questi livelli cambiano sincronicamente.

La prima idea che viene in mente per analizzare questi livelli è che se il volume totale in alto è maggiore, significa che il market maker dimostra la sua intenzione di vendere e spostare il mercato verso il basso, la domanda è maggiore, rispettivamente, e viceversa. Ma questo presupposto non è del tutto esatto, perché.

1. la posizione di questi muri sta cambiando e non possiamo fare affidamento su di essi come supporto o resistenza, ecco perché non possiamo considerare quei volumi di trascinamento come Open Interest, quegli ordini molto probabilmente non saranno mai riempiti e si sposteranno quindi dovremmo in qualche modo escludere i falsi muri dall'analisi dell'Open Interest
2. Allo stesso tempo il movimento è di solito avviato da ordini di mercato e inizia intorno allo spread, inoltre è rischioso per i robot giocare con ordini falsi intorno allo spread, potrebbero anche essere eseguiti, da qui la supposizione, che le intenzioni di mercato più reali possono essere viste solo agli ordini intorno allo spread, se l'ordine è piazzato, vogliono che sia riempito ma sullo sfondo delle pareti finte questi movimenti potrebbero essere impercettibili, una ragione in più per rimuovere dalla tazza pseudo-grandi volumi che stanno lontano dallo spread

Considerando quanto sopra, non possiamo scartare gli pseudo-muri perché non abbiamo una chiara definizione di dove sia uno pseudo-muro e dove sia un grande ordine, quindi assegniamo semplicemente dei pesi ai pesi della tazza per prestare attenzione solo al movimento intorno allo spread.

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

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 контрактов на покупку
In altre parole, solo sommando i volumi pensiamo che ci siano molti venditori, ma quei 200 venditori dall'alto non venderanno mai nulla...
Ma se facciamo coincidere gli ordini prima dei muri, i compratori saranno più avanti degli acquirenti.
Cerchiamo di usare le scale.
Цена | Обьем - Реалистичный стакан

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 контрактов на покупку
Questo è più realistico. Forse i pesi non dovrebbero essere lineari, ma geometrici in progressione, allora vedremo meglio. Inoltre, vogliamo vedere la dipendenza delle variazioni di prezzo dai dati dello stack, ecco perché la corretta aggiunta di pesi ci permette di vedere come il prezzo cambia a seconda dello stato dello stack su una certa barra
 
Andy Sanders:


Quindi, solo sommando i volumi pensiamo che ci siano molti venditori, ma quei 200 venditori dall'alto non venderanno mai nulla.
E quando gli ordini coincidono con i muri, i compratori saranno in vantaggio sugli acquirenti.
Cerchiamo di usare le scale.
Questo è più realistico. Forse i pesi non dovrebbero essere lineari, ma geometrici in progressione, in questo caso si vedrà meglio. Inoltre, vogliamo vedere la dipendenza delle variazioni di prezzo dai dati dello stack, ecco perché la corretta aggiunta di pesi ci permette di vedere come il prezzo cambia a seconda dello stato dello stack su una certa barra

Questa è un'idea interessante. Ma, bisogna tener conto che i pezzi grossi usano le offerte iceberg, cioè quelle che si ricaricano da sole nel caso in cui cerchino di essere mangiate. E qual è la profondità del vetro a cui sono appesi i livelli - 6 su ogni lato?

 
Aleksey Vyazmikin:

Questa è un'idea interessante. Ma, bisogna tener conto che i pezzi grossi usano le offerte iceberg, cioè quelle che si ricaricano da sole nel caso in cui cerchino di essere mangiate. E qual è la profondità del vetro a cui sono appesi i livelli - 6 su ogni lato?

Mi sono appena reso conto che ora è un po' sbagliato.
C'è ora un ciclo dal bordo della tazza alla diffusione, il numero d'ordine dell'iterazione è il peso.
In questo caso, se i volumi sono piccoli, ma i livelli sono numerosi, otterremo pesi enormi vicino allo spread.

Quindi è necessario, al contrario, impostare il numero di livelli analizzati, per esempio, 10 su ogni lato e il peso massimo, e iniziare a mettere i pesi dalla diffusione, piuttosto che dai bordi, più vicino ai bordi i pesi diminuiranno, fino a zero. In questo caso, sarà più corretto analizzare il movimento del prezzo di +- 10 pip, non importa quanti livelli sono stati impostati.

Come sbarazzarsi degli iceberg - non lo so, in teoria, saranno uguali su entrambi i lati, quindi non dovrebbero influenzare l'analisi.

 
Andy Sanders:

L'idea è chiara, grazie. E perché non guardare semplicemente da quale livello l'alto volume (> X lotti) non viene rimosso per un certo periodo di tempo (> Y aggiornamenti delle tazze) per trovare "muri"? E segnare quel punto sul grafico con un punto?

Questo filtrerebbe immediatamente i robot che trascinano grandi volumi avanti e indietro, poiché non rimangono a lungo in un posto.

Può apparire così:

Ogni punto è un livello di almeno 500 lotti con una durata di almeno 150 aggiornamenti della tazza.

Motivazione: