이 기능의 문제점을 설명해 주시겠습니까?

 
" Service Desk를 통해 개발자와 통신하십시오! "와 관련이 없는 댓글은 이 항목으로 이동되었습니다.
 
MetaQuotes Software Corp. :

모든 새로운 소프트웨어 제품에는 회사 내에서 가장 철저한 테스트에도 항상 감지할 수 없는 버그가 필연적으로 포함됩니다. 그래서 우리는 우리 프로그램에서 발견된 문제에 대한 모든 사용자 보고서를 매우 중요하게 여기고 각각에 답하려고 노력합니다.

먼저 잘못된 답변이 있으면 의사 소통하고 무시하는 방법. 신청 2016.06.22 08:06 , #1499568

커뮤니티에서 설명할 수 있을까요?


다음은 어드바이저 코드의 일부입니다. 내부 무효 OnTick()

   bool openNew, newDay, newHour;

    if (( int )mqlDateTime.hour == startHour) // startHour = 0 Это условие выполнено.
     {
      newDay = newBar.IsNewBar( _Symbol , PERIOD_D1 , oldDay); // 
    if (newDay)
     Print ( "***** newDay " , newDay, " mqlDateTime.hour " , mqlDateTime.hour); // Судя по распечатке newDay = true
       newHour = newBar.IsNewBar( _Symbol , PERIOD_H1 , oldHour);
     if (newHour)
      Print ( "***** newHour " , newHour); // Судя по распечатке newHour = true
        if (newDay && newHour) // A ЭТО УСЛОВИЕ НЕ ВЫПОЛНЕНО НЕСМОТРЯ НА ПРЕДЫДУЩИЕ РАСПЕЧАТКИ.
         {
          openNew = openNew_or_No();
            Print ( "***** openNew " , openNew, " ***** PositionsTotal " , PositionsTotal ()); // Эта распечатка отсутствует
            if (openNew || PositionsTotal () == 0 )
             
              // Продолжение кода...
              // На несоответствие количества открывающих и закрывающих фигурных скобок прошу не обращать внимания.

"전문가" 탭의 내용입니다.

 2016.06 . 22 00 : 00 : 44.531 Toad Green (EURUSD,M15) ***** newHour true
2016.06 . 22 00 : 00 : 44.331 Toad Green (USDJPY,M15) ***** newHour true
2016.06 . 22 00 : 00 : 18.361 Toad Green (EURUSD,M15) ***** newDay true mqlDateTime.hour 0
2016.06 . 22 00 : 00 : 12.770 Toad Green (USDJPY,M15) ***** newDay true mqlDateTime.hour 0

21.06에 대한 로그 파일의 첫 번째 줄에서 위의 코드가 제대로 작동했음을 분명히 알 수 있습니다.

GM       0        00 : 00 : 30.116     Trades   '3265046' : instant buy 0.01 EURUSD at 1.13188 tp: 1.13388 (deviation: 55 )
NK       0        00 : 00 : 30.246     Trades   '3265046' : accepted instant buy 0.01 EURUSD at 1.13188 tp: 1.13388 (deviation: 55 )
IE       0        00 : 00 : 30.246     Trades   '3265046' : deal # 73303810 buy 0.01 EURUSD at 1.13188 done (based on order # 87892298 )
KI       0        00 : 00 : 30.246     Trades   '3265046' : order # 87892298 buy 0.01 / 0.01 EURUSD at 1.13188 done in 130 ms
ON       0        00 : 00 : 30.256     Trades   '3265046' : instant sell 0.01 EURUSD at 1.13093 tp: 1.12893 (deviation: 55 )
LQ       0        00 : 00 : 30.366     Trades   '3265046' : accepted instant sell 0.01 EURUSD at 1.13093 tp: 1.12893 (deviation: 55 )
HG       0        00 : 00 : 30.376     Trades   '3265046' : deal # 73303813 sell 0.01 EURUSD at 1.13093 done (based on order # 87892301 )
RK       0        00 : 00 : 30.376     Trades   '3265046' : order # 87892301 sell 0.01 / 0.01 EURUSD at 1.13093 done in 120 ms
MJ       0        00 : 00 : 30.376     Trades   '3265046' : modify # 87608748 sell 0.01 EURUSD sl: 0.00000 , tp: 1.12031 -> sl: 0.00000 , tp: 1.12462
GK       0        00 : 00 : 30.476     Trades   '3265046' : accepted modify # 87608748 sell 0.01 EURUSD sl: 0.00000 , tp: 1.12031 -> sl: 0.00000 , tp: 1.12462
OK       0        00 : 00 : 30.486     Trades   '3265046' : modify # 87608748 sell 0.01 EURUSD -> sl: 0.00000 , tp: 1.12462 done in 107 ms
OH       0        00 : 00 : 30.486     Trades   '3265046' : modify # 87892301 sell 0.01 EURUSD sl: 0.00000 , tp: 1.12893 -> sl: 0.00000 , tp: 1.12462
GJ       0        00 : 00 : 30.586     Trades   '3265046' : accepted modify # 87892301 sell 0.01 EURUSD sl: 0.00000 , tp: 1.12893 -> sl: 0.00000 , tp: 1.12462
KI       0        00 : 00 : 30.596     Trades   '3265046' : modify # 87892301 sell 0.01 EURUSD -> sl: 0.00000 , tp: 1.12462 done in 109 ms
EN       0        04 : 20 : 25.608     Trades   '3265046' : deal # 73317674 sell 0.01 EURUSD at 1.13388 done (based on order # 87906853 )

다음날이 시작될 때까지 고문은 휴식합니다.

21.06에 대한 로그 파일의 마지막 2줄

OD      0       23:09:20.196    Network '3265046': scanning network for access points
NR      0       23:09:33.496    Network '3265046': scanning network finished

22.06에 대한 로그의 시작

PM      1       02:13:39.422    Network '3265046': connection to MetaQuotes-Demo lost
GF      2       02:13:39.582    MQL5.community  authorization failed
DO      2       02:13:39.682    MQL5.community  authorization failed
IP      2       02:13:40.052    MQL5.community  authorization failed
PK      0       02:13:43.252    Network '3265046': authorized on MetaQuotes-Demo through Access Point RU Moscow (ping: 117.48 ms)
DI      0       02:13:43.252    Network '3265046': previous successful authorization performed from 31.173.80.184 on 2016.06.21 14:55:11
지원팀 2016.06.22 08:36

NewDay와 NewHour가 동시에 인쇄된 경우 로그에서 서로 옆에 있어야 합니다. 같은 시간으로

그리고 귀하의 로그에서 그들은 다른 전문가(EURUSD 및 USDJPY)뿐만 아니라 일반적으로 다른 시간
그리고 신청 마감...
알렉세이 빅토 로프 2016.06.22 11:25

귀찮게 해서 죄송합니다. 한동안 관심을 기울이지 않았습니다. 하지만!!! 그렇다면 왜 새로운 날의 첫 번째 막대가 나타날 때 새로운 시간과 새로운 분의 첫 번째 막대이기도 한 동일한 함수가 누군가에게는 true를 반환하고 누군가에게는 false를 반환하고 원할 때 모든 것을 올바르게 반환할 수 있는 이유 모두에게?

이 기능의 문제점을 설명해 주시겠습니까?

 /*****************Определение появления нового бара******************/
class cNewBar
{
   public :
bool IsNewBar( string symbol, ENUM_TIMEFRAMES timeframe, datetime & m_tOld)
 {
   datetime tNew = ( datetime ) SeriesInfoInteger (symbol, timeframe, SERIES_LASTBAR_DATE );
   if (tNew > m_tOld)
    {
     m_tOld = tNew;
     return ( true );
    }
   return ( false );
 }
};
/********************************************************************/
왜 일주일 이상 동안 모든 것이 제대로 작동하고 갑자기 그러한 재앙이 일어날 수 있습니까 ???
그러한 클래스의 사용을 평가하지 마십시오.

지원팀 2016.06.22 11:31

이 기능은 다음으로 인해 여러 번 사용할 수 없습니다.

m_tOld = tNew;

알렉세이 빅토 로프 2016.06.23 10:17

나는 어제 즉시 깨닫지 못했습니다 ... 결국 변수는 참조에 의해 m_tOld 변수에 전달됩니다. 이는 전역 변수 수준에서 선언되며 다른 변수가 전달되는 경우 다중 호출에 어떤 식 으로든 영향을 미치지 않아야합니다 참조에 의한 기능. 안 그래? 이것은 첫째, 둘째-어떤 이유로 테스터와 디버그에서 모든 것이 올바르게 작동하지만 데모 계정에서는 너무 이상하게 작동합니다. 때로는 작동하고 때로는 작동하지 않습니다.

지원팀 2016.06.23 10:24

이 수표는 어떻습니까?

   if (tNew > m_tOld)


지원팀 2016.06.23 10:24

함수를 연속으로 2번 호출합니다. 첫 번째 호출에서 true를 반환하면 같은 틱에서 호출하더라도 다음 호출에서 false를 반환합니다.


알렉세이 빅토 로프 2016.06.23 10:36

글쎄, 그렇게 불린다. 필요한 모든 코드를 제공했습니다. 이것이 테스터와 디버깅을 방해하지 않고 데모에서는 원하는 대로 수행되는 이유는 무엇입니까? 이해할 수 없는 것이 있습니다. 뭐, 그런 문제가 테스터에서 가끔 미끄러진다면 새로운 방법을 모색하는 것도 가능했고 필요했지만 테스터에는 문제가 없었습니다...

그럼에도 불구하고 이제 mql4에서 동일한 기능을 사용하는 Expert Advisor는 보존되지 않았지만 문제는 없었습니다. 이 문제는 mql5에서만 발생했습니다.

알렉세이 빅토 로프 2016.06.23 10:41


그래서 무엇? 음, 확인해보세요... 결국, 확인하기 전에 tNew 변수에 값이 할당되고 m_tOld 변수 자체가 아니라 참조로 전달된 변수와 비교되지만, 이 m_tOld는 시간 값을 가질 수 있습니다. 지정된 기간의 이전 막대 또는 첫 번째 호출인 경우 1970년 1월 1일입니다. 그리고 각 기간의 다음 틱에서만 동일한 막대의 값이 비교됩니다.

알렉세이 빅토 로프 2016.06.23 10:57


다른 변수와 다른 기간이 함수에 전달된다는 점에 유의하십시오.

      newDay = newBar.IsNewBar( _Symbol , PERIOD_D1 , oldDay );
   

       newHour = newBar.IsNewBar( _Symbol , PERIOD_H1 , oldHour );


그리고 모든 것 ... 그 후, 완전히 무시합니다. 즉각적인 답변에 감사드립니다만 명확한 답변이 오지 않았습니다. mql5에 버그가 있는 경우 "우리가 알아내는 중입니다. 잠시만요"와 같이 작성할 수 있습니다. 그래서 문제는 단순히 무시됩니다.

mql4의 비슷한 함수가 15초의 배수로 시간의 변화를 알아냈는데 mql5에서 갑자기 그런 문제가 생겼습니다...

 

이것이 실험 중 관찰의 잘못된 구성이 의미하는 것입니다.

 
드미트리, 또 시작됐어? "왜 2016년 6월 21일에 주문이 문제없이 열렸고, 2016년 6월 22일에 관찰 조직이 갑자기 잘못되었습니까?"라는 질문이나 다른 문제에 대답하는 것이 더 쉬울 수 있습니다.
 
Alexey Viktorov :
...

대답하려면 코드가 필요합니다. 코드 조각이 있습니다. 누구나 이 코드를 실행할 수 있도록 최소한의 코드를 만드십시오.

코드의 변수 값을 함수 입구와 함수 출구에서 인쇄하는 것이 좋을 것입니다.


 
Alexey Viktorov :
드미트리, 또 시작됐어? "왜 2016년 6월 21일에 주문이 문제없이 열렸고, 2016년 6월 22일에 관찰 조직이 갑자기 잘못되었습니까?"라는 질문이나 다른 문제에 대답하는 것이 더 쉬울 수 있습니다.
제가 있는 그대로의 답변만 하면 아마 차단당할 가능성이 큽니다.
 
Dmitry Fedoseev :
제가 있는 그대로의 답변만 하면 아마 차단당할 가능성이 큽니다.
평생 동안...
 
Alexander Bereznyak :
평생 동안...

잠을 자도 쉴 틈이 없다 꿈을 많이 꾸니?

의미는 어떻습니까? 결국, 당신은 그것에 속지 않을 것입니다.

삶의 의미가 증오일 때 사는 게 멋있을까? 하지만?

 
Karputov Vladimir :

대답하려면 코드가 필요합니다. 코드 조각이 있습니다. 누구나 이 코드를 실행할 수 있도록 최소한의 코드를 만드십시오.

코드의 변수 값을 함수 입구와 함수 출구에서 인쇄하는 것이 좋을 것입니다.


괜찮아요.

그러나 문제가 없었고 갑자기 ... 왜? 코드 스니펫 외에도 2016년 6월 21일과 그 이전에는 정상적으로 작동했지만 2016년 6월 22일에 갑자기 문제가 발생한 것을 볼 수 있는 로그가 있습니다. SD에 쓰기 전에 테스터에서 반복적으로 실행하여 히스토리를 디버깅했는데 문제가 발견되지 않았습니다.

그렇기 때문에 코드 레이아웃의 유용성을 의심합니다. 엔터테인먼트를 제외하고.

 #property strict

datetime oldDay, oldHour;
MqlDateTime mqlDateTime;
/*******************Expert initialization function*******************/
int OnInit ()
{
   return ( INIT_SUCCEEDED );
} /*******************************************************************/

/************************Expert tick function************************/
void OnTick ()
{
  bool newDay, newHour;
    TimeToStruct ( TimeCurrent (), mqlDateTime);
     if (( int )mqlDateTime.hour == 0 )
     {
      newDay = IsNewBar( _Symbol , PERIOD_D1 , oldDay); // Обратите внимание на то, что это отдельная переменная передаваемая в функцию по ссылке
   if (newDay)
     Print ( "***** newDay " , newDay, " mqlDateTime.hour " , mqlDateTime.hour); // Судя по распечатке newDay = true
       newHour = IsNewBar( _Symbol , PERIOD_H1 , oldHour); // А это совсем другая переменная
     if (newHour)
     Print ( "***** newHour " , newHour); // Судя по распечатке newHour = true
         if (newDay && newHour) // A ЭТО УСЛОВИЕ НЕ ВЫПОЛНЕНО НЕСМОТРЯ НА ПРЕДЫДУЩИЕ РАСПЕЧАТКИ.
         {
           Print ( "Ордер должен откыться. " );
         }
     }
} /*******************************************************************/

/*****************Определение появления нового бара******************/
bool IsNewBar( string symbol, ENUM_TIMEFRAMES timeframe, datetime &m_tOld)
 {
   datetime tNew = ( datetime ) SeriesInfoInteger (symbol, timeframe, SERIES_LASTBAR_DATE );
   if (tNew > m_tOld)
    {
     m_tOld = tNew;
     return ( true );
    }
   return ( false );
 }
/********************************************************************/

/******************Expert deinitialization function******************/
void OnDeinit ( const int reason)
{
 Comment ( "" );
} /*******************************************************************/
 

작성자가 원하지 않기 때문에 다음을 시도합니다.

 //+------------------------------------------------------------------+
//|                                                   test_1Vc2f.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link        "http://wmua.ru/slesar/"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   bool openNew,newDay,newHour;
//---
   newDay=IsNewBar( _Symbol , PERIOD_D1 ,oldDay); // 
   if (newDay)
       Print ( "***** newDay " ,newDay, " mqlDateTime.hour " ,mqlDateTime.hour); // Судя по распечатке newDay = true
   newHour=IsNewBar( _Symbol , PERIOD_H1 ,oldHour);
   if (newHour)
       Print ( "***** newHour " ,newHour); // Судя по распечатке newDay = true
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewBar( string symbol, ENUM_TIMEFRAMES timeframe, datetime &m_tOld)
  {
   datetime tNew=( datetime ) SeriesInfoInteger (symbol,timeframe, SERIES_LASTBAR_DATE );
   if (tNew>m_tOld)
     {
       Print ( "in: m_tOld = " ,m_tOld);
      m_tOld=tNew;
       Print ( "out: m_tOld = " ,m_tOld);
       return ( true );
     }
   return ( false );
  }
//+------------------------------------------------------------------+

" mqlDateTime " 구조가 무엇이며 "oldDay" 및 "oldHour" 변수를 선언할 위치를 결정하는 것이 남아 있습니다...

 
Karputov Vladimir :

작성자가 원하지 않기 때문에 다음을 시도합니다.

" mqlDateTime " 구조가 무엇이며 "oldDay" 및 "oldHour" 변수를 선언할 위치를 결정하는 것이 남아 있습니다...

모든 답변은 위의 게시물에 있습니다.