mql5 - 自上一次交易后一定时间内的垂直线 - 页 3

 
renatmt5:
我正确地理解了last_time和result变量是我们要找的值。其结果决定了该线将被转移(重绘)到未来多少时间。然后,代码块 "本期利润 "应放在 "移动垂直线 "块之前,以便在考虑到从最后一笔交易获得的数据的情况下移动该线。
这是否正确,还是我混淆了什么?

这些是LastProfitForPeriod函数的内部变量。

我们想得到最后一笔交易的利润 值,对吗?这里LastProfitForPeriod()给了我们最后一笔交易的利润。只剩下根据这些利润来移动垂直线。

 
Vladimir Karputov:

因此,最后的触摸是根据所获利润来移动线。

你还记得搬家的规则是什么吗?

oops, sorry - 只是为了澄清。

- 如果最后一笔交易的结果是负的,而且当天的结果是负的,那么就在未来24小时(24小时)的距离上画出垂直线
- 如果最后一笔交易的结果是负的,而当天的结果是正的,则在未来2小时的距离上画出垂直线。
- 如果最后一笔交易的结果是正数,则在未来1小时的距离内画出垂直线。

 
Vladimir Karputov:

这里解释一下为什么 "之前 "的参数需要在未来进行。


谢谢你!

 

这些条款要求最后一笔交易的当天的结果(如果当天有几笔交易)。

 
renatmt5:

哦,对不起--只是想澄清一下。

- 如果最后一笔交易的结果是负的,而且当天的结果是负的,那么垂直线 就会画到未来24小时(一天)。
- 如果最后一笔交易的结果是负的,而当天的结果是正的,则在未来2小时的距离上画出垂直线。
- 如果最后一笔交易的结果是正数,则在未来1小时的距离内画出垂直线。

啊,所以我们还需要单独获得当日的利润。


为了对LastProfitForPeriod()进行修正--我们删除输入的时间参数 "from "和 "to",并在函数中形成这些参数:形成一天的开始时间(它将是 "from"),而 "to "我们得到当前时间+天。


因此,我们将通过引用向LastProfitForPeriod()传递两个参数:当天的利润和最后一笔交易的利润。


一天的开始是用iTime 获得的

   datetime from_date=iTime(Symbol(),PERIOD_D1,0);

- 即,它是当前日线的开盘时间。

附加的文件:
 

汇编--伟大的!
只有几个问题。
1) 在实施指标时,利润最后一天的变量值不是分配给最后一笔交易的最后一天,而是分配给一般账户的最终利润。然而,当重新计算指标时(大约1-2分钟),数值会变为正确的数值(最后一笔交易当天的总利润)。我只是根据今天最后一笔交易的账户进行判断。
2) 当从图表中删除指标时,左上角 的注释不会被删除。当清除对象的列表时,它们也不会被删除。我重新启动终端,使这些数值消失,当然,这并不方便。如何让它更容易 - 我不知道 :)

也许,在最后一笔交易(本期利润)的计算区块之后,放置创建线、移动线和删除线的代码(创建垂直线、移动垂直线和删除垂直线)会更合理。在考虑到未来n小时的转变的情况下画线,在利润_最后一天和利润_最后交易的基础上计算。

喜欢

如果(profit_last_day<=0 and profit_last_deal<=0){n=24;}。

else (profit_last_day>0 and profit_last_deal<=0){n=2;}。

否则 {n=1;}
//---
time = last_time + n;
//---
然后用计算出的时间值画出相对于最后一笔交易的时间转移线......

 

1.002版本引入了保护措施:如果日线的开盘时间 返回 "0"--那么就是没有命运,我们退出

//+------------------------------------------------------------------+
//| Profit for the period                                            |
//+------------------------------------------------------------------+
void LastProfitForPeriod(double &profit_last_day,double &profit_last_deal)
  {
   datetime from_date=iTime(Symbol(),PERIOD_D1,0);
   if(from_date==D'1970.01.01 00:00')
      return;
   datetime to_date=TimeCurrent()+60*60*24;

   long last_time=0;


现在,在交易账户的有效期内,不会有任何要求。

附加的文件:
 
弗拉基米尔,再次非常感谢你的工作!
我将尝试自己做代码,这样我就不会因为良心和实践而生病 :) 如果有结果,我将报告。
 
renatmt5:
弗拉基米尔,再次非常感谢你的工作!
我将尝试自己做代码,这样我就不会因为良心和实践而生病 :) 如果有结果,我将报告。

很好。

 
顺便说一下,在你添加的保护措施中,有以下几点。由于我在计算正确的值之前有1-2分钟的延迟,在此期间变量为零,我将当前的时间框架切换到另一个时间框架进行快速更新--数值立即被重新计算。也许,有可能根据这一原则制作一些软件的拐杖?