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

 
找到酒吧的时间,并重新计算它与高级TF的酒吧编号
 
FAQ:
找到酒吧的时间,并重新计算它与高级TF的酒吧编号


你为什么不写代码呢?

 
gince:


如何使(i=1; i<StartBar; i++)StartBar成为较早的时间框架(extern int = ... ; /W1, MN1)的指定弯曲(extern int b= 2)的条。


纠正

匹配指定时间范围内的两个顶点(比方说一个星期和一个月)

 

这是正确的方法吗?

条件 tf1 >tf2

datetime GetExtremumZZ_2TF_Bars(string sy="", int tf1=0, int tf2=0, int ne=0, int dp=12, int dv=5, int bs=3) 
{
  if (sy=="" || sy=="0") sy=Symbol();
  double zz1, zz2, p1, p2;
  int    i, k1=iBars(sy, tf1), ke=0;
  int    j, k2=iBars(sy, tf2);
  datetime t;
  
  for (i=1; i<k1; i++) 
  {
    zz1=iCustom(sy, tf1, "ZigZag", dp, dv, bs, 0, i);
    if (zz1!=0) 
    {
      ke++;
      if (ke>ne) 
         {p1=zz1;}
    }
  }
  for (j=1; j<Bars; j++) 
  {
    zz2=iCustom(sy, tf2, "ZigZag", dp, dv, bs, 0, j);
    if (zz2!=0) 
    {
      p2=zz2;
      t=iTime(sy, tf2, j);
      if(p1==p2)
      return(t);
    }
  }
  return(0);
}
 

问题如下。在 MQL4书中 ,可以在MQL4.community ,在 "GlobalVariables "一章的 "GV-Variables的属性 "部分,它说"GV变量只能有double类型"。下面,在 "GlobalVariableDel()函数"部分,有一个专家 globalvar.mq4 的例子,内容如下。

//--------------------------------------------------------------------
// globalvar.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int    Experts;                                 // Колич. экспертов
double Depo=10000.0,                            // Заданный депозит
       Persent=30,                              // Заданный процент     
       Money;                                   // Искомые средства
string Quantity="GV_Quantity";                  // Имя GV-переменной
//--------------------------------------------------------------------
int init()                                      // Спец. функция init
  {
   Experts=GlobalVariableGet(Quantity);         // Получим тек. знач.
   Experts=Experts+1;                           // Колич. экспертов
   GlobalVariableSet(Quantity, Experts);        // Новое значение
   Money=Depo*Persent/100/Experts;              // Средства для эксп.
   Alert("Для эксперта в окне ", Symbol()," выделено ",Money);
   return;                                      // Выход из init()
  }
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
   int New_Experts= GlobalVariableGet(Quantity);// Новое колич. эксп.
   if (Experts!=New_Experts)                    // Если изменилось
     {
      Experts=New_Experts;                      // Теперь текущ. такое
      Money=Depo*Persent/100/Experts;           // Новое знач. средств 
      Alert("Новое значение для эксперта ",Symbol(),": ",Money);
     }
   /*
   ...
   Здесь долен быть указан основной код эксперта,
   в котором используется значение переменной Money
   ...
   */
   return;                                      // Выход из start()
  }
//--------------------------------------------------------------------
int deinit()                                    // Спец. ф-ия deinit
  {
   if (Experts ==1)                             // Если эксперт один..
      GlobalVariableDel(Quantity);              //..удаляем GV-перемен
   else                                         // А иначе..
      GlobalVariableSet(Quantity, Experts-1);   //..уменьшаем на 1
   Alert("Эксперт выгружен из окна ",Symbol()); // Сообщ. о выгрузке
   return;                                      // Выход из deinit()
  }
//--------------------------------------------------------------------

问题:为什么在这个例子中,GV变量 ExpertNew_Expertint 类型的 ,尽管如前所述,这些变量 应该是double类型

预先感谢您的回答

 
gince:

