在MQL5中一起学习和写作 - 页 9

 
gdtt:

该顾问使用

从第0个条形图中取值,它的指标缓冲区的值在每一个刻度上都会改变,直到蜡烛收盘。

是的,我做了实验,但实质上并没有解决主要问题,即如何使EA不仅在要求的条形上,而且在几个条形上重新计算指标缓冲区

Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 

一个解决方案可能已经被发现了!其中之一是...

然而,为此,你必须制作一个特殊版本的指标。

 

先生们。

我在写一个指标:...
int handle;
double indicatorBuffer[];
...。
int OnInit()
{
...。handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA,AppPrice);
...
}

int OnCalculate (const int rates_total, //size of array price[]
const int prev_calculated, // processed bars at previous call
const int begin, // where significant data start
const double& price[] ) // array for calculation
{
.做点什么

问题是--如何让handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice)知道什么是AppPrice
,或者如何从参数 标签中提取Apply to: 以在代码中使用?

提前感谢...

 
FlyAgaric:

先生们。


问题是 - 如何让handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice)知道什么是AppPrice
或者如何从参数 标签中提取Apply to: 用于代码中?

提前谢谢你...

OnCalculate()。

用户在 "参数 "选项卡中启动指标时,可选择必要的时间序列或指标作为价格[]阵列。要做到这一点,你应该在 "应用于 "领域的下拉列表中指定必要的项目。

为了从其他mql5程序中接收自定义指标的值,使用了iCustom() 函数,它返回指标句柄用于后续操作。你也可以指定 适当的价格[]数组或其他指标的句柄。 该参数应 自定义指标的输入变量列表中最后 传递。
 
Rosh:

OnCalculate()。


Rosh 谢谢,但我的问题正是如此。我应该在操作员中指定什么
handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice)
作为AppPrice?

我正在非常仔细地阅读现有的帮助。也许高温已经造成了损失,但是......。

 
FlyAgaric:

Rosh 谢谢,但我的问题正是如此。我应该在声明中说明什么
handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice)
作为AppPrice?

我非常仔细地阅读了现有的帮助。也许高温已经造成了损失,但是......。

如果你想在另一个指标的数据上进行计算,指定一个指标手柄。或计算指标的价格类型。
 
FlyAgaric:

Rosh 谢谢,但我的问题正是如此。我应该在声明中说明什么
handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice)
作为AppPrice?

我非常仔细地阅读了现有的帮助。也许高温已经造成了损失,但是......。

热量。你应该指定ENUM_APPLIED_PRICE 为AppPrice)
input ENUM_APPLIED_PRICE AppPrice=PRICE_CLOSE;
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 
Swan:
热量。你应该指定ENUM_APPLIED_PRICE 为AppPrice)

斯旺,谢谢你的关注。但如果你用
输入ENUM_APPLIED_PRICE AppPrice=PRICE_CLOSE;而第一个表格

int OnCalculate (const int rates_total, // size of array price[] )。
const int prev_calculated, // 在上一次调用时处理过的条形图
const int begin, //重要数据从哪里开始
const double& price[]) // 用于计算的数组
我们在编译时得到一个警告信息:有两个OnCalculate函数被定义。将使用价格数据函数NameIndicator.mq5 (pg)。
和price[]数组仍然与AppPrice没有任何联系,除非它与第三个标签 "参数 "中的Apply to: 相同。

事实上,问题是,如果price[]数组以某种方式被使用,是否可以使用内置的单缓冲区指标,如iMA()和第一个intCalculate()表格。
计算中使用的。

 
Rosh:
如果你想在另一个指标的数据上进行计算,请指定指标手柄。或将计算指标的价格类型。

我们(不如说是我)有一些误解。

事实上,问题是我们是否可以使用内置的单缓冲区指标,如iMA()和intOnCalculate() 的第一种形式,如果price[]数组以某种方式在计算中使用

 
FlyAgaric:

我们(不如说是我)有一些误解。

事实上,问题是,如果价格[]数组以某种方式出现,人们是否可以使用iMA()类型的内置单缓冲器指标和第一种形式的int OnCalculate()。
计算中使用的。

你的AppPrice 参数与OnCalculate()没有关系。

int OnInit()
{
... handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice);
...
}

你可以给它一个价格常数 的值(选项1)或其他指标的柄(选项2)。然后你就可以。

第1种变体。

在第二种类型的OnCalculate()函数中

int OnCalculate (const int rates_total,      // размер входных таймсерий
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread
   );

调用所有必要的数据并进行计算

第二种变体。

根据代码的要求使用任何一种OnCalculate(),并使用CopyBuffer() 来获取指标值。