MT 버전 아카이브.

 

친애하는, 여기에서 MT 버전의 아카이브를 만들 것을 제안합니다. 그러다가 가끔 업데이트를 하면 예상치 못한 오류가 뜨면서 이전 버전으로 롤백해야 하는 경우가 있는데...

이제 2007 빌드가 필요합니다. 가지고 있는 사람이 있습니까? 공유해주세요.

 
Сергей Таболин :

친애하는, 여기에서 MT 버전의 아카이브를 만들 것을 제안합니다. 그러다가 가끔 업데이트를 하면 예상치 못한 오류가 뜨면서 이전 버전으로 롤백해야 하는 경우가 있는데...

이제 2007 빌드가 필요합니다. 가지고 있는 사람이 있습니까? 공유해주세요.

컬렉션을 수집하는 남자가 있습니다. 그러나 내가 기억하는 한 진행 속도가 느려지지 않도록 MT 버전 아카이브에 대한 링크가 있는 그의 게시물은 때때로 삭제됩니다. ))

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MetaTrader 5 플랫폼 빌드 2007의 새 버전: 경제 달력, 서비스로서의 MQL5 프로그램

Andrey Khatimlianskii , 2019.03.15 23:03

다른 구글 계정으로 옮겼습니다. 여기에 새 링크가 있습니다.

다른 빌드가 필요한 경우 많이 있습니다.

 


내 링크가 여기에서 죽었습니다.

개발자는 신뢰할 수 있는 출처에서만 다운로드할 것을 제안합니다.

테스트 위해 내 빌드를 위험에 빠뜨리고 싶다면

휴대용 또는 아카이브에 작업 마구간을 저장하고 일반적으로 테스트 빌드에 대한 인식으로 업데이트해야 합니다.

DC에서 지금 2007 빌드는

 
Fast235 :

내 링크가 여기에서 죽었습니다.

개발자는 신뢰할 수 있는 출처에서만 다운로드할 것을 제안합니다.

테스트 위해 내 빌드를 위험에 빠뜨리고 싶다면

휴대용 또는 아카이브에 작업 마구간을 저장하고 일반적으로 테스트 빌드에 대한 인식으로 업데이트해야 합니다.

DC에서 지금 2007 빌드는

그들은 이전 버전을 제거하여 올바른 일을 합니다.

정상적인 프로그램 작성이 필요합니다. 경고를 무시하지 마십시오. 변수를 초기화하고 가능한 전역 변수를 사용하지 마십시오. 코드에서 잠재적으로 위험한 순간을 피하세요.

엄격 모드에 대한 경고가 단 한 건도 없는 수만 줄의 코드가 있습니다. CodeBase의 공예품 중 절반 - strict' 없이도 경고를 표시하지만 천 줄도 없습니다. 그런 다음 "이전 빌드에서는 모든 것이 작동했지만 새 빌드에서는 중지되었습니다"라는 사실에 대한 대화가 시작됩니다.

 
Georgiy Merts :

그들은 이전 버전을 제거하여 올바른 일을 합니다.

정상적인 프로그램 작성이 필요합니다. 경고를 무시하지 마십시오. 변수를 초기화하고 가능한 전역 변수를 사용하지 마십시오. 코드에서 잠재적으로 위험한 순간을 피하세요.

엄격 모드에 대한 경고가 단 한 건도 없는 수만 줄의 코드가 있습니다. CodeBase의 공예품 중 절반 - strict' 없이도 경고를 표시하지만 천 줄도 없습니다. 그런 다음 "이전 빌드에서는 모든 것이 작동했지만 새 빌드에서는 중지되었습니다"라는 사실에 대한 대화가 시작됩니다.

이것은 로버 프로그램입니까? 이 많은 줄로 무엇을 설명할 수 있습니까???

 
Sergey Basov :

컬렉션을 수집하는 남자가 있습니다. 그러나 내가 기억하는 한 진행 속도가 느려지지 않도록 MT 버전 아카이브에 대한 링크가 있는 그의 게시물은 때때로 삭제됩니다. ))

고맙습니다. 다운로드했습니다.

Fast235 :

