[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 317

 
gyfto:

我怎样才能简化这个表达式?

是来自MetaQuotes的ADX算法。MetaQuotes自己也使用这种表达方式。

- 如何简化它?


为什么最简单的选项不适合你?

z=0;
if(y>x && y>0) z=y;
 
Roger:


为什么最简单的选择对你来说还不够好?


我想有时你必须从不同的角度来看待问题。对了,谢谢你。
 
gyfto:

hoz, ,我在想如何进一步缩短if的时间看:如果我们把一个变量

我们有cnt=cnt+step,其中

但1=cnt/cnt,a-cnt=cnt/(-1),唯一的区别是分母。现在回忆一下,x^0=1,x^1=x,即我们可以把我们的布尔变量_if放在指数中,即step=cnt/a*(cnt^_if);其中

但±a应该是2*_if-1,即

或者我们简化一下


哇,你把事情简化了。我不明白你的逻辑。
 
我想我们会下到如果...:-)))
 
zoritch:
我想我们会下到如果...:-)))

我也明白,我什么都不明白。甚至是那些我不明白的图标...:)
 
hoz:

一个标志的柱子正在上升,即看涨。

int LastCandlesType(int trend)
{
   int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)     // Если бар соответствует требуемым признакам..
          cnt++;                                                                     // .. прибавим 1 к счётчику

      if (Close[i] < Open[i])                                                        // Если бар, не соответствует основному признаку..
          cnt = 0;                                                                   // .. счётчик обнуляем
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

   if (cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции
}

如何使其在向该函数传递趋势 参数时,该函数将负责传递当下所谓的主要趋势,计算将基于该参数。

也就是说,如果趋势==向下,循环中的函数就像现在这样,如果趋势==向上循环中 Open[i]Close[i] 被调换,这样就可以观察到条件。在这种情况下,条形图的收盘价将低于开盘价,差额将被减去。

int LastCandlesType(bool trend)//trend равен 1 (бычий) или 0 (медвежий)
   int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      if ((2*trend-1)*(Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)     // Если бар соответствует требуемым признакам..
          cnt++;                                                                     // .. прибавим 1 к счётчику

      if ((2*trend-1)*(Close[i] - Open[i]) < i_sizeOfSequentialCorrectionBar * pt)    // Если бар, не соответствует основному признаку..
          cnt = 0;                                                                   // .. счётчик обнуляем
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

   if (cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции
}

或者进一步简化一下

int LastCandlesType(bool trend)//trend равен 1 (бычий) или 0 (медвежий)
   int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      bool _if=((2*trend-1)*(Close[i] - Open[i])>=i_sizeOfSequentialCorrectionBar * pt); cnt=cnt+cnt/((2*_if-1)*MathPow(cnt, _if));
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

   if (cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции
}

Δ是差值,即Close[i]-Open[i],^是度的符号const - 这个表达式中的常数,i_sizeOfSequentialCorrectionBar * pt,标准数学符号,我没有发明任何东西2*bVar-1类似于±1, 这里的bVar是任何bool-variable。而表达式2*bVar-1的取值不是0和1,而是-1和+1。≥是MQL4的>=,也是标准的数学符号。step是步长,即在cnt++中步长是1,在cnt=0中步长是-cnt。 从符号上看还有什么不清楚的地方?

 
我不知道如何创建日志,但我肯定会在一天内把它们全部搞定。一些有5位数的经纪公司,这些日志一天就增长到可怕的大小(1.6gb),而vps上的 空间是有限的。提前感谢。
 
M2012K:
我如何建议--如何让MT4自动删除免费日志(或根本不创建日志)?我不得不使用一些有5位数的经纪公司,这些日志在一天之内就开始增长(1.6GB),而且在vps上的位置是有限的。提前感谢。

你可以自己做。

图书馆1图书馆2

==============

虽然,最后一个(当前)文件是由终端打开的。要删除它并不容易。但你可以删除内容,这是写在开头的。

创建日志没有被禁用。

==============

1.创建一个符号链接(library1)到files文件夹下的logs文件夹。

2.使用MQL4工具删除所有不必要的文件。

使用MQL4打开当前文件。根据你的需要编辑它。

4.关闭文件。

5.你可以删除该链接。你不一定要这样做。它以后会派上用场。

==============

你也可以创建一个脚本文件(BAT)并在专家顾问中运行它。脚本与上述相同。只有在不创建链接的情况下。处理文件,当然是使用Windows工具。

 
M2012K:

我怎样才能建议如何自动删除免费日志(或根本不创建它们)?

因为在一些有5位数的DC上,这些日志一天会增长到惊人的大小(1.6GB),而vps的空间是有限的。提前感谢。

记录什么?

这和EA的错误有什么区别?

 

你好!我需要帮助,以完善我的原始机器人。首先,我将解释我的简单策略,让大家更清楚哪里需要帮助,有什么目的。

TS的本质。

1.如果开盘价 低于MA,收盘价高于MA,我们就买入。

2.如果开盘价高于MA,收盘价低于MA,我们应该卖出。

如果价格从最有利的价格中移动了X%,那么我们就关闭订单。这类似于追踪止损,但不是点数,而是订单开盘距离和最佳价格的X%。如图片上所示。

AB--从订单开始到最有利的价格的距离;BC=AB的X%;C--订单关闭。

第1项和第2项我已经写在程序中。

extern int period=50;
extern int ma_shift=0;
extern int Magic=666;
extern double lot=0.1;
extern int SL=150;


//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int kolpos=0;
  double ma=iMA (NULL,0,period,ma_shift,MODE_SMMA,PRICE_MEDIAN,0);
//----
   for (int pos=0; pos<OrdersTotal(); pos++)
   {
   OrderSelect (pos, SELECT_BY_POS, MODE_TRADES);
   if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
   kolpos++;
   }
   if (kolpos==0)
   {
 
   if(Open[1]>ma && Close[1]<ma)  
   OrderSend(Symbol(),OP_SELL,lot,Bid,10,Bid+SL*Point,0,NULL,Magic,0,Red);
   if(Open[1]<ma && Close[1]>ma)  
   OrderSend(Symbol(),OP_BUY,lot,Ask,10,Ask-SL*Point,0,NULL,Magic,0,Green);
   
   }
   
   
  
//----
   return(0);
  }

一般来说,我需要帮助为我的TS写一个关闭订单的函数(第3点),并将现有的代码调整为该函数。

P.S. 而且我知道TS不是很好。