MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1750

 
Aleksei Stepanenko 하고 MqlDateTime 구조 를 사용하여 막대 시간을 통해 시퀀스를 확인합니다. 그러나 존재해서는 안 되는 놓친 막대에 대한 신호가 있을 것입니다.

예를 들면 다음과 같습니다.

수요일에 1개의 막대를 놓쳤습니다. 이 기호는 00:30에 시작합니다. 즉, 00:00에 손실됩니다.

시간 M30, 48일이 아닌 47일 만에 밝혀졌습니다. 이것이 정확히 확인되어야 하는 것입니다.


 
Vitaly Muzichenko # :

예를 들면 다음과 같습니다.

수요일에 1개의 막대를 놓쳤습니다. 이 기호는 00:30에 시작합니다. 즉, 00:00에 손실됩니다.

시간 M30, 48일이 아닌 47일 만에 밝혀졌습니다. 이것이 정확히 확인되어야 하는 것입니다.


어떨지 모르겠지만 이 방향으로 생각해볼게

       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, 48일이 아닌 47일 만에 밝혀졌습니다. 이것이 정확히 확인되어야 하는 것입니다.


 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);

 

ALL 덕분에 원칙이 명확했고 작업을 공식화할 수 있었습니다.

---

이제 질문은 다음과 같습니다. 내가 무엇을 잘못하고 있습니까? 모든 문자가 동일한 값을 가지고 있습니까?

 #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

---

PS 터미널 MT4, 서로 다른 DC의 서로 다른 두 터미널에서 확인됨

추신 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 # :

ALL 덕분에 원칙이 명확했고 작업을 공식화할 수 있었습니다.

---

이제 질문은 다음과 같습니다. 내가 무엇을 잘못하고 있습니까? 모든 문자가 동일한 값을 가지고 있습니까?

Vitaliy, 여기서는 버그로, 개발자에게 또는