내 링크가 여기에서 죽었습니다.

개발자는 신뢰할 수 있는 출처에서만 다운로드할 것을 제안합니다.

테스트 작성 을 위해 내 빌드를 위험에 빠뜨리고 싶다면

휴대용 또는 아카이브에 작업 마구간을 저장하고 일반적으로 테스트 빌드에 대한 인식으로 업데이트해야 합니다.

DC에서 지금 2007 빌드는

테스트로 업그레이드하지 않습니다. 그리고 이제 저장하겠습니다.

조지 머츠 :

그들은 이전 버전을 제거하여 올바른 일을 합니다.

정상적인 프로그램 작성이 필요합니다. 경고를 무시하지 마십시오. 변수를 초기화하고 가능한 전역 변수를 사용하지 마십시오. 코드에서 잠재적으로 위험한 순간을 피하세요.

엄격 모드에 대한 경고가 단 한 건도 없는 수만 줄의 코드가 있습니다. CodeBase의 공예품 중 절반 - strict' 없이도 경고를 표시하지만 천 줄도 없습니다. 그런 다음 "이전 빌드에서는 모든 것이 작동했지만 새 빌드에서는 중지되었습니다"라는 사실에 대한 대화가 시작됩니다.

조지, 스레드에서 내 마지막 게시물을 읽어보세요. 문제의 원인을 찾았습니다. 내 코드에 없습니다.

 
Сергей Таболин :

고맙습니다. 다운로드했습니다.

테스트로 업그레이드하지 않습니다. 그리고 이제 저장하겠습니다.

조지, 스레드에서 내 마지막 게시물을 읽어보세요. 문제의 원인을 찾았습니다. 내 코드에 없습니다.

나는 읽었다.

문제의 근원은 개발자와 당신이 상황에 다소 다르게 접근했다는 것입니다. 대략적으로 말하면 "서로를 이해하지 못했다." 그렇기 때문에 코드는 모호할 수 있는 부분을 제외하고 항상 가능한 한 간단하고 명확해야 한다고 주장합니다.

MT5가 막 출시되던 시절을 기억합니다. 모두가 놀랐고 사람들은 변수가 0이 될 것이라고 믿고 초기화 없이 변수를 엄청나게 사용했습니다.

여기 에서 일화 를 어떻게 기억하지 않을 수 있습니까?

말비나는 피노키오에게 사과 세 개를 주었습니다. 그는 두 개를 먹었다. 피노키오에게 남은 사과는 몇 개입니까?

프로그래머 N1 :
- 얼마인지는 알려져 있지 않다. 그가 전에 얼마나 많은 사과를 가지고 있었는지 아무도 모릅니다!

도덕 : 초기 변수를 0으로 설정합니다.


프로그래머 N2
- 얼마인지는 알려져 있지 않다. Malvina가 사과를 주는 동안 Pierrot도 사과를 먹었습니까?

도덕 : 전역 변수 를 사용하지 마십시오.

프로그래머 N3
- 얼마인지는 알려져 있지 않다. 피노키오가 사과를 먹었다는 것이 아니라 두 개를 먹었다고 하는데, 무엇인지는 불명. 또한 "피노키오"라는 이름이 기울어지지 않는다는 사실을 감안할 때 피노키오와 피노키오는 다른 변수입니다.


도덕 : 문법을 지켜라

 
Сергей Таболин :

고맙습니다. 다운로드했습니다.

테스트로 업그레이드하지 않습니다. 그리고 이제 저장하겠습니다.

조지, 스레드에서 내 마지막 게시물을 읽어보세요. 문제의 원인을 찾았습니다. 내 코드에 없습니다 .

그러나 문제의 원인은 새 빌드가 아니라 "문서를 읽지 않음"이었습니다. 따라서 당신은 교활하고 코드가 아닌 것에 대해 이야기하고 있습니다.

하나:

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

자, 다음에는 무엇을 하시겠습니까?

세르게이 타볼린 , 2019.06.16 00:17

이 혼란의 원인을 찾았습니다.

요점은 이렇습니다.

 //--- пропустить бесполезные проходы оптимизации
