라이브러리: 캘린더 - 페이지 14

 
mbjen #:

안녕하세요. 캘린더를 특정 시간으로 옮길 수 있나요?

트레이딩, 자동매매 시스템, 트레이딩 전략 테스트에 관한 포럼입니다.

라이브러리: 캘린더

2023.04.13 11:46 오전.

이것은 한 줄로 해결됩니다.

Calendar += 3600.


모든 기능이 기억나지 않습니다. ALT+M이 도움이 됩니다.

 
fxsaber # :


모든 기능이 기억나지 않습니다. ALT+M이 도움이 됩니다.

좋은 제안이 있습니다:
저장() 시
캘린더 -= 서버_GMT_오프셋을 빼는 것입니다;
이렇게 하면 캘린더 시간이 UTC 시간으로 저장됩니다.

Load() 시
캘린더 += 서버_GMT_오프셋을 추가합니다;
이렇게 하면 한 터미널에서 저장한 파일을 다른 터미널에서 다른 브로커의 gmt_offset을 사용하여 재사용할 수 있습니다(다른 터미널에서 EA 테스트).

클래스의 저장() 및 로드() 메서드에 이 기능을 추가하는 것이 좋습니다. 또한 저장/로드 시 캘린더 시간을 수정할 수 있도록 사용자 옵션(클래스 속성)을 추가하는 것도 유용할 것입니다.


 
amrali #:
클래스의 저장() 및 로드() 메서드에 이 기능을 추가하는 것이 좋습니다. 또한 저장/로드 시 캘린더 시간을 수정할 수 있도록 사용자 옵션(클래스 속성)을 추가하는 것도 유용할 것입니다.

이것은 합리적입니다. 안타깝게도 아직 그렇게 할 준비가 되지 않았습니다.

 
안녕하세요 - 방금 예제 캘린더 EA를 사용했는데 캘린더 데이터가 다운로드되지 않는 것 같습니다. 5.0 빌드 5200 릴리스 이전에는 잘 작동했습니다. 무엇이 잘못되었거나 수정할 수 있는 아이디어가 있나요? 고마워요
 
v88 #:
안녕하세요 - 방금 캘린더 EA 예제를 사용했는데 캘린더 데이터가 로드되지 않는 것 같습니다. 버전 5.0 5200 빌드 이전에는 정상적으로 작동했습니다. 무엇이 잘못되었는지 또는 수정 사항이 있나요? 고마워요

확인 - 작동 중입니다.


이 파일은 모든 단말기에 대해 단일 캘린더를 저장합니다.

...\AppData\Roaming\MetaQuotes\Terminal\Community\Calendar\*.dat
 
fxsaber #:

확인 - 작동 중입니다.


이 파일은 모든 단말기에 대해 단일 캘린더를 저장합니다.

두 개의 다른 터미널을 사용하는 테스트 EA에서는 확실히 작동하지 않습니다. 하나는 메타콰이어에서 직접, 다른 하나는 브로커를 통해. 아래를 참조하면 둘 다 코드 1 오류가 표시됩니다:



앱데이터\로밍\메타퀘스트\단말기\커뮤니티\캘린더, 이벤트, 국가 및 설명에 3개의 파일이 표시됩니다.


테스트 EA의 줄에 따르면 calendar.bin 파일은 "Roaming\MetaQuotes\Terminal\<식별자>\MQL5\Files" 폴더에 "Calendar.bin"으로 저장되어야 하지만 거기에 없습니다. 5200 빌드 이전에는 올바르게 배치되었을 것입니다. 무엇이 잘못되었을까요?


#define  FAKE // 이 버튼을 클릭하면 비밀번호를 입력합니다. КБ에 대한 자세한 내용을 보려면 여기를 클릭하세요.

#ifndef  FAKE

// MT4/5-트레이딩 시스템에서 트레이더로 전환하기.

#define  CALENDAR_FILENAME "Calendar.bin" // Название файла для чтения/записи Календаря.
#property tester_file CALENDAR_FILENAME  // 이제 MT5-트레이더가 이 모든 것을 지원합니다.