这是正确的方法吗?

条件 tf1 >tf2


有些事情是错的。

在第一个周期中,我试图在高位TF上找到指定弯曲的价格。我在低位TF上开始第二个周期,在那里我寻找每条弯曲的价格,只要它在图表上,并与第一个周期中发现的价格进行比较。如果我找到了这样的价格,我就返回这个TF中给定的弯道的时间。

我在测试器中从2000.01.01开始。

日志中的内容

2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1688
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2495
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1192
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2315
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1069
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3161
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2351
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.4535
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.338
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.4249
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.416
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2596
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3353
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2658
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3138
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0344
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1537
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0608
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1216
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.079
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2401
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0104
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0917
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 0.8227
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 0.9596
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: t1 1992.09.01 00:00
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p1 1.4104

2000年也是如此,即在测试期的初期。

错在哪里。我是一个薄弱的程序员。我想写一个测试程序。我很难受。我不能要求程序员这样做,因为它正在分步进行,取决于我收到的数据。

我在这里需要一些帮助。我还在上一页请求帮助,写出NewZZ()函数。

如果有人能纠正错误并加以解释,我将不胜感激。

datetime GetExtremumZZ_2TF_Bars(string sy="", int tf1=0, int tf2=0, int ne=0, int dp=12, int dv=5, int bs=3) 
{
  if (sy=="" || sy=="0") sy=Symbol();
  double zz1,  zz2, p1, p2;
  int    i, k1=iBars(sy, tf1), ke=0;
  int    j;
  datetime t;
  
  for (i=1; i<k1; i++) 
  {
    zz1=iCustom(sy, tf1, "ZigZag", dp, dv, bs, 0, i);
    if (zz1!=0) 
    {
      ke++;
      if (ke>ne) 
         {p1=zz1;datetime t1=iTime(sy,tf1,i);}
    }
    
  }
  Print("                                  p1   " ,p1);
  Print("                                  t1   ", TimeToStr(t1,  TIME_DATE|TIME_MINUTES));
  for (j=1; j<Bars; j++) 
  {
    zz2=iCustom(sy, tf2, "ZigZag", dp, dv, bs, 0, j);
    if (zz2!=0) 
    {
      p2=zz2;
      Print("p2=   ",p2);
      t=iTime(sy, tf2, j);
      if(p1==p2)
      {
         Print("skaiciavimo pradzia nuo   ",TimeToStr(t, TIME_DATE|TIME_MINUTES));
         return(t);
      }
    }
  }
  return(0);
}
 
gince:


有些事情是错的。

帮助弱者。

 

下午好。在网站上发现了一个尾随功能。

for(i=0; i<OrdersTotal(); i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 继续。
如果(OrderType()==OP_BUY)
{
如果(Bid-OrderOpenPrice()>Point*TrailingStop_)
{
{ 如果(OrderStopLoss()<Bid-Point*TrailingStop_)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop_, OrderTakeProfit(),0,Green)。
return(0);
}
}
}

如果(OrderType()==OP_SELL)
{
如果((OrderOpenPrice()-Ask)>(Point*TrailingStop_))
{
如果((OrderStopLoss()>(Ask+Point*TrailingStop_)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop_, OrderTakeProfit(),0,Red)。
return(0);
}
}
}
}

在测试策略时,在第一笔订单开仓后,这个函数工作正常,即拖曳运行,订单关闭。但打开二阶后,在引用尾部函数时出现了除零 错误。请帮助我使尾随函数在二阶、三阶等方面发挥作用。

 
我不能代表整个论坛,但就我个人而言,当我看到一个没有缩进的来源时,我就会有一种执念,认为向作者解释什么都没有用。
 
MikeM:
我不能代表整个论坛,但就我个人而言,当我看到一个没有缩进的源头时,我就会觉得向作者解释什么都是无用的。

我在编辑器里有缩进,但当我把它复制到这里时,缩进就不见了......。