任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 111

 
Trendy:

非常感谢您!我需要它来比较蜡烛的特性(更多,更少,等等),我把它拧上了--它很有效。只是不明白它是如何比较数据类型字符串的? 或者说双倍数到字符串并没有把数字翻译成字符串?:-D


PS。它在指标中不起作用--只在脚本中起作用...当我调用High[i]时--我得到的只有小数点后4位。

我在写。

Alert ("doubletostr High = ", DoubleToStr(High[1],5));
if (DoubleToStr(High[2],5)>(DoubleToStr(High[3],5) )
{
Alert ("More");
}
如果(DoubleToStr(High[2],5)<(DoubleToStr(High[3],5))
{
Alert ("Smaller");

}

工作,它写出的结果有五位数,大/小数。问题是,在指标中,字符串数组并没有在图表上显示出来。因此......。

......写作。

警报("归一化双倍高度=", NormalizeDouble(High[1],5))。

不起作用 - 结果是> 1,1234

我不理解开发商--他们为什么要把事情搞得这么复杂?为什么如果它在图表上显示这么多数字,就不会划出有五位数字的被调用函数?也许有一个简单的解决方案?


它变得更加有趣。

译文

Alert ("iFractals doubletostr=", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits))。

写入:1,32169 - 确定。

使用StrToDouble转换回一个数值。

Alert ("iFractals StrToDoubledoubletostr=", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits))。

结果:1.3217

应该有一个成龙的备忘录,他不明白芯片的意思)。

 
hoz:

而阿勒特实际上输出的是什么?

它说是0.01,但实际上是0...0100。
 
Trendy:

它变得更加有趣。

译文

Alert ("iFractals doubletostr=", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits))。

写入:1,32169 - 确定。

使用StrToDouble转换回一个数值。

Alert("iFractals StrToDoubledoubletostr=", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits))。

结果:1.3217

应该有一个成龙的备忘录,他误解了芯片)。


DoubleToStr()用于以你想要的精度输出信息。标准的Print()、Alert()等,以4位数打印。

当你想看到一个具有你想要的精度的数字时,那是你使用DoubleToStr()的时候,而不是在计算中。

你不需要来回翻译任何东西 ...;)

 
semiromid:

它说是0.01,但实际值是0...0100。


然后输出100 * point = 100 * 0.00001 = 0.001pp (如果是五位数)

lBUY 的值已在上面改变因此,在我看来,这个条件

if(lBUY==0.01)

将不会被满足。因此,lBUY 的值将保持不变。

 
artmedia70:
变量j必须在函数开始时明确初始化为一个负值。试试吧。我还没有进一步看。


嗯,到目前为止是一样的。在这里,我们有。

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos(int delta)
{
   datetime lastOrderCloseTime = 0,               // Время закрытия последнего открытого ордера
            lastOOTHist = -1;                     // Время открытия последнего открытого ордера из истории
   int j = -1;
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
      {
         lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
         j = i;
      }
   }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
      Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }
  
   for(int h=OrdersTotal()-1; h>=0; h--)
   {
      if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderMagicNumber() != i_magic)   continue;
         if (OrderSymbol() != Symbol())       continue;
         if (OrderType() > 1)                 continue;
         if (lastOOTHist < OrderOpenTime()) return(false);  // Выбранная рыночная позиция открыта позже закрытой по тейку
      }
      else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);}
   }
   
   return (true);
}
 
artmedia70:

DoubleToStr()用于以你想要的精度输出信息。标准的Print()、Alert()等将打印4位数字。

当你想看到一个具有你想要的精度的数字时,那是你使用DoubleToStr()的时候,而不是在计算中。

你不需要来回翻译任何东西 ...;)


这是可以理解的...现在...)但整个问题是,我需要以某种方式挖出第五位数字进行计算(

如果DoubleToStr()对它不好,那么这门语言就没有这样的功能?难道开发商没有预见到这一点吗?

 
hoz:


嗯,到目前为止是一样的。我们到了。

这不应该是一样的吗?;)
 
Trendy:

这是可以理解的...现在...)但整个问题是,我需要以某种方式挖出第五位数字进行计算(

如果DoubleToStr()对它不好,那么这门语言就没有这样的功能?难道开发商没有预见到这一点吗?


计算过程中使用的数字甚至比你想象的还要多。如果你想看到 你想要的精确度,请使用DoubleToStr()。你不会看到它的任何其他方式。
 

各位程序员!请告知如何将EA与指标相结合?

例如,我有一个简单的机器人mo_bidir.mq4,它使用自己的算法进行交易,我希望它继续使用自己的算法开仓交易,但在3 МА的信号之后。

例如在一个信号上 -- 三条移动平均线

FastEMA>MediumEMA>SlowEMA(趋势 上升-机器人 买入

FastEMA<MediumEMA<SlowEMA(趋势 下降) - 博特 卖出

Inp_Signal_ThreeEMA_FastPeriod = 8;

Inp_Signal_ThreeEMA_MediumPeriod = 38;

Inp_Signal_ThreeEMA_SlowPeriod = 48;

我需要的是专家顾问在5分钟内继续交易,而指标则从日或4小时的时间框架发出信号,我希望能在机器人设置中改变时间框架。

 
所有的交易者都是好日子。也许这个问题已经被讨论过了,但是代码库中的一些EA在新的构建中无法编译,编译器发誓说这是一个反编译的版本。但这似乎是无稽之谈,版本从未被反编译。