#include <fxsaber\Calendar\Calendar.mqh> // Календарь - 웹사이트 및 모바일 앱에 대한 정보입니다.

input group "Calendar"
input string inCurrency = "USD";        // 통화
input string inFilterName = "payrolls"; // 필터 이름

input group "EA"
input int inTP = 1000; // TakeProfit
input int inSL = 1000; // StopLoss
input bool inReverse = true; // 거래 방향

CALENDAR Calendar; // 댓글을 작성할 수 있습니다.

int OnInit()
{
  bool Res = false;

  if (MQLInfoInteger(MQL_TESTER)) // Если работаем в Тестере
  {
    Res = Calendar.Load(CALENDAR_FILENAME) &&      // Загрузили события из файла.
          Calendar.FilterByCurrency(inCurrency) && // 댓글을 작성합니다.
          Calendar.FilterByName(inFilterName);     // 사용자 정의에 대한 도움말을 제공합니다.

    if (!Res)                                      // 이 게시물에 댓글을 남깁니다,
      Print("Run the EA in the MT5-Terminal!");    // 이 페이지에서 MT5-테더링에 대한 자세한 내용을 확인할 수 있습니다.
  }
#ifdef __MQL5__
  // Работаем в Терминале.
  else if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0) && // Загрузили абсолютно все события (история + будущее) из MT5-Терминала.
           Calendar.AutoDST() &&                                 // 카메라로 촬영한 사진.
           Calendar.Save(CALENDAR_FILENAME))                     // Сохранили их в файл.
    MessageBox("You can run the EA in the MT4/5-Tester.");       // MT4/5-트레이딩 시스템으로 이동합니다.
#endif // #ifdef __MQL5__

  return(!Res);
}

void OnTick()
{
  static int Pos = Calendar.GetPosAfter(TimeCurrent()); // 댓글에 댓글을 남기려면 댓글을 작성할 수 있는 권한을 부여합니다.

  if ((Pos < Calendar.GetAmount()) &&       // Если вышли за границы Календаря не вышли за границы Календаря
      (Calendar[Pos].time < TimeCurrent())) // 를 클릭합니다.
  {
    const EVENT Event = Calendar[Pos];      // 비밀번호를 입력하세요.

    if ((Event.Actual != LONG_MIN) && (Event.Forecast != LONG_MIN)) // 이 텍스트 및 사진에 대한 자세한 내용은 다음을 참조하세요.
    {
      Print(Event.ToString()); // Распечатываем полностьюэто событие.

      if (Event.Actual > Event.Forecast)                                                                          // 이 텍스트는 이 페이지에 표시됩니다,
        PositionOpen(inReverse, "Act.(" + Event.ActualToString() + ")>(" + Event.ForecastToString() + ")For.");   // открываем позицию одного направления.
      else
        PositionOpen(!inReverse, "Act.(" + Event.ActualToString() + ")<=(" + Event.ForecastToString() + ")For."); // Иначе - другого направления.
    }

    Pos = Calendar.GetPosAfter(TimeCurrent(), Pos); // 댓글에 댓글을 남기려면 댓글을 작성할 수 있는 권한을 부여합니다.
  }
}

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

// 댓글을 작성할 수 있습니다.
TICKET_TYPE PositionOpen( const int Type, const string comment )
{
  return(Type ? OrderSend(_Symbol, OP_SELL, 1, Bid, 0, Bid + inSL * _Point, Bid - inTP * _Point, comment)
              : OrderSend(_Symbol, OP_BUY, 1, Ask, 0, Ask - inSL * _Point, Ask + inTP * _Point, comment));
}

#else // #ifndef FAKE
  int OnInit() { return(INIT_FAILED); }
#endif // #ifndef FAKE #else
 
v88 #:

두 개의 다른 터미널을 사용하는 테스트 EA에서는 확실히 작동하지 않습니다. 하나는 메타 시세에서 직접, 다른 하나는 브로커를 통해. 아래를 참조하면 둘 다 코드 1 오류가 표시됩니다:



