玻璃杯是半满还是半空--你如何分析玻璃杯并在交易中应用它? - 页 4

 
Alexey Kozitsyn:

并且可以实施一项战略。一种 "跑前跑后 "是可能的。

我不想说任何关于战略的事情--我还不知道他们的情况。这块玻璃对于仓位设置和仓位排放是很方便的,但在目前的标准玻璃中,你无法看到你的仓位价格,这不是很方便,甚至不清楚为什么这样一个明显的需求没有得到实现。

 
Alexey Kozitsyn:

如果你能把所有的事情都做完,你也可以做线条。

哪里还能找到这样的勤杂工...

 
Aleksey Vyazmikin:

哪里还能找到这样的勤杂工...

你可以找到一个,但为什么?为了杯子里的一行字而写下其他一切?

 
Alexey Kozitsyn:

可以找到一个勤杂工,但为什么?为了在杯子里的一行字写下其他东西?

标记水平是非常重要的。但是,很有可能简单地做出指示,并把线放在图表上,然后从那里提取水平。

 

你好,试图优化玻璃中的数据表现,在创建了一个单独的帖子后,当地的小丑们已经把这个话题垃圾化了,没有让它发展下去,也许它对这里的人有用。这里有一个带有任意指标的主题。

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

我们的想法是,从杯中所有快速变化的假水平中选择可用于预测的信息。我是通过对每个级别应用任意的权重/序号来做到这一点的。

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

不是一个好的实施。

1.山毛榉最好在专门的职能部门接收,否则会出现跳闸。

2.是的,你可以提前退出循环赛。你将不得不在每个人身上进行20次额外的检查。

关于这个想法--请澄清你想从中得到什么。你的指标是做什么的?它如何帮助识别 "非虚假 "水平?

 
Alexey Kozitsyn: 关于这个想法--能不能请你解释一下这有什么作用?你的指标是做什么的?突出 "非假 "的水平有什么帮助?

谢谢你的评论,我以后会优化它。
我所看到的眼镜看起来差不多,在传播的每一侧都有两面墙,在它们之间有一些体积。


1.传播周围的脂肪快速变化的水平
2.[图片中的#2]再往前走,有一堵中等体积的墙,但它可能会保持急剧向上的下跌,订单不能放在这堵墙后面,因为如果运动是渐进的,它将开始移动
3.[在最边缘是某种龙卷风,似乎能够抵御任何一种趋势,但事实上,当我们有一个渐进的动作时,它也会开始移动。
4.最可能的是,在#1和#2之间是那些试图以某种方式使用墙壁的机器人的数量,随着墙壁的移动,这些水平也在同步变化。

分析这些水平,首先想到的是,如果顶部的总成交量更大,就意味着做市商展示了其卖出的意图,并使市场向下移动,需求更大,分别是,反之亦然。但这个假设并不完全准确,因为。

1.这些墙的位置是变化的,我们不能依靠它们作为支撑或阻力,这就是为什么我们不能把这些龙卷也看作是公开利益,这些订单很可能永远不会被执行,并且会移动,所以我们应该以某种方式把假墙从公开利益分析中排除。
2.同时,运动通常是由市场订单发起的,并在价差周围开始,此外,对于机器人来说,在价差周围玩假的订单是有风险的,它们也可能被执行,因此假设。最真实的市场意图只能在价差周围的订单上看到,如果订单被放置,他们希望它被填补,但在假墙的背景下,这些运动可能是不可察觉的,这也是将远离价差的伪大卷从杯中移除的另一个原因。

考虑到上述情况,我们不能直接抛弃伪墙,因为我们没有明确的定义,哪里是伪墙,哪里是大单,所以我们只是给杯子的权重分配,只关注价差周围的运动。

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

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 контрактов на покупку
换句话说,仅仅通过把数量加起来,我们就认为有很多卖家,但那200个来自顶部的卖家永远不会卖出任何东西......。
但当我们在墙壁前匹配订单时,买家就会领先于买家。
让我们试着使用天平。
Цена | Обьем - Реалистичный стакан

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 контрактов на покупку
这是更现实的。也许权重不应该是线性的,而应该是几何级数的递增,那么我们会看到更好的结果。此外,我们希望看到价格变化对堆栈数据的依赖性,这就是为什么正确地添加权重使我们能够看到价格是如何根据某一栏的堆栈状态而变化的。
 
Andy Sanders:


因此,只是把数量加起来,我们就认为有很多卖家,但那200个来自顶部的卖家永远不会卖出任何东西。
而当我们在墙壁前匹配订单时,买家就会领先于买家。
让我们试着使用天平。
这是更现实的。也许权重不应该是线性的,而应该是几何级数的,在这种情况下我们会看得更清楚。此外,我们希望看到价格变化对堆栈数据的依赖性,这就是为什么正确地添加权重使我们能够看到价格是如何根据某一栏的堆栈状态而变化的。

这是个有趣的想法。但是,你必须考虑到大人物使用冰山标的,即在他们试图被吃掉的情况下,自己重新填充。那么,悬挂水平仪的玻璃深度是多少呢--两边都是6?

 
Aleksey Vyazmikin:

这是个有趣的想法。但是,你必须考虑到大人物使用冰山标的,即在他们试图被吃掉的情况下,自己重新填充。那么,悬挂水平仪的玻璃深度是多少呢--两边都是6?

我刚刚意识到,现在做得有点不对。
现在有一个从杯子边缘到传播的循环,迭代的顺序号是重量。
在这种情况下,如果交易量很小,但水平很多,我们将在价差附近获得巨大的权重。

因此,有必要,相反,设置分析水平的数量,例如,每边10个和最大的重量,并开始从传播,而不是从边缘放置权重,接近边缘的权重将减少,直到零。在这种情况下,以+-10点来分析价格走势会更正确,无论设置了多少个水平。

如何摆脱冰山--我不知道,从理论上讲,冰山在两边是相等的,所以它们应该不会影响分析。

 
Andy Sanders:

这个想法很清楚,谢谢你。为什么不直接看哪一级的高成交量(>X手)在一段时间内(>Y杯的更新)没有被移除,以便找到 "墙"?并在图表上用一个点标记该点?

这将立即过滤掉那些来回拖动大批量的机器人,因为它们不会在一个地方停留很久。

它可能看起来像这样。

每个点是一个至少500手的水平,持续时间至少为150杯的更新。