Mt4结束支持。 - 页 26

 

任何喜欢我的解决方案的人,请当面写信给我。我将完善它并把它送出去。

祝大家好运。

 
Реter Konow:

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

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

而你就这样做了。鉴于人物是可以改变的--毕竟在阅读人物时是这样的。

 
Artyom Trishkin:

做到这一点。鉴于人物可以改变--因为当你读到人物是真的。


那么,如果我这样做呢?那你怎么说呢?我告诉你一个秘密:对我来说,这种任务完全是小孩子的游戏。你真的认为我做不到吗?这只是天真的想法...

 
Реter Konow:

那么,如果我这样做呢?那你怎么说呢?我告诉你一个秘密:对我来说,这种任务完全是小孩子的游戏。你真的认为我做不到吗?这只是天真的想法...

好吧,就这么做吧。

 
Vitaly Muzichenko:

Artyom没有回答这个问题,但问题是这样的:用程序化的风格来写,这样才能正确地工作

没有问题。对冲以节省字符串操作的比较,好吧,如果客户是个疯子,会同时在所有符号上交易。

但似乎没有其他地方可以保存操作和内存--一切都很简单。

void OnTimer(){

   Alert(Fn_new_bar("EURUSD", PERIOD_D1)); }

//+------------------------------------------------------------------+

uint Sp_Adler32(string line){

   ulong s1 = 1;

   ulong s2 = 0;

   uint buflength=StringLen(line);

   uchar char_array[];

   ArrayResize(char_array, buflength,0);

   StringToCharArray(line, char_array, 0, -1, CP_ACP);

   for (uint n=0; n<buflength; n++){

      s1 = (s1 + char_array[n]) % 65521;

      s2 = (s2 + s1)     % 65521;}

   return ((s2 << 16) + s1);}

//+------------------------------------------------------------------+

bool Fn_new_bar(string symb, ENUM_TIMEFRAMES tf){

   static datetime st_time[]; 

   static uint     st_id[];

   

   //---- set

   datetime new_time = iTime(symb, tf, 0);     if(new_time==0) return(false); 

   uint     new_id   = Sp_Adler32(StringConcatenate(symb,EnumToString(tf))); 

   datetime old_time = 0; 

   uint     old_id   = 0;

   

   //---- find

   int size = ArraySize(st_time); 

   for(int i=0; i<size; i++){

      if(st_id[i]!=new_id) continue; 

      old_id   = st_id  [i]; 

      old_time = st_time[i];

      break;}

   

   //----add new element

   if(old_time==0){

      ArrayResize(st_time, size+1); st_time[size]=new_time;

      ArrayResize(st_id,   size+1); st_id  [size]=new_id; }

   

   //----

   return(old_time>0 && old_time<new_time);}


 
Реter Konow:

我对稍有延迟表示歉意。

下面是该函数的第一个版本。你可以进一步完善和发展它。如果你注意到一个错误,请提出你的意见。


问题的关键不在于OOP,而在于你的代码是线性的,尽管你可能永远也学不会...

 
Galina Bobro:

没问题。对冲以节省字符串操作的比较,好吧,如果客户是个疯子,会同时对所有字符进行交易。

但似乎没有其他地方可以保存操作和内存 - 一切都是最低限度。


关于交易、自动交易系统和策略测试的论坛

Mt4结束支持。

Artyom Trishkin, 2017.09.10 23:21

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

   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:


因习惯而命名错误 -bool Fn_new_bar(string symb, ENUM_TIMEFRAMES tf) 是正确的函数

 
Artyom Trishkin:

那么,现在就去做吧。


好的。你的解决方案只对蜱虫有效。我的是定时器。你认为我用酒吧出场的计时方法是否有缺点。好的。让它像这样。我将在设置一个新的条形标志之前,增加一个检查报价是否到达的功能。我将为该函数添加另一个参数--一个符号。用户将选择他们想要接收新的酒吧事件的符号,并将其发送到该函数。该函数将检查该符号的最后一次引用的时间。然后我们将比较酒吧正式出现的时间和报价的时间,并设置事件标志。

我只是刚刚开始研究这个问题,但我没有看到任何困难。

 
Galina Bobro:

这不是关于OOP,而是关于你的代码是线性的,尽管你可能永远不会知道...

线性、非线性...你是不是又在谈论编程中的歌剧?