MT4的 prev_calculated 和IndicatorCounted() 有什么区别

在MT4中,prev_calculatedIndicatorCounted() 是两个与指标计算相关的函数,它们有一些区别。让我们来详细了解一下: 1. IndicatorCounted(): - IndicatorCounted() 是一个旧版 MQL4 内置函数,返回一个整数值。 - 它用于计算从启动指标到现在没有发生变化的柱的数量。 - 换句话说,它告诉你指标自启动以来没有更新的柱的数量。 - 这对于编写一些特定的指标逻辑非常有用。 2. prev_calculated: - prev_calculated 是新版 MQL4 中 OnCalculate() 函数的第二个参数。 - 在新版 MQL4 中,OnCalculate() 是在每次接收到新的 tick 数据时执行的内置方法。 - prev_calculated 表示上一次调用 OnCalculate() 时的柱数。 - 它用于跟踪上一次计算的柱数,以便在新柱生成时执行特定的操作。 - 与 IndicatorCounted() 不同,prev_calculated 的值在每次调用 OnCalculate() 时都会更新。 3. 使用上的区别: - 当 tick 数据到达时,prev_calculated 的值与 rates_total 相同。 - 如果你使用 Bars - IndicatorCounted(),在 tick 数据到达时,该值将为 1。 - 但如果你使用 rates_total - prev_calculated,在 tick 数据到达时,该值将为 0。 - 为了实现只处理最新柱的逻辑,你可以声明一个变量,然后在每次计算时将其加 1。 - 这样,在 tick 数据到达时,rates_total - prev_calculated 将为 1,从而只执行一次处理。 总之,prev_calculated 对于避免重新绘制(repaint)指标非常有用。通过在新柱生成时执行特定操作,你可以有效地控制指标的行为。123

当你在 MT4 中编写自定义指标时,你可以使用 rates_totalprev_calculated 来控制指标的计算。让我为你提供一个示例:

假设你想编写一个指标,只在新柱生成时执行特定的操作。你可以使用 rates_total - prev_calculated 来判断是否有新柱出现。

以下是一个简单的示例,展示如何使用这两个参数来实现这一目标:

0) { // 在这里添加你的逻辑代码 // 例如,更新 MyBuffer 的值 MyBuffer[0] = close[0]; // 假设我们将 MyBuffer 设置为当前收盘价 } // 返回计算的柱数 return(rates_total); } >

//+------------------------------------------------------------------+
//|                                                      MyCustomIndicator |
//|                        Copyright 2024, Your Name or Company Name |
//|                                       http://www.yourwebsite.com |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 clrDodgerBlue

// 定义指标缓冲区
double MyBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   // 设置指标缓冲区
   SetIndexBuffer(0, MyBuffer);

   // 返回成功初始化
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator calculation function                            |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   // 计算新柱的数量
   int newBars = rates_total - prev_calculated;

   // 在新柱生成时执行特定操作
   if (newBars > 0)
   {
      // 在这里添加你的逻辑代码
      // 例如,更新 MyBuffer 的值
      MyBuffer[0] = close[0]; // 假设我们将 MyBuffer 设置为当前收盘价
   }

   // 返回计算的柱数
   return(rates_total);
}

在这个示例中,我们在 OnCalculate 函数中检查 rates_total - prev_calculated 的值,以确定是否有新柱生成。如果有新柱,我们可以执行特定的操作,例如更新指标缓冲区的值。

请注意,这只是一个简单的示例,你可以根据你的需求进一步扩展和优化指标的逻辑。1234

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