处理静态datetime函数

卢安德·埃兹拉
231
卢安德·埃兹拉  

嗨,我尝试处理正在检测新代码的代码 酒吧功能。我的代码由NewBar()函数中的静态datetime组成,其问题在于,如果我两次使用该函数,则秒将永远无法工作。这是我的代码:

bool NewBar()
  {
   static datetime timeCur;
   datetime timePre = timeCur;
   timeCur=Time[0];
   bool isNewBar = timeCur != timePre;
   if(isNewBar)
     {
      return true; // Once per bar
     }
   return false;
  }

//
double HeikenAshiOpenCurrentPeriod(int shift = 0)
  {
   double result = iCustom(Symbol(),PERIOD_CURRENT,"Heiken Ashi","Red","Lime","Red","Lime",2,shift);
   return result;
  }
//
double HeikenAshiCloseCurrentPeriod(int shift = 0)
  {
   double result = iCustom(Symbol(),PERIOD_CURRENT,"Heiken Ashi","Red","Lime","Red","Lime",3,shift);
   return result;
  }

bool HAGreenCandleCurrentPeriod(int shift = 0)
  {
   if(HeikenAshiOpenCurrentPeriod() < HeikenAshiCloseCurrentPeriod())
      return true;
   return false;
  }

从该代码中,我想在此代码中调用该函数:

   if(NewBar() && HAGreenCandleCurrentPeriod(1))
      Alert("New Bar & Green Candle");
   if(NewBar() && !HAGreenCandleCurrentPeriod(1))
      Alert("New Bar & Red Candle");

由于NewBar()函数中的静态日期时间,第二个if将永远无法工作。有没有解决的办法?

编码外汇:强制代码每只蜡烛运行一次
编码外汇:强制代码每只蜡烛运行一次
  • 2017.09.15
  • www.youtube.com
Mql4 Progamming Tutorials and Forex Trading Training. //learnmql4.comJimdandy Trade Management Tool.. //www.tbxfkj.com/en/market/product/11862Skill...
恩斯特·范德·默威
7732
恩斯特·范德·默威  
   static datetime preTime=0,curTime;
   bool newBar=preTime!=(curTime=iTime(Symbol(),Period(),0));
//---
   if(newBar && HAGreenCandleCurrentPeriod(1))
     { 
      Alert("New Bar & Green Candle");
      preTime=curTime;
     }
//---
   if(newBar && !HAGreenCandleCurrentPeriod(1))
     { 
      Alert("New Bar & Red Candle");
      preTime=curTime;
     }
//---
威廉·罗德
24546
威廉·罗德  
  1. 对于新的酒吧测试, 吧台 是不可靠的(刷新/重新连接可以更改图表上的条形数量),数量不可靠(未勾选),价格不可靠(重复价格和 这 ==操作数。 -MQL4编程论坛。)始终使用 时间.
              新蜡烛-MQL4编程论坛 #3 2014.04.04

    我不同意制作新的酒吧功能,因为它可以每打一次被叫一次。一个变量可以被多次测试。
              在每个小节的开头运行一次EA-MQL4编程论坛 2011.05.06

  2. 您的密码
       bool isNewBar = timeCur != timePre;
       if(isNewBar)
         {
          return true; // Once per bar
         }
       return false;
    简化版
       return  timeCur != timePre;

卢安德·埃兹拉
231
卢安德·埃兹拉  
嗨,我已经使用了您的建议恩斯特(Ernst),它以绿色和红色蜡烛工作,但是在每个新的酒吧中工作, 每一刻
MetaTrader 5中的测试基础
MetaTrader 5中的测试基础
  • www.mql5.com
MetaTrader 5中三种测试模式之间的区别是什么?应该特别注意什么?如何同时在多种工具上进行交易的EA的测试如何进行?测试期间何时以及如何计算指标值,以及如何处理事件?在“仅开放价格”模式下的测试过程中,如何同步来自不同工具的柱线?本文旨在为这些问题和许多其他问题提供答案。
恩斯特·范德·默威
7732
恩斯特·范德·默威  
卢安德·埃兹拉:
嗨,我已经使用了您的建议恩斯特(Ernst),它以绿色和红色蜡烛工作,但是在每个新的酒吧中工作, 每一刻


//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static datetime preTime=iTime(Symbol(),Period(),0),curTime;
   bool newBar=preTime!=(curTime=iTime(Symbol(),Period(),0));
//---
   if(newBar && HAGreenCandleCurrentPeriod(1))
     { 
      Alert("New Bar & Green Candle");
      preTime=curTime;
     }
//---
   if(newBar && !HAGreenCandleCurrentPeriod(1))
     { 
      Alert("New Bar & Red Candle");
      preTime=curTime;
     }
//---
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double HeikenAshiOpenCurrentPeriod(int shift = 0)
  {
   double result = iCustom(Symbol(),PERIOD_CURRENT,"Heiken Ashi","Red","Lime","Red","Lime",2,shift);
   return result;
  }
//
double HeikenAshiCloseCurrentPeriod(int shift = 0)
  {
   double result = iCustom(Symbol(),PERIOD_CURRENT,"Heiken Ashi","Red","Lime","Red","Lime",3,shift);
   return result;
  }

bool HAGreenCandleCurrentPeriod(int shift = 0)
  {
   return (HeikenAshiOpenCurrentPeriod() < HeikenAshiCloseCurrentPeriod());
  }
//+------------------------------------------------------------------+

在职的。请显示您的代码。