[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 320

 
snail09:
要么计算所有的左括号,然后计算所有的右括号,然后比较数量,要么逐一注释函数,直到你找到错误。每个人的品味和颜色(源代码设计)都是不同的。
有4个开头括号和4个结尾括号,好的。但评论如何能帮助我,我不太清楚
 
Pinki:
有4个开头括号和4个结尾括号,好的。但评论如何能帮助我不太明白

你可以先注释掉自定义函数,然后再注释掉循环、逻辑结构......。我可以向你保证,你会通过顺序切断找到与你的支架相匹配的。或者你也忘了在某个地方写上";"......。

你不是把IF误认为FOR吗?

对不起,我没有一下子注意到它。

   // Перебор в цикле всех рыночных и отложенных ордеров
   for(int i=0;i<=OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
         // Если инструмент и магик соответствуют - значит ордер наш
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
            {
            // Подсчитываем только рыночные ордера
            if(_Type==OP_BUY || _Type==OP_SELL) 
               {
               op++;
               }
            }
         }
     }

将其与这个片段进行比较。这只是一个变体。

 
001:

谁能解释一下为什么第6笔订单没有在蜡烛图上打开,以及如何做才能使其打开?

日志。

2011.11.04 19:42:21 1999.11.04 20:00 RLB_FLAT GBPUSD,H4: Open #7 sell stop 0.10 GBPUSD at 1.62233 sl: 1.64443 tp: 1.57089 ok
2011.11.04 19:42:21 1999.11.04 20:00 Tester: #6 因过期而被删除
2011.11.04 19:42:10 1999.11.04 12:00 RLB_FLAT GBPUSD,H4: Open #6 sell stop 0.10 GBPUSD at 1.63373 sl: 1.64570 tp: 1.62652 ok
2011.11.04 19:42:09 1999.11.04 08:00 Tester: #5因过期而被删除
2011.11.04 19:42:06 1999.11.04 00:00 RLB_FLAT GBPUSD,H4: Open #5 sell stop 0.10 GBPUSD at 1.63622 sl: 1.64702 tp: 1.63411 ok
2011.11.04 19:42:00 1999.11.02 04:00 测试人员:#4 因过期而被删除
2011.11.04 19:41:53 1999.11.01 20:00 RLB_FLAT GBPUSD,H4: Open #4 sell stop 0.10 GBPUSD at 1.63365 sl: 1.64917 tp: 1.61097 ok

第四、第五和第六个挂单因过期而被删除。

增加其寿命或设置为0(零),见。 订单修改()

 
мmersi:

第四、第五和第六次递延由于到期而被删除。

增加他们的到期日或将其设置为0(零),见OrderModify()。 订单修改()


让我困惑的是,在第6个订单过期之前(它在20:00过期),在16:00有一根蜡烛下跌。这可以从图片中看出。
 
mersi:

1.该函数找到历史上最高的股票订单,这意味着最后一个关闭的订单(当然,除非有一个特殊的情况,对于这种情况,你的选项有最大的关闭时间是最好的)。

2.根据条件 第一笔订单以指定的TP/SL开仓,只有第二笔订单可能以新的TP/SL开仓,这意味着只有当第一笔交易为零时,该函数才能返回零,但如果历史上没有平仓订单,则不能返回。

最后一件事。在你的变体中,函数中j和另一个SELECT的使用是多余的。

这就够了。

if (t<OrderCloseTime()) {
         t=OrderCloseTime();
      Profit=OrderProfit()+OrderSwap()+OrderCommission();
  }
   return(Profit);

1.你可以100%地信赖你的经纪人(或客户的 经纪人),关于他的票号?时间还是一个比较稳定的数值--在这里他只能通过调整历史记录来手动改变时间。IMHO - 更好地利用时间。

2.如果客户 需要改变逻辑,那么你的函数可能要重写。

3.你是否建议

Profit=OrderProfit()+OrderSwap()+OrderCommission();

一个循环中使用它?为了什么?你只能对已经找到的最后一个订单使用一次。

А...你的客户 将不会进行测试和优化。我明白了...

 

GlobalVariableSetOnCondition() - 你能用简单的语言解释这个函数的作用吗?帮助中的描述非常混乱,我无法理解一些要点?

如果现有全局变量的当前值等于第三个参数check_value 的值,则为该变量设置一个新值。如果该变量不存在,该函数将产生错误 ERR_GLOBAL_VARIABLE_NOT_FOUND(4058)并返回FALSE。如果执行成功,该函数将返回TRUE,否则将返回FALSE。要获得错误信息,必须调用函数GetLastError()。如果全局变量的当前值与check_value 不同,该函数将返回FALSE。
这个函数允许对全局变量的原子访问,因此它可以用来创建一个信号 ,以便在同一客户终端的几个Expert Advisors之间进行并发通信。

 
fore-x:

GlobalVariableSetOnCondition() - 你能用简单的语言解释这个函数的作用吗?帮助中的描述非常混乱,我无法理解一些要点?

为现有的全局变量设置一个新的值,如果该变量的当前值等于 check_value的 第三个参数。如果该变量不存在,该函数将产生错误 ERR_GLOBAL_VARIABLE_NOT_FOUND(4058),并返回FALSE。如果执行成功,该函数将返回TRUE,否则将返回FALSE。要获得错误信息,必须调用函数GetLastError()。如果全局变量的当前值与check_value 不同,该函数将返回FALSE。
这个函数允许对全局变量的原子访问,因此它可以用来创建一个信号 ,以便在同一客户终端的几个Expert Advisors之间进行并发通信。

GlobalVariableSetOnCondition("Имя переменной", устанавливаемое значение, проверяемое значение);

假设你有一个全局变量GL_Var。

它目前的数值为1.0。

你需要检查这个变量的值是否为1.0,如果是,将这个变量设置为2.0

它将是这样的。

GlobalVariableSetOnCondition(GL_Var, 2.0, 1.0);

为了处理这个函数的返回值,你可以通过if调用它

if (!GlobalVariableSetOnCondition(GL_Var, 2.0, 1.0)) {
   // здесь код обработки, если функция вернула false
   // false она вернёт в случае, если переменная GL_Var не была равна 1.0 во время вызова этой функции
   // или если вообще ещё нет глобальной переменной GL_Var
   }

在调用函数之前,你可以检查全局变量GL_Var是否存在,以避免错误ERR_GLOBAL_VARIABLE_NOT_FOUND。

 

请帮助解决一个小的几何学 问题。有一条坐标为p1和p2的直线(图中以红色显示)。我需要找到p3的坐标,它是p2坐标的38.2%。我已经做了以下工作。

如果(p2>p1) p3=p2-(p2-p1)*0.382; 图中顶部为真。

如果(p1>p2) p3= p2+(p1-p2)*0.382; 图中下部为真。

有什么方法可以把这些写成一个没有 "如果 "的方程式吗?

 

那么,就这样写吧。

p3=p2-(p2-p1)*0.382

 
Roger:

那么,就这样写吧。

p3=p2-(p2-p1)*0.382


而且确实如此!谢谢你的帮助。
原因: