오류, 버그, 질문 - 페이지 2226

 
Andrey Khatimlianskii :

KB에서 대기 중 ;)

해결책은 생각보다 훨씬 쉬웠습니다.

타이머의 상태를 알 수 있는 표시기의 예입니다. 제어 중인 #include <Timer.mqh> 및 OnTimer() 한 줄만 추가하면 됩니다.

 #property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property indicator_chart_window
#include   <Timer.mqh>

int OnInit ()
  {
   if (iTimer.On) Print ( "Таймер включен, период таймера = " + IntegerToString (iTimer.curPer)+ " миллисеккунд" ); else Print ( "Таймер выключен" );
   EventSetMillisecondTimer ( 2201 );
   return ( INIT_SUCCEEDED );
  }
////////////////////////////////////////////  
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[])
  {
   return (rates_total);
  }
///////////////////////////////////////////// 
void OnTimer ()
  {
   if (iTimer.On) Print ( "Таймер включен, период таймера = " + IntegerToString (iTimer.curPer)+ " миллисеккунд" ); else Print ( "Таймер выключен" );
   EventKillTimer ();
   if (iTimer.On) Print ( "Таймер включен, период таймера = " + IntegerToString (iTimer.curPer)+ " миллисеккунд" ); else Print ( "Таймер выключен" );
  }

다음은 클래스 자체입니다.

 //+------------------------------------------------------------------+
//|                                                        Timer.mqh |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                         https://www.mql5.com/ru/users/nikolay7ko |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Nikolay Semko"
#property link        "https://www.mql5.com/ru/users/nikolay7ko"
#property link        "SemkoNV@bk.ru"   

///////////////////////////////////////////////////////////////////////////
class CTimer
  {
public :
                     CTimer() {curPer= 0 ; On= false ;}
                    ~CTimer() {}
   bool               On;
   int                curPer;
   void               AddNewProgTimerSec( int per){ EventSetTimer (per); curPer=per* 1000 ; On= true ;}
   void               AddNewProgTimerMilliSec( int per) { EventSetMillisecondTimer (per); curPer=per; On= true ;}
   void               KillProgTimer() { EventKillTimer (); curPer= 0 ; On= false ;}
  };
///////////////////////////////////////////////////////////////////////////
static CTimer iTimer;

#define EventSetMillisecondTimer iTimer.AddNewProgTimerMilliSec
#define EventSetTimer iTimer.AddNewProgTimerSec
#define EventKillTimer iTimer.KillProgTimer
결과:
2018.07.12 21:10:37.177	TestСTimer (EURUSD.m,M5)	Таймер выключен
2018.07.12 21:10:39.385	TestСTimer (EURUSD.m,M5)	Таймер включен, период таймера = 2201 миллисеккунд
2018.07.12 21:10:39.385	TestСTimer (EURUSD.m,M5)	Таймер выключен
파일:
Timer.mqh  3 kb
 
Nikolai Semko :

해결책은 생각보다 훨씬 쉬웠습니다.
...


커뮤니티 전체의 코딩 수준에 대해 쓰고 싶었지만 문제를 피하기 위해 생략하겠습니다 ...
제 생각에는 타이머 컨트롤을 구현하고 타이머 이벤트를 "구독"하는 기능을 제공하는 싱글톤 또는 정적 클래스의 구현을 통해 작업이 해결되는 것이 좋습니다.
"구독"은 특정 빈도로 호출되어야 하는 함수에 대한 포인터를 전달하여 구현됩니다.

 

거래 결과는 모든 틱에 대한 테스트와 다릅니다. 파기할 위치를 알려주세요 - 따옴표가 다시 그려지거나 어떻게 됩니까?

모든 틱에 대한 테스트 - 항상 동일한 결과를 제공합니다. 실제 거래 - 같은 기간에 추가 거래를 제공합니다.

고문은 2 주 동안 꺼지지 않았습니다. 시험도 2주다. 50번 실행 - 항상 동일

 
Anton Ohmat :

거래 결과는 모든 틱에 대한 테스트와 다릅니다. 파기할 위치를 알려주세요 - 따옴표가 다시 그려지거나 어떻게 됩니까?

모든 틱에 대한 테스트 - 항상 동일한 결과를 제공합니다. 실제 거래 - 같은 기간에 추가 거래를 제공합니다.

고문은 2 주 동안 꺼지지 않았습니다. 시험도 2주다. 50번 실행 - 항상 동일

"모든 눈금" 또는 "실제 눈금"으로 테스트하시겠습니까?

 
모든 틱에 대해 - 최상위 매개변수
 
Anton Ohmat :
모든 틱에 대해 - 최상위 매개변수

"모든 눈금" 모드에서 눈금은 분 막대에서 테스터에 의해 시뮬레이션됩니다. 다음은 다양한 테스트 모드 에 대한 기사입니다. https://www.mql5.com/en/articles/2612

Тестирование торговых стратегий на реальных тиках
Тестирование торговых стратегий на реальных тиках
  • www.mql5.com
В данной статье мы покажем результаты тестирования простой торговой стратегии в 3-х режимах: "OHLC на M1" с использованием только цен Open,High, Low и Close минутных баров; затем детальное моделирование в режиме "Все тики", и самое достоверное тестирование в режиме "Каждый тик на основе реальных тиков" с использованием записанных тиков из...
 
방금 실행 - 동일한 결과를 얻었습니다.
 
Sergey Dzyublik :


커뮤니티 전체의 코딩 수준에 대해 쓰고 싶었지만 문제를 피하기 위해 생략하겠습니다 ...
제 생각에는 타이머 컨트롤을 구현하고 타이머 이벤트를 "구독"하는 기능을 제공하는 싱글톤 또는 정적 클래스의 구현을 통해 작업이 해결되는 것이 좋습니다.
"구독"은 특정 빈도로 호출되어야 하는 함수에 대한 포인터를 전달하여 구현됩니다.

그런 의미심장한 말을 하면 당신은 아주 훌륭한 프로그래머인 것 같습니다. 그리고 정치적 올바름에 감사드립니다 :)).
저는 확실히 편리한 폴리타이머를 만드는 방법에 대한 비전을 가지고 있습니다. 당신의 시선은 내 시야를 더욱 확장시켰습니다. 고맙습니다.

 
Sergey Dzyublik :

문제는 싱글톤 구현을 통해 해결됩니다.

MQL5에서 싱글톤을 어떻게 구현할 수 있습니까?
 
fxsaber :

파일 로드에 오류가 있습니다. 두 로컬 에이전트가 FILE_COMMON 플래그를 사용하여 FileLoad를 통해 데이터를 읽으려고 하면 에이전트 중 하나가 중단됩니다.

FileOpen에서는 적절한 플래그를 설정할 수 있지만 FileLoad에서는 설정할 수 없습니다. 따라서 다른 FileLoad가 파일을 읽을 경우 FileLoad를 통해 파일에 대한 액세스를 허용하십시오.

이 깃발이 어떻게 도움이 될까요? 다음은 예입니다. https://www.mql5.com/en/forum/1111/page1628#comment_2702870

두 명의 Expert Advisors가 FileOpen( FILE_SHARE_READ 플래그 사용)을 통해 데이터 읽기를 시도합니다. 결과: Advisor 중 하나가 중단됨


Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2016.08.03
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы