[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 522

 

又见面了。谢谢你之前的答复--非常有帮助。请再次帮助。我已经从一个专家顾问那里得到了我需要的函数,它可以计算今天(如果f0_5(0))、昨天(如果f0_5(1))等的账户利润(损失)。

double f0_5(int ai_0) {
   double ld_ret_4 = 0;
   for (int pos_12 = 0; pos_12 < OrdersHistoryTotal(); pos_12++) {
      if (!(OrderSelect(pos_12, SELECT_BY_POS, MODE_HISTORY))) break;
               if (OrderCloseTime() >= iTime(OrderSymbol(), PERIOD_D1, ai_0) && OrderCloseTime() < iTime(OrderSymbol(), PERIOD_D1, ai_0) + 86400) ld_ret_4 = ld_ret_4 + OrderProfit() + OrderCommission() + OrderSwap();
   }
   return (ld_ret_4);
}

结果应该是小数点后的分数(应该是),但该函数由于某种原因返回了一个整数。总的来说,请帮助我改变函数,使之成为一个有两个小数位的分数。

虽然我可能在这里搞砸了:检查了使用Print(),但该函数实际上正常计数?一般来说,请帮助我理解。

 
MaxZ:

这里是著名的idnikator。

你能拍到这样的照片吗!?:))))))



在这里,它是。

 
以下是教科书的页面https://docs.mql4.com/ru/array/ArrayCopy
它说,。
ArrayCopy(array2,array1,0,Bars*6-60,60);
// теперь array2 содержит 10 последних баров из истории (имеется в виду, что последний бар - это текущий бар, бар с индексом [0])

为什么array2 会包含最后10个 小节?
因为Bars*6-60 不会返回数值10。我完全没有注意到任何逻辑。
例如,在历史上有1000 条。那么Bars*6-60=1000*6-60=6000-60=5940。最后10 条在哪里?
 
hoz:
以下是教科书的页面https://docs.mql4.com/ru/array/ArrayCopy
它说,。

为什么array2 会包含最后10个 小节?
因为Bars*6-60 不会返回数值10。我完全没有注意到任何逻辑。
例如,在历史上有1000 条。那么Bars*6-60=1000*6-60=6000-60=5940。最后10 条在哪里?

你又让我吃惊了!所谓的最后10条,是从0到第10条我们在图表上接触到的价格!忘掉历史上的第三十条和第五千条吧!我们已经经历了这些,我们只需要为测试者提供这些。而我们需要最新的,从零开始的,当然还有未来的新的--这就是我们要去的地方!;))
 
borilunad:

你又让我吃惊了!所谓的最后10条,是从0到第10条我们在图表上接触到的价格!忘掉历史上的第三十条和第五千条吧!我们已经经历了这些,我们只需要为测试者提供这些。而我们需要最新的,从零开始的,当然还有未来的新的--这就是我们要去的地方!;))

最后一点,即更接近目前的价格,我已经明白了。但这段代码Bars*6 - 60我不明白它将返回什么?我想了解如何在逻辑上进行计算。我可以请你解释一下吗?也许这对某人来说很容易,但我的学历不是程序员,所以我很难理解这种信息流。我正在阅读教程,并逐渐提出我所遇到的问题。我非常希望,这些问题很快就会比现在更有意义。
 
hoz:
以下是教科书的页面https://docs.mql4.com/ru/array/ArrayCopy
它说,。
为什么array2 会包含最后10个 小节?
因为Bars*6-60 不会返回数值10。我完全没有注意到任何逻辑。
例如,在历史上有1000 条。那么Bars*6-60=1000*6-60=6000-60=5940。最后10 条在哪里?
5940 -原始数组的初始索引,用于复制最后10个 小节(bar - 6个索引)。
 

滚动
5940 -初始数组的起始索引,用于复制最后10个 小节(小节为6个索引)。

亲爱的专家,教科书中不是有一个错误吗?

以下是我的推理。

在代码的开头,调用了int ArrayCopyRates 函数,该函数 将当前图表中的条形数据复制到RateInfo[][6]类型的二维数组中,并根据该函数的例子,返回复制的条形数量,或者在失败的情况下返回-1。

double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",TimeToStr(array1[0][0]),"цена открытия ", array1[0][1]);

当前的 条形图是索引为0-0 的条形图,因此,回到原来的代码,我们将数组1中索引为0-0的元素(当前条形图)复制到 数组2的索引为0-0,我们得到最后10个柱子(其中最后一个柱子是当前的柱子,即索引为[0]的那个柱子),这与我们在教程中写的相反...因此,通过将数组1中索引为Bars*6-60,60的元素复制到索引为0的数组2中,我们就可以从历史中获得有关酒吧的信息。

 

你好。

我有一个自定义指标

我正在写一个EA...我有一个问题...如何访问我的指标?具体来说,从指定的条形图中提取数据(在我的例子中,我需要提取第2条形图)。我有windowsPriceMax,但据我理解,它只显示子窗口图表的最后一个值,而且不清楚,如果我在指标上有3条线,它将显示什么?

 
Tragedy:

你好。

我有一个自定义指标。

我正在写一个EA...我有一个问题...如何访问我的指标?具体来说,从指定的条形图中提取数据(在我的例子中,我需要提取第2条形图)。我收到了windowsPriceMax,但就我的理解,它只输出图表的最后一个值,我不明白如果我在指标上有3行,它将输出什么?



double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

指定自定义指标 的计算。自定义指标必须被编译(一个扩展名为EX4的文件)并位于terminal_directory/experts/indicators中。
参数。

symbol - 工具的符号名称,指标将根据其数据进行计算。NULL表示当前符号。
timeframe - 周期。可以是图表中的一个时期。0表示当前图表的周期。
name- 自定义指标名称。
...- 参数列表(如需要)。传递的参数应与自定义指标的外部(extern)变量的声明顺序和类型相一致。
mode- 指示线的索引。可以从0到7,并且必须对应于索引,由SetIndexBuffer函数之一使用。
shift- 从指标缓冲区收到的数值的索引(相对于当前条形图,向后移动指定的周期数)。

 

谢谢你。这很有帮助。以为只有iMac***iStoch***指标是预装的。