//*
   if (!check_init && ( MQLInfoInteger ( MQL_OPTIMIZATION ) || MQLInfoInteger ( MQL_TESTER )))
   {
       if (period_HMA7C == 0 && move_profit)                                                             TesterStop ();
       if (period_HMA7C == 0 && move_stop)                                                               TesterStop ();
       if (period_HMA7C == 0 && shift_correction_HMA7C != 5 )                                             TesterStop ();
       if (indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0 )                               TesterStop ();
       if (indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0 )                               TesterStop ();
       if ((stop_loss_buy > 0 && stop_loss_buy < 700 ) || (stop_loss_sell > 0 && stop_loss_sell < 700 ))   TesterStop ();
      check_init = true ;
   }
//*/

새 릴리스에서는 TesterStop() 후에 OnTester()도 시작되지만 마음에 따르면 시작해서는 안 됩니다.

당연히 준비된 데이터가 없으므로 결과가 어떻게 됩니까?

캔트 MT 2085.

2:

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

자, 다음에는 무엇을 하시겠습니까?

세르게이 타볼린 , 2019.06.16 09:02

죄송합니다. 설명은 OnTester()가 호출된 후라고 말합니다. (((

당신은 여전히 거기에서 확인해야합니다. ExpertRemove()로 교체해 보겠습니다 ...

그런 다음 다시 "시도"하겠습니다 ... 그리고 테스트가 성공하지 못하면 MQ가 다시 비난받을 것입니까?

기억나지 않지만 제 생각에는 "나쁜" 패스를 건너뛰는 특별한 기능이 있습니다. 그리고 당신이 시도하고 싶은 바로, 개발자는 내 기억이 맞다면 사용을 권장하지 않았습니다.

그러나 내 메시지에서 중요한 것은 개발자를 비난하기 전에 먼저 문서를 읽고 포럼에 해결책을 요청한 다음 실제로 발견된 오류의 경우에만 버그 보고서를 제출해야 한다는 것입니다. 그것을 재생산하는 최소한의 코드로. 이거 심각할듯...

 
Artyom Trishkin :

그러나 문제의 원인은 새 빌드가 아니라 "문서를 읽지 않음"이었습니다. 따라서 당신은 교활하고 코드가 아닌 것에 대해 이야기하고 있습니다.

하나:

2:

그런 다음 다시 "시도"하겠습니다 ... 그리고 테스트가 성공하지 못하면 MQ가 다시 비난받을 것입니까?

기억나지 않지만 제 생각에는 "나쁜" 패스를 건너뛰는 특별한 기능이 있습니다. 그리고 당신이 시도하고 싶은 바로, 개발자는 내 기억이 맞다면 사용을 권장하지 않았습니다.

그러나 내 메시지에서 중요한 것은 개발자를 비난하기 전에 먼저 문서를 읽고 포럼에 해결책을 요청한 다음 실제로 발견된 오류의 경우에만 버그 보고서를 제출해야 한다는 것입니다. 그것을 재생산하는 최소한의 코드로. 이거 심각할듯...

Artyom, 문제는 새 빌드에 있습니다!

여기에서 오류 없이 작동하는 코드를 작성했다고 가정해 보겠습니다. 오랫동안 작동합니다. 그리고 갑자기 MT가 새로 출시된 후 많은 오류와 함께 충돌합니다. 누가 유죄입니까? 특히 많은 사람들이 알고 있듯이 문서가 혁신을 설명하는 속도를 항상 따라가지 못한다는 점을 고려할 때.

따라서 내 코드는 오류 없이 작동했습니다.

나는 이것을 사용했다:

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

INIT_PARAMETERS_INCORRECT를 대체하는 방법? 해결책을 찾았습니다)))

세르게이 타볼린 , 2019.04.24 08:48

이 스레드에서 내 자신의 질문에 대한 답변을 찾았습니다.

모든 것이 아주 간단하게 밝혀졌습니다. 유효하지 않은 매개변수에 대한 검사를 OnInit()에서 OnTick()으로 이동하는 것으로 충분합니다.

 bool                  check_init              = false ;                 // флаг проверки входных параметров
