文章 "价格直方图(市场概况)及其在 MQL5 中的实施" - 页 10

 
你好,有谁知道如何修改 "ClassExpert "代码以建立每周或每月市场概况?我请求帮助
 
你好,我找不到附件!只有价格表。
 
Thiago Duarte:

删除"Delete() "命令就可以了。

事实上,delete 函数在声明时没有类型;将其设置为 "void "后,它就能重新正常工作了。
 

大家好,我非常喜欢这个指标,我已经学习了一段时间的市场剖面图,这是目前发现的最好的指标。


我只是改变了计算剖面的方法,我使用了成交量刻度,而不是只验证价格是否在该 上。我这样做的原因是,如果你看到,不同时间的交易有不同的磅数,你可以在成交量柱状图中看到。因此,我们不能只计算价格是否在那里,而是要加上一个。


您同意吗?


我所做的更改显示了两种方法之间的差异

 
有人知道是否有可能只在 POC 的这几行中让机器人背叛吗?因为我正在测试 ClassPriceHistogram 文件中的所有变量,而这些变量的值都是零,谁能帮帮我?
 
Hi Luiz@Luiz Vinicius Pereira Rocha - 伙计,我是编程新手,我正在开发一个只跟踪 POC、高估值和低估值的 EA,结果发现了这个指标。但是,我找不到它存储 POC 点数的地方,当我对作者的一些变量(如:Poc_value)使用打印功能时,会出现零值。
 

你好,德米特里、

首先感谢您的优秀文章和工作!

虽然这是你很久以前发表的文章,但它运行得很好。

我在这里为您和社区提供的是一个更新,以便让直方图使用 tickvolume,因为在成交量几乎为零的时间区域只使用价格走势没有太大帮助。

替换文件 ClassPriceHistogram.mqh 中的相应代码。


bool CPriceHistogram::calculationPOCs()
  {
   int rates_total,rates_high,rates_time,rates_tv,index;
   double iHigh[],iLow[];
   long iTV[];
   datetime iTime[];
// Ïîëó÷àåì äàííûå çà ïåðèîä ñ time_start äî time_end / 我们从 time_start 到 time_end 获取数据
   int err=0;
   do
     {
      rates_time=CopyTime(NULL,PERIOD_M1,time_start,time_end,iTime);
      rates_high=CopyHigh(NULL,PERIOD_M1,time_start,time_end,iHigh);
      rates_total=CopyLow(NULL,PERIOD_M1,time_start,time_end,iLow);
      
      rates_tv=CopyTickVolume(NULL,PERIOD_M1,time_start,time_end,iTV);
      
      err++;
     }
   while((rates_time<=0 || (rates_total!=rates_high || rates_total!=rates_time || rates_tv!=rates_time)) && err<AMOUNT_OF_ATTEMPTS);
   if(err>=AMOUNT_OF_ATTEMPTS)
     {
      return(false);
     }
   poc_start_time=iTime[0];
   high_day=iHigh[ArrayMaximum(iHigh,0,rates_total)];
   low_day=iLow[ArrayMinimum(iLow,0,rates_total)];
   int count=int((high_day-low_day)/_Point)+1;
// Ïîäñ÷åò äëèòåëüíîñòè íàõîæäåíèÿ öåíû íà êæäîì óðîâíå / 各级价格发现持续时间计数
   int ThicknessOfLevel[];    // ñîçäàåì ìàññèâ äëÿ ïîäñ÷åòà òèêîâ / 我们创建一个数组来计算抽搐次数
   ArrayResize(ThicknessOfLevel,count);
   ArrayInitialize(ThicknessOfLevel,0);
   for(int i=0;i<rates_total;i++)
     {
      double C=iLow[i];
      long CTV=iTV[i];
      // 在条形图中所有可能的点上分布分钟条形图的 tickvolume
      // 因此,每个点的增量将是这样的...
      int CInc=int(((iHigh[i]-iLow[i])/_Point));  
      while(C<iHigh[i])
        {
         int Index=int((C-low_day)/_Point);
         ThicknessOfLevel[Index]+=CInc;
         C+=_Point;
        }
     }


我承认这是一个快速黑客,而且我还没有测试每一段代码,但到目前为止效果还不错。

下面是 SP500 指数的示例:


左侧为原始代码。右侧带 tickvolume

 

亲爱的 Dmitry

希望你一切都好。

您是否有可能为线条设置缓冲区?

对于每个 POC,也许可以有一个 Vwap 和 Median?


非常感谢

 
在此提醒一下...我把所有文件下载到相应的目录,编译后发现 ClassPriceHistogram.mqh 出现了错误。在第 375 行,我简单地将
CPriceHistogram::Delete()

替换为

void CPriceHistogram::Delete()

现在在 AMP Futures 的 MT5 版本 5.00 Build 3661 中运行正常。

@Oleksandr, 这个 "指标 "在技术上是一个专家。专家 "中没有指标缓冲区。在 Expert 中使用数组可以有效地重新创建缓冲区,但 iCustom 只能调用真正的指标缓冲区,因此必须从头开始编写一个新的自定义指标。不幸的是,这两种方法都超出了我的编码能力水平。祝你好运,找到更好的帮助。

 
谢谢