앱데이터\로밍\메타시세\터미널\커뮤니티\캘린더, 이벤트, 국가 및 설명에 3개의 파일이 표시됩니다.


테스트 EA의 줄에 따르면 calendar.bin 파일은 "Roaming\MetaQuotes\Terminal\<식별자>\MQL5\Files" 폴더에 "Calendar.bin"으로 저장되어야 하지만 거기에 없습니다. 5200 빌드 이전에는 올바르게 배치되었을 것입니다. 무엇이 잘못되었을까요?


내 설정이 아닌지 확인하기 위해 내 네트워크 외부에 Windows 가상 머신을 설치했는데 모든 것이 깨끗했습니다. 터미널을 다운로드하고 파일 포함과 캘린더_예제 EA를 설치했습니다. 여전히 같은 문제, 오류 코드 1, calendar.bin이 다운로드되지 않습니다:


 
v88 #:

무엇이 문제일까요?

MQL5의 변경 사항이 수정되기 전까지는 살펴볼 필요가 없을 것 같습니다. 아래 빌드를 사용해 보세요.

Новая версия платформы MetaTrader 5 build 5200: расширение OpenBLAS и усиление контроля в MQL5 - Проверил логин во вкладке Сообщество в MetaEditor
Новая версия платформы MetaTrader 5 build 5200: расширение OpenBLAS и усиление контроля в MQL5 - Проверил логин во вкладке Сообщество в MetaEditor
  • 2025.08.04
  • www.mql5.com
----------------- Открываю Метатрейдер, который давно вообще не открывал. Иду в MetaEditor - там не подключено к Git - ----------------- Проверил логин во вкладке Сообщество. То есть - пока я глядел на вкладку Сообщество в MetaEditor е - этот MetaEditor сам все сделал
 

최근에 테스터에서 작업하기 위해 전체 캘린더를 파일로 저장하면 약 50초 후에 시간이 초과되기 시작하는 것을 발견했습니다.

Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0); // <-- 5401 - ERR_CALENDAR_TIMEOUT(시간 초과)이 발생했습니다,

이전에는 모든 것이 정상적으로 작동했고 전체 캘린더가 아무런 문제 없이 파일로 다운로드되었습니다. 터미널 릴리스 중 하나에서 CalendarValueHistory의 시간 초과가 줄어든 것 같습니다.

다른 터미널과 다른 서버에서 확인했지만 터미널은 모든 곳에서 b5327입니다. 기간을 줄여보기도 했습니다. 그래서 1 년 동안 시간 초과도 있습니다. 하지만 며칠 동안은 정상적으로 다운로드됩니다.

통화가 짧은 기간으로 분할되는 것을 방지할 수 있는 해결 방법이 있나요?

 
Denis Kislicyn CalendarValueHistory의 시간 초과가 줄어든 것 같습니다.

다른 터미널과 다른 서버에서 확인했지만 터미널은 모든 곳에서 b5327입니다. 기간을 줄여보기도 했습니다. 그래서 1 년 동안 시간 초과도 있습니다. 그러나 며칠 동안은 정상적으로 다운로드됩니다.

통화가 짧은 기간으로 분할되는 것을 방지할 수 있는 해결 방법이 있나요?

제가 조사를 좀 해봤습니다. 한 달보다 긴 기간을 CalendarValueHistory에 전달하면 함수가 약 50초 동안 중단되기 시작한 후 시간 초과로 인해 충돌이 발생합니다. 그러나 동일한 호출을 하루만 짧게 하면 70밀리초 이내에 실행되고 약 5,000개의 캘린더 이벤트를 완벽하게 저장합니다. 뭔가 확실히 달라졌습니다.

중재자가 자동 번역을 적용했습니다. 러시아어로 글을 작성하시려면 영어 포럼이 아닌 러시아어 포럼에서 작성해 주세요. 이 주제는 다국어 주제이므로 올바른 포럼에 게시하세요. 그렇지 않으면 자동 번역이 제대로 작동하지 않습니다.