新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 794

 
Igor Makanu:

这是一个如何在指标中做到这一点的例子。这个问题是关于专家顾问的。

关于交易、自动交易系统和策略测试的论坛

新手对MQL4的任何问题,对算法和代码的帮助和讨论

西北, 2019.03.28 03:54

大家好!

失去了两个小时,但还没有找到任何东西。

你能告诉我,在mq4中,在EA中如何 正确的

使用内置函数,用另一个指标的数据建立一个指标

而它应该在子窗口的测试中显示,因为它应该是这样。

例如,RSI数据的MA?


但是,一般来说,它几乎是正确的。写一个指标并从中取值比为iMAOnArray填充一个数组更容易。但为什么是两个循环?

 
Alexey Viktorov:

但为什么是两个周期?

不检查第一次指标运行或加载历史数据的情况

有时,在while/for中使用条件检查,而不是在条件满足后再做一个额外的if,然后使用循环运算符,这样更紧凑、更高效。

如果你把iMAOnArray()的计算代码 "粘 "在一个用RSI数据填充数组的循环中,它将导致对rsiBuffer[]数组中尚未填充的元素进行不正确的计算。

注意,我在例子中对数组的所有元素使用了iMAOnArray()的计算(总数=0)。我在几个月前研究过这个问题,但可惜的是,没有关于如何正确使用iMAOnArray()和其中参数https://docs.mql4.com/ru/indicators/imaonarray 的具体信息。

int total, // 元素的数量


iMAOnArray()主题 https://www.mql5.com/ru/forum/303372/page2#comment_10617854




阿列克谢-维克多罗夫

这是一个如何在指标中做到这一点的例子。该问题是关于专家顾问的。

你确定这就是问题所在吗?

西北地区

在测试中,你可以在子窗口中看到它。

)))))

iMAOnArray - Технические индикаторы - Справочник MQL4
iMAOnArray - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
В отличие от iMA(...), функция iMAOnArray не выбирает данные на основе названия инструмента, таймфрейма и используемой цены - ценовые данные должны быть подготовлены заранее...
 
Igor Makanu:

不检查第一次指标运行或加载历史数据的情况

有时,在while/for代码中使用条件检查,要比在满足条件后再做一个额外的if,然后使用循环运算符更加紧凑和高效。


你确定这是你想问的吗?

)))))

)))) 这不是我第一次被发现有点不专心。我甚至没有走到指标的尽头。

但关于额外的如果

if(prev_calculated==0) limit=rates_total-1; else limit=rates_total-prev_calculated+1;

可以写成

limit = prev_calculated == 0 ? rates_total-1 : rates_total-prev_calculated+1;
不使用这样的记录?
 

Igor Makanu:

...几个月前我研究过这个问题,但可惜的是,没有关于如何正确使用iMAOnArray()及其参数的具体信息https://docs.mql4.com/ru/indicators/imaonarray

int total, // 元素的数量

当你不需要一个简单的平均值时,元素的数量是很重要的。我不记得哪种类型的MA在计算中使用其前值,一目了然。在这种情况下,元素的数量会影响结果。一般来说,它在mql5中半小时就能解决,我对它不感兴趣了。

 
Alexey Viktorov:
你不使用这样的条目?

我使用它,但我通常 "分两次 "写我的代码--当从头开始写时,我使用对 "语音解析"(即基本上用于朗读)很清楚的结构,用if()条件更容易说出所有的东西))

那么,是的,我可以 "整理一下代码",做出类似的构成,但通常我在我的现成例子(代码)库中使用它。

SZS: 我曾在某处看到过关于提高C#程序效率的信息,我知道有人建议尽量避免使用foreach() 和这个操作符?像if()操作符更有成效,但我认为这并不关键--我想怎么用就怎么用。


阿列克谢-维克多罗夫

当你不需要一个简单的平均值时,元素的数量是很重要的。我不记得哪些AI在计算时使用了他们之前的数值,一目了然。在这种情况下,元素的数量会影响结果。一般来说,它在mql5中半小时就能解决,我不感兴趣。

这是一个更深层次的问题,我在这个论坛和英语论坛上都搜索过,有讨论和使用的例子,total = 0或total !=0可以在计算iMAOnArray()时产生差异 - 在与Igor的讨论中(上面的链接),我决定只使用参数total = 0的iMAOnArray() - 在以前的讨论中是同样的解决方案。

 
Igor Makanu:

有一个更深层次的问题,我在这个论坛和英语论坛上都搜索过,有一个讨论和使用的例子,从参数total = 0或total !=0开始,iMAOnArray()的计算可以是不同的 - 在与Igor的讨论中(上面的链接),我决定只在参数total = 0时使用iMAOnArray() - 在以前的讨论中,也是使用相同的解决方案

这就对了。如果你不取数组中的 所有元素,并试图在不出错的情况下获得甚至EMA,那将是很困难的。

指数移动平均数 (EMA)

指数平滑移动平均线是通过在前一个移动平均值中加入当前收盘价的某一部分来确定的。使用指数平滑移动平均线,最新的收盘价被赋予更多的权重。一个P百分比的指数移动平均线将有以下形式。

EMA = (CLOSE (i) * P) + (EMA (i - 1) * (100 - P))

在哪里?

CLOSE (i) - 本期的收盘价。
EMA (i - 1) -前期的移动平均数的值
P - 使用价格价值的份额。

因此,如果你从30个元素的数组中读取30期的EMA,你将得到一个简单的MA而不是EMA。

 
Alexey Viktorov:

对。如果你不取数组中的 所有元素,并试图在不出错的情况下获得甚至EMA,那就很难了。

因此,如果你从一个有30个元素的数组中读取周期为30的EMA,你将得到简单的MA而不是EMA。

我检查了iMAOnArray() - 结果是不可预测的,有时可以使用2*MA周期,有时需要更多。 如果总数=0,你可以用它来计算一次,但如果你用得太频繁,终端会挂起

很少使用iMAOnArray()。

 
Maxim Kuznetsov:

if (response == 0) {

   Print("Что-то пошло не так");

  // потом уже добавите диагностику из WinAPI

   return false;

}

并在正常返回之前,将结果也打印出来

Print(" всё хорошо, результат:" toStr);

return toStr;

并在一个定时器中运行所有的代码,例如,每分钟一次。在一个肯定不会被禁止的资源上练习,并给出不同但可预测的时间,这样你就可以检查。

----
心灵感应--如果真的有问题的话。
要么初始化是错误的(我不记得WinSOCK是否应该为InternetOpenW初始化)。
或者某些资源没有被释放。

全部加入!没有任何东西显示在打印中!!!。

 

如何使变量输出到数据窗口 而不在图表上显示?

不知道为什么,我在文档中找不到它。

 
psyman:

如何使变量输出到数据窗口 而不在图表上显示?

不知道为什么,我在文档中找不到它。

将显示颜色设置为clrNONE。