당사 팬 페이지에 가입하십시오
- 조회수:
- 27
- 평가:
- 게시됨:
- 2025.04.03 11:16
-
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동
EA(Expert Advisor) 의 경우 메타트레이더에서 새 호가("틱")가 수신되면 터미널에서 표준 OnTick() 이벤트 처리 함수가 호출됩니다. 그러나 새 막대(캔들)가 시작될 때를 위한 표준 이벤트 처리 함수는 없습니다.
이를 감지하려면 가장 최근 바의 시작 시간을 모니터링해야 합니다. 이 시간이 변경되면 새로운 바가 시작되었음을 의미하므로 상황에 대응하여 이벤트를 처리할 수 있습니다. 다음 코드 예제는 MQL4 및 MQL5와 모두 호환되며, 이를 달성하는 방법 중 하나를 보여줍니다:
// 표준 틱 이벤트 핸들러 void OnTick() { // 새 막대가 있는지 확인합니다(MQL4 및 MQL5와 호환). static datetime dtBarraCorrente = WRONG_VALUE; datetime dtBarraPrecedente = dtBarraCorrente; dtBarraCorrente = iTime( _Symbol, _Period, 0 ); bool bEventoBarraNova = ( dtBarraCorrente != dtBarraPrecedente ); // 새로운 바 이벤트에 반응하고 상황을 처리합니다. if( bEventoBarraNova ) { // 처음 수신된 틱인지 감지하고 상황을 처리합니다. /* 예를 들어 그래프에 처음 적용했을 때 는 막대가 진행 중이며 는 실제로 새 막대의 시작이 아닙니다. */ if( dtBarraPrecedente == WRONG_VALUE ) { // 첫 번째 틱 또는 막대 중간에 무언가를 수행합니다... } else { // 일반 막대가 나타나면 작업을 수행합니다 ... }; // 이전 조건과 독립적인 작업을 수행합니다 ... } else { // 다른 작업 수행 ... }; // 다른 작업 수행 ... };
이전 코드에서 정적 변수는 OnTick() 함수에서 돌아올 때에도 바의 개장 시간을 추적합니다. 일반 지역 변수와 달리 데이터 내용을 기억하고 함수를 벗어날 때 해제하지 않습니다. 이것이 현재 막대의 개장 시간 변경을 감지하는 핵심입니다.
또한 EA가 차트에 처음 배치되면 이전 코드는 막대가 방금 열린 것처럼 반응한다는 점에 유의해야 합니다. 이 조건은 상황을 다르게 처리해야 하는 경우 특별한 처리가 필요합니다.
모든 코드베이스 게시물의 소스 코드는 이제 MetaEditor의 "공개 프로젝트"에서 "FMIC"라는 이름으로도 사용할 수 있습니다.
MetaQuotes Ltd에서 포르투갈어로 번역함.
원본 기고글: https://www.mql5.com/pt/code/41601

This Bot detects the open of a new candle on any set timeframe, thereby making it easier to run a one-time code, place trades and call other functions. The code is written in the OnTick() function.

임의의 EA의 읽기/쓰기 매개변수 라이브러리.