..........
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
//--- пропустить бесполезные проходы оптимизации
//*
   if (!check_init && ( MQLInfoInteger ( MQL_OPTIMIZATION ) || MQLInfoInteger ( MQL_TESTER )))
   {
       if (period_HMA7C == 0 && move_profit)                                 ExpertRemove ();
       if (period_HMA7C == 0 && move_stop)                                   ExpertRemove ();
       if (period_HMA7C == 0 && shift_correction_HMA7C != 5 )                 ExpertRemove ();
      check_init = true ;
   }
//*/ 
//+------------------------------------------------------------------+ 

확인했습니다! 공장. 유전자는 실패하지 않는다

이제 문제가 발생한 후 몇 줄을 더 추가했습니다.

 bool                  check_init              = false ;                 // флаг проверки входных параметров
bool                  tester_stop             = true ;                 // флаг проверки выхода по TesterStop
.............
void OnTick ()
{
//--- пропустить бесполезные проходы оптимизации
//*
   if (!check_init && ( MQLInfoInteger ( MQL_OPTIMIZATION ) || MQLInfoInteger ( MQL_TESTER )))
   {
       if (period_HMA7C == 0 && move_profit)                                                             TesterStop ();
       if (period_HMA7C == 0 && move_stop)                                                               TesterStop ();
       if (period_HMA7C == 0 && shift_correction_HMA7C != 5 )                                             TesterStop ();
       if (indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0 )                               TesterStop ();
       if (indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0 )                               TesterStop ();
       if ((stop_loss_buy > 0 && stop_loss_buy < 700 ) || (stop_loss_sell > 0 && stop_loss_sell < 700 ))
      {
         Print ( "Результат в OnTester() должен быть -99999999999.99" );
         TesterStop ();
      }
      check_init  = true ;
       tester_stop = false ;
   }
//*/
.........
}
Вызов TesterStop () считается нормальным завершением тестирования, и поэтому будет вызвана функция OnTester () 
с отдачей тестеру стратегий всей накопленной торговой статистики и значения критерия оптимизации.

정신적으로 나머지 코드를 실행하지 않고 전송이 즉시 수행되어야 한다고 가정합니다. 그래서?

