新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1750

 
Aleksei Stepanenko MqlDateTime结构 对每个条形的顺序进行枚举,通过条形的时间进行检查。但在这种情况下,会出现不应该存在的漏网之鱼的信号。

比如说。

错过了周三的1个小节,由这个符号在00:30开始,即在00:00失去了。

M30的时间框架,结果是一天内有47个,而不是48个。这正是我们需要确定的内容


 
Vitaly Muzichenko #:

下面是一个例子。

错过了周三的1个小节,由这个符号在00:30开始,即在00:00失去了。

M30的时间框架,在一天中得到了47,而不是48。这正是我们需要确认的。


我不知道正确的方法,但我认为应该朝这个方向走。

      datetime tt=Time[Bars-1];
      //--- 
      if(Time[i]==tt){tt+=PeriodSeconds(PERIOD_CURRENT);}
      else
      {Print(TimeToString(tt,TIME_DATE|TIME_MINUTES));tt+=PeriodSeconds(PERIOD_CURRENT);}
 
Vitaly Muzichenko #:

下面是一个例子。

错过了周三的1个小节,由这个符号在00:30开始,即在00:00失去了。

M30的时间框架,在一天中得到了47,而不是48。这正是我们需要确定的内容


int  Bars( 
   string           symbol_name,     // имя символа 
   ENUM_TIMEFRAMES  timeframe,       // период 
   datetime         start_time,      // с какой даты 
   datetime         stop_time        // по какую дату 
   );
如果47
 

Vitaly Muzichenko #:

这正是我们需要确认的。

明白了,问题是错误的警报,其中会有许多错误的警报。

//дата последней свечи
 curr_time=iTime(symbol,frame,0);
//ограничение на торговлю вне начала бара
if(last_time==curr_time) return;

if((iBarShift(eSymbol,eFrame,last_time)-iBarShift(eSymbol,eFrame,curr_time))>PeriodSeconds(eFrame)) printf("а-я-яй");
last_time=curr_time;
 
Alexey Viktorov #:
如果47

这是有可能的,你也可以CopyOpen()

无法决定如何通过整个故事来组织这个循环

 

甚至更简单。

for(int i=TotalBars-1; .....
   {
   if((iBarShift(eSymbol,eFrame,last_time)-i)>PeriodSeconds(eFrame)) printf("а-я-яй");
   last_time=iTime(symbol,frame,i);
 
Vitaly Muzichenko #:

这是有可能的,你也可以CopyOpen()

无法决定如何通过整个故事来组织这个循环

零日条形图的开盘时间减去1秒后,即为首日条形图的开盘时间。然后从第一个日线的开口减去1秒到第二个日线的开口,以此类推。
 
Vitaly Muzichenko #:

这是有可能的,你也可以CopyOpen()

我无法决定如何在整个历史中循环安排它

确切地说(例如M30)--如果相邻条形的开口时间(模数24小时)比M30长--这意味着它们之间缺少条形。

int nbars = ( ( iTime(_Symbol,PERIOD_M30,N) - iTime(_Symbol,PERIOD_M30,N+1) ) ) / PeriodSeconds(PERIOD_M30) ) % 48; // сколько баров должно быть между ссоедними отметками

if (nbars>1) PrintFormat("Пропущено баров: %d",nbars-1);

 

谢谢大家,原则是明确的,问题已经正式化了。

---

现在有一个问题:我做错了什么,所有的字符都有相同的值?

#property strict

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print( DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_POINT),8) );
  }
//+------------------------------------------------------------------+
0       14:39:38.965    sc GBPCHF,M30: 0.00001000
0       14:46:44.478    sc NZDCHF,M30: 0.00001000
0       14:44:54.709    sc EURUSD,M30: 0.00001000

---

P.S. 终端MT4,在不同经纪公司的两个不同终端上进行了检查

P.SS.我在MT5中检查,结果是一样的

2021.11.20 15:05:34.881 sc (EURCHF,M30)  0.00001000
2021.11.20 15:05:39.203 sc (AUDUSD,M30)  0.00001000
2021.11.20 15:05:51.985 sc (EURAUD,M30)  0.00001000

---

我可能做错了什么!

我需要获得 "点值"

 
Vitaly Muzichenko #:

谢谢大家,原则是明确的,问题已经正式化了。

---

现在有一个问题:我做错了什么,所有的字符都有相同的值?

维塔利,在这里,有必要对开发人员进行窃听,或者