指标: Didi 指数 - 页 3

 
collisr350 #:
这个指标很棒,但它不能正确地实时运行。它不能正确地给出实时信号。
在我这里,它的实时功能很好。您遇到了什么问题?
 

有些东西很糟糕。

如果我使用原来的 SMA03 + SMA20,交叉点就会与该指标不同。
是否有什么秘密算法??
没有使用计算缓冲区。我不知道......

 
Petr Michalica #:

有些事情很糟糕。

如果我使用原来的 SMA03 + SMA20,交叉点就会与该指标不同。
是否有什么秘密算法??
没有使用计算缓冲区。我不知道......

这是公布的源代码--不是秘密。

下面是计算过程:

   short_handle   = iMA(Symbol(), Timeframe, FastPeriod, Shift, Method, AppliedPrice);
   average_handle = iMA(Symbol(), Timeframe, MeanPeriod, Shift, Method, AppliedPrice);
   long_handle    = iMA(Symbol(), Timeframe, SlowPeriod, Shift, Method, AppliedPrice);

// 然后

   void CalculateDidiIndex(const int shift=0)
  {
//---
   double fast[1],mean[1],slow[1];

   if(CopyBuffer(short_handle, 0, shift, 1, fast)<=0) return;
   if(CopyBuffer(average_handle, 0, shift, 1, mean)<=0) return;
   if(CopyBuffer(long_handle, 0, shift, 1, slow)<=0) return;

   FastBuffer[shift] = fast[0]/mean[0];
   MeanBuffer[shift] = 1;
   SlowBuffer[shift] = slow[0]/mean[0];
//---
  }
 

是的,我读了资料来源、


原始的 sma03+sma20 的交叉点不在同一个地方。

 
Petr Michalica #:
sma03+sma20

你省略了由输入控制的 average_handle:

input int                MeanPeriod   =8;               // 平均 MA 周期
 

啊哈。
好的。是的,一切正常。
对此我很抱歉。
测量质量更容易。
我认为平均值是 20。我知道,现在是 3 月。

 
Matheus de Oliveira #:
您认为拆除管路并进行修复会有问题吗?

应该没有问题。偶尔有人会为他们特定的符号/工具编写代码,仅此而已。

这些数字代码是指标的标准代码,仅此而已:

IndicatorSetInteger(INDICATOR_DIGITS, _Digits);

您可以完全删除该函数,指标仍可正常工作,但会始终默认显示 6 位数。

 
trade_addicted #:
[在哪里可以读取 SlowBuffer 的值

请参见缓冲区声明:

   SetIndexBuffer(0,FastBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,MeanBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,SlowBuffer,INDICATOR_DATA);

您已经找到了 0 号快速缓冲区。同样,慢速缓冲区是 2 号缓冲区。

就我个人而言,平均值为 1 的 1 号缓冲区让我挠头。如果直接使用整数...1.🤔
 
Ryan L Johnson # 就我个人而言,平均缓冲区 #1 被赋值为 1 的静态值让我挠头。如果直接使用整数......1.🤔

你对平均值缓冲区感到困惑是对的。

这意味着缓冲区本身是多余的:您实际上不需要通过SetIndexBuffer 来存储或公开它。

指标可以简单地在计算其他两个序列时直接使用常量 1,这样代码会更简短、清晰,占用的内存也更少。快速缓冲区和慢速缓冲区是唯一携带真实数据的缓冲区。

 
是的,精度高是好事。