사실 TesterStop()은 테스트를 전혀 중지하지 않습니다!

 double OnTester ()
{
   if (tester_stop) return (- 99999999999. 99 );
   
   double    equity_dd_percent             = TesterStatistics ( STAT_EQUITY_DDREL_PERCENT );
   if (equity_dd_percent > 0.0 )
   {
      equity_dd_percent = 100.0 / equity_dd_percent;
   }
   else      equity_dd_percent    = 1.0 ;
   
   double    param                         = 0.0 ;
   double    profit                        = TesterStatistics ( STAT_PROFIT );
   double    stability                     = 0.0 ;
   int       balance_arr_size              = ArraySize (balance_arr) - 1 ;
   int       alpha_size                    = balance_arr_size - 1 ;
   int       beta_size                     = alpha_size - 1 ;
   double    trade2time                    = ratioTrades2Time( TesterStatistics ( STAT_TRADES ));
   double    max_balance                   = balance_arr[ 0 ];
//+-------------------   
   if (balance_arr[balance_arr_size- 1 ] - balance_arr[ 0 ] == 0.0 ) return (- 99999999999. 88 );
//+-------------------   

"잘못된" 매개변수를 입력했고 다음 결과를 얻었습니다.

LL       0        11 : 30 : 20.816     Core 1    2016.10 . 01 00 : 00 : 00    Советник получил MAGIC = 153128312914612747 .
QN       0        11 : 30 : 20.816     Core 1    2016.10 . 03 00 : 00 : 00    Результат в OnTester () должен быть - 99999999999. 99
NJ       3        11 : 30 : 20.816     Core 1    TesterStop () called on 0 % of testing interval
CD       0        11 : 30 : 20.816     Core 1    final balance 10000.00 USD
QF       0        11 : 30 : 20.816     Core 1    OnTester result - 99999999999. 88

그래서 버그입니다! Cant는 MQ입니다.

이 시나리오에서 TesterStop() 및 ExpertRemove () 가 OnTester()로 제어를 즉시 이전할 수 없는 경우 true를 반환해야 한다고 생각합니다. 예를 들어 다음과 같이 어떻게든 반응할 수 있습니다.

 bool                  tester_stop = false ;                 // флаг проверки выхода по TesterStop
.......
void OnTick ()
{
//--- пропустить бесполезные проходы оптимизации
   if (!check_init && ( MQLInfoInteger ( MQL_OPTIMIZATION ) || MQLInfoInteger ( MQL_TESTER )))
   {
       if (недопустимый параметр)          tester_stop = TesterStop ();
........
}
double OnTester ()
{
   if (tester_stop) return (- 99999999999.99 );

이 경우 논리적으로 예상되는 정확한 결과를 얻을 수 있고 탬버린으로 춤을 준비하지 않고 테스트를 중지한 결과 이론적으로 발생할 수 있는 모든 오류를 제공할 수 있습니다.

 
Сергей Таболин :

Artyom, 문제는 새 빌드에 있습니다!

여기에서 오류 없이 작동하는 코드를 작성했다고 가정해 보겠습니다. 오랫동안 작동합니다. 그리고 갑자기 MT가 새로 출시된 후 많은 오류와 함께 충돌합니다. 누가 유죄입니까? 특히 많은 사람들이 알고 있듯이 문서가 혁신을 설명하는 속도를 항상 따라가지 못한다는 점을 고려할 때.

따라서 내 코드는 오류 없이 작동했습니다.

나는 이것을 사용했다:

이제 문제가 발생한 후 몇 줄을 더 추가했습니다.

정신적으로 나머지 코드를 실행하지 않고 전송이 즉시 수행되어야 한다고 가정합니다. 그래서?

사실 TesterStop()은 테스트를 전혀 중지하지 않습니다!

"잘못된" 매개변수를 입력하고 다음 결과를 얻었습니다.

그래서 버그입니다! Cant는 MQ입니다.

이 시나리오에서 TesterStop() 및 ExpertRemove () 가 OnTester()로 제어를 즉시 이전할 수 없는 경우 true를 반환해야 한다고 생각합니다. 예를 들어 다음과 같이 어떻게든 반응할 수 있습니다.

이 경우 논리적으로 예상되는 정확한 결과를 얻을 수 있고 탬버린으로 춤을 준비하지 않고 테스트를 중지한 결과 이론적으로 발생할 수 있는 모든 오류를 제공할 수 있습니다.

당신의 모든 계산과 테스트는 나에게 보여져서는 안 되며, 어느 정도의 풍자와 짜증이 아니라 " 오류, 버그, 질문 " 주제에서 건조하고 간결하게 보여야 합니다. 물론 당신이 듣고 답을 얻고 싶지 않다면.

추신. 그리고 버그 리포트에서 "jamb", "wine", "dancing with tambourine" 및 기타 "똥 코드"와 같은 단어를 잊어버리는 것이 좋습니다. 모든 사람과 당신도 실수를 하지 않습니다. 예, 그리고 "미친" 진술은 그다지 심각하지 않고 건설적이지 않게 보입니다.

 
Artyom Trishkin :

모든 계산과 테스트는 나에게 보여질 필요가 없으며 어느 정도의 풍자와 자극이 아니라 " 오류, 버그, 질문 "주제에서 건조하고 간결합니다. 물론 당신이 듣고 대답을 듣고 싶지 않다면.

그렇게 느끼셨다면 죄송합니다. 물론 짜증이 나긴 하지만 갑자기 문제가 생겼을 때 어떻게 안 할 수 있겠습니까? 그리고 풍자 ... - 내 생각에는 명백한 실수에 대한 당혹감. ))

지정된 주제에 관해서는 질문이 쉽게 "잃어버릴" 수 있는 것 같습니다. 그래서 특정 문제가 있는 새로운 주제가 더 효과적이라고 생각합니까? 아님?

어쨌든 중재자 인 당신은 자신이 그 존재를 확인하면 일부 문제에 대해 개발자의 관심을 끌 가능성이 더 큽니다.)))

거기에 질문을 추가하려고합니다 ...