Mt4结束支持。 - 页 25

 
Artyom Trishkin:

你只需要写一个用户询问的函数。"M5上有一个新的酒吧 吗?"并得到一个是/否的答案。

比如说。

这里是你的函数IsNewBar(),我们将随着任务的进一步扩展而进一步发展和扭曲/旋转它。


在我看来,这并不是一个证明OOP有用性的好例子。
例如,这里是一个只使用一个函数的变体。

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
void OnTick()
  {
   IsNewBar(0,false); // режим сбора информации
   if(IsNewBar()) Print("Пришел новый бар текущего ТФ");  // режим считывания информации
   if(IsNewBar(PERIOD_H4)) Print("Пришел новый бар H4");  // режим считывания информации
   if(IsNewBar(PERIOD_D1)) Print("Пришел новый бар D1");  // режим считывания информации
   
  }
bool IsNewBar(ENUM_TIMEFRAMES tf=PERIOD_CURRENT,bool out=true)
  {
   static const ENUM_TIMEFRAMES TF[22]=
     {
      PERIOD_CURRENT,PERIOD_M1,PERIOD_M2,PERIOD_M3,PERIOD_M4,PERIOD_M5,PERIOD_M6,PERIOD_M10,PERIOD_M12,PERIOD_M15,PERIOD_M20,PERIOD_M30,
      PERIOD_H1,PERIOD_H2,PERIOD_H3,PERIOD_H4,PERIOD_H6,PERIOD_H8,PERIOD_H12,PERIOD_D1,PERIOD_W1,PERIOD_MN1
     };
   static bool newbar[22];
   static bool FirstTime=true;
   static int acb[22]; // array of current bars
   if(FirstTime)
     {
      for(int i=0;i<22;i++) acb[i]=Bars(Symbol(),TF[i]);
      FirstTime=false;
      return(false);
     }
   int curtf=0;
   while(TF[curtf]!=tf) curtf++;
   if(out) return (newbar[curtf]);
   for(int i=0;i<22;i++)
     {
      int CurBars=Bars(Symbol(),TF[i]);
      if(acb[i]<CurBars)
        {
         acb[i]=CurBars;
         newbar[i]=true;
        }
      else newbar[i]=false;
     }
   return(false);
  }

你当然可以把它从OnTick 中移除,然后插入OnTimer 中。

 
Реter Konow:

关于这个问题,我认为你错了。请向服务台查询。让他们来回答这个问题:无论报价的到来,平台上是否会形成新的柱状物,还是不会。如果没有,那么在发生新的酒吧时,请检查上面是否有一句话。如果是这样,新的酒吧已经形成。我们可以这样做。你不需要改变太多。

哦,妈妈咪呀...只要读了这些信息就可以了。我非常惊讶你不知道,当他们告诉你这件事的时候,你也有疑虑。对于这种幼稚的问题,我甚至不会去看服务台的方向,他们会嘲笑你。然后自己问他们--在你的个人资料中,你有一个Servicedesk的链接。
 
Nikolai Semko:

在我看来,这并不是一个证明OOP有用性的好例子。
例如,这里有一个只使用一个函数的变体。

当然,你可以把它从OnTick 中移除,然后插入OnTimer 中。

没有看逻辑,好吧,让我们假设假设它工作正常。

而由任何随机的字符?

想象一下,程序使用的是市场概览窗口中的符号列表,用户可以随时改变符号集。

 
我个人没有看到@Nikolai Semko的 OOP代码。


恭敬地说。

 

Artyom的问题有点滞后,但问题是这样的:用程序化的方式来写,这样才能正常工作

void OnTick()
 {
 
  if(IsNewBar("AUDCAD",PERIOD_H1)) {
   // задача №1
  }
 
  if(IsNewBar("GBPJPY",PERIOD_M15)) {
   // задача №2
  }
 
  if(IsNewBar("EURUSD",PERIOD_H4)) {
   // задача №3
  }

 }

// Функция "Новый бар"
bool IsNewBar(....) {
 здесь код, который нужно написать
}
 
Реter Konow:

是的,在一个定时器上。出现一个没有引号的新栏。我们感兴趣的正是酒吧出现的 事件,而我们可以在Optisk()中固定报价。

在任何情况下都会出现一个酒吧。


这里 我们有对酒吧的解释。

Time[i]栏的打开时间通常与tick的到达时间不一样。任何时间框架的条形图的开盘时间总是时间框架的倍数。在一个时间框架内出现的任何第一个刻度线 都是形成一个条形 的;如果在该时间框架内没有刻度线进入,在该时间框架内也不会形成条形。

 
Vitaly Muzichenko:

Artyom没有真正涵盖这个问题,但问题是这样的:用程序化的方式来写,这样才能正确地工作

我想逐步增加任务,使人们能够快速、方便、简单地执行任务。稍后展示如何使用OOP轻松完成。

但OOP的主要拒绝者自己却背离了问题的解决:)

 
Artyom Trishkin:

我想逐步增加任务,使人们能够快速、方便、简单地执行任务。然后展示用OOP做这件事是多么容易。

但OOP的主要拒绝者自己却拒绝了任务的解决方案:)

是的,我自己并没有真正说明,我转述一下。

Artem还没有打开一个小问题,问题是:用程序化的风格来写,正确地 工作。

也许他将会回来证明这是很容易和简单的。

 
Vitaly Muzichenko:

我自己并没有真正说出来,所以我重新表述一下。

Artyom并没有真正涵盖这个问题,问题是这样的:用程序化的风格来写,这样才能 正确地 工作

也许他将回来证明,这非常容易和简单。

我有一个目标,就是让他的程序化风格的代码最终在这样一个循环中工作。

   ENUM_TIMEFRAMES array_timeframes[]=
      {
      PERIOD_M1,PERIOD_M2,PERIOD_M3,PERIOD_M4,PERIOD_M5,PERIOD_M6,PERIOD_M10,PERIOD_M12,PERIOD_M15,PERIOD_M30,
      PERIOD_H1,PERIOD_H2,PERIOD_H3,PERIOD_H4,PERIOD_H6,PERIOD_H8,PERIOD_H12,PERIOD_D1,PERIOD_W1,PERIOD_MN1
      };
   int total=SymbolsTotal(true), total_tf=ArraySize(array_timeframes);
   for(int i=0; i<total; i++){
      string symbol_name=SymbolName(i,true);
      for(int j=0; j<total_tf; j++){
         if(IsNewBar(symbol_name,array_timeframes[j])){
            Print("Новый бар на ",symbol_name," ",EnumToString(array_timeframes[j]));
            }
         }
      }
 
Artyom Trishkin:

我的目标是,最终的结果是他的程序化风格的代码能在这样一个循环中工作。

符号循环,当报价到达时检查新的条形图 是否打开,等等,可以很容易地被添加到我的解决方案中。而OOP与此有什么关系?

你选择了一个错误的例子。闲暇时想想